Implement --base-file command line switch.
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
CommitLineData
c906108c
SS
1/* Everything about breakpoints, for GDB.
2 Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 1999
c5aa993b 3 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b
JM
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,
20 Boston, MA 02111-1307, USA. */
c906108c
SS
21
22#include "defs.h"
23#include <ctype.h>
24#include "symtab.h"
25#include "frame.h"
26#include "breakpoint.h"
27#include "gdbtypes.h"
28#include "expression.h"
29#include "gdbcore.h"
30#include "gdbcmd.h"
31#include "value.h"
32#include "command.h"
33#include "inferior.h"
34#include "gdbthread.h"
35#include "target.h"
36#include "language.h"
37#include "gdb_string.h"
38#include "demangle.h"
39#include "annotate.h"
40#include "symfile.h"
41#include "objfiles.h"
42
43/* Prototypes for local functions. */
44
45static void
46catch_command_1 PARAMS ((char *, int, int));
47
48static void
49enable_delete_command PARAMS ((char *, int));
50
51static void
52enable_delete_breakpoint PARAMS ((struct breakpoint *));
53
54static void
55enable_once_command PARAMS ((char *, int));
56
57static void
58enable_once_breakpoint PARAMS ((struct breakpoint *));
59
60static void
61disable_command PARAMS ((char *, int));
62
63static void
64enable_command PARAMS ((char *, int));
65
66static void
c5aa993b 67map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
c906108c
SS
68
69static void
70ignore_command PARAMS ((char *, int));
71
72static int breakpoint_re_set_one PARAMS ((PTR));
73
74static void
75clear_command PARAMS ((char *, int));
76
77static void
78catch_command PARAMS ((char *, int));
79
80static void
81handle_gnu_4_16_catch_command PARAMS ((char *, int, int));
82
83static struct symtabs_and_lines
84get_catch_sals PARAMS ((int));
85
86static void
87watch_command PARAMS ((char *, int));
88
89static int
90can_use_hardware_watchpoint PARAMS ((struct value *));
91
7a292a7a
SS
92static void break_at_finish_command PARAMS ((char *, int));
93static void break_at_finish_at_depth_command PARAMS ((char *, int));
94
c906108c
SS
95void
96tbreak_command PARAMS ((char *, int));
97
7a292a7a
SS
98static void tbreak_at_finish_command PARAMS ((char *, int));
99
c906108c
SS
100static void
101break_command_1 PARAMS ((char *, int, int));
102
103static void
104mention PARAMS ((struct breakpoint *));
105
106struct breakpoint *
c5aa993b 107 set_raw_breakpoint PARAMS ((struct symtab_and_line));
c906108c
SS
108
109static void
110check_duplicates PARAMS ((CORE_ADDR, asection *));
111
112static void
113describe_other_breakpoints PARAMS ((CORE_ADDR, asection *));
114
115static void
116breakpoints_info PARAMS ((char *, int));
117
118static void
119breakpoint_1 PARAMS ((int, int));
120
121static bpstat
c5aa993b 122 bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
c906108c
SS
123
124static int breakpoint_cond_eval PARAMS ((PTR));
125
126static void
127cleanup_executing_breakpoints PARAMS ((PTR));
128
129static void
130commands_command PARAMS ((char *, int));
131
132static void
133condition_command PARAMS ((char *, int));
134
135static int
136get_number PARAMS ((char **));
137
138void
139set_breakpoint_count PARAMS ((int));
140
141#if 0
142static struct breakpoint *
c5aa993b 143 create_temp_exception_breakpoint PARAMS ((CORE_ADDR));
c906108c
SS
144#endif
145
c5aa993b
JM
146typedef enum
147 {
148 mark_inserted,
149 mark_uninserted
150 }
151insertion_state_t;
c906108c
SS
152
153static int
154remove_breakpoint PARAMS ((struct breakpoint *, insertion_state_t));
155
156static int print_it_normal PARAMS ((bpstat));
157
c5aa993b
JM
158typedef struct
159 {
160 enum exception_event_kind kind;
161 int enable;
162 }
163args_for_catchpoint_enable;
c906108c
SS
164
165static int watchpoint_check PARAMS ((PTR));
166
167static int cover_target_enable_exception_callback PARAMS ((PTR));
168
169static int print_it_done PARAMS ((bpstat));
170
171static int print_it_noop PARAMS ((bpstat));
172
173static void maintenance_info_breakpoints PARAMS ((char *, int));
174
175#ifdef GET_LONGJMP_TARGET
176static void create_longjmp_breakpoint PARAMS ((char *));
177#endif
178
179static int hw_breakpoint_used_count PARAMS ((void));
180
181static int hw_watchpoint_used_count PARAMS ((enum bptype, int *));
182
183static void hbreak_command PARAMS ((char *, int));
184
185static void thbreak_command PARAMS ((char *, int));
186
187static void watch_command_1 PARAMS ((char *, int, int));
188
189static void rwatch_command PARAMS ((char *, int));
190
191static void awatch_command PARAMS ((char *, int));
192
193static void do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
194
c5aa993b 195static void create_solib_load_unload_event_breakpoint PARAMS ((char *hookname, int tempflag, char *dll_pathname, char *cond_string, enum bptype bp_kind));
7a292a7a 196
c5aa993b 197static void create_fork_vfork_event_catchpoint PARAMS ((int tempflag, char *cond_string, enum bptype bp_kind));
7a292a7a
SS
198
199static void break_at_finish_at_depth_command_1 PARAMS ((char *arg, int flag, int from_tty));
200
201static void break_at_finish_command_1 PARAMS ((char *arg, int flag, int from_tty));
202
203static void stop_command PARAMS ((char *arg, int from_tty));
204
205static void stopin_command PARAMS ((char *arg, int from_tty));
206
207static void stopat_command PARAMS ((char *arg, int from_tty));
208
209static char *ep_find_event_name_end PARAMS ((char *arg));
210
211static char *ep_parse_optional_if_clause PARAMS ((char **arg));
212
213static char *ep_parse_optional_filename PARAMS ((char **arg));
214
215static void catch_exec_command_1 PARAMS ((char *arg, int tempflag, int from_tty));
216
c5aa993b 217static void create_exception_catchpoint PARAMS ((int tempflag, char *cond_string, enum exception_event_kind ex_event, struct symtab_and_line * sal));
7a292a7a
SS
218
219static void catch_exception_command_1 PARAMS ((enum exception_event_kind ex_event, char *arg, int tempflag, int from_tty));
220
221static void tcatch_command PARAMS ((char *arg, int from_tty));
222
223static void ep_skip_leading_whitespace PARAMS ((char **s));
224
c906108c
SS
225/* Prototypes for exported functions. */
226
227static void
228awatch_command PARAMS ((char *, int));
229
230static void
231do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
232
233/* If FALSE, gdb will not use hardware support for watchpoints, even
234 if such is available. */
235static int can_use_hw_watchpoints;
236
237void delete_command PARAMS ((char *, int));
238
239void _initialize_breakpoint PARAMS ((void));
240
241void set_breakpoint_count PARAMS ((int));
242
c5aa993b 243extern int addressprint; /* Print machine addresses? */
c906108c
SS
244
245#if defined (GET_LONGJMP_TARGET) || defined (SOLIB_ADD)
246static int internal_breakpoint_number = -1;
247#endif
248
249/* Are we executing breakpoint commands? */
250static int executing_breakpoint_commands;
251
252/* Walk the following statement or block through all breakpoints.
253 ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
254 breakpoint. */
255
256#define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
257
258#define ALL_BREAKPOINTS_SAFE(b,tmp) \
259 for (b = breakpoint_chain; \
260 b? (tmp=b->next, 1): 0; \
261 b = tmp)
262
263/* True if SHIFT_INST_REGS defined, false otherwise. */
264
265int must_shift_inst_regs =
266#if defined(SHIFT_INST_REGS)
2671
268#else
2690
270#endif
c5aa993b 271 ;
c906108c
SS
272
273/* True if breakpoint hit counts should be displayed in breakpoint info. */
274
275int show_breakpoint_hit_counts = 1;
276
277/* Chain of all breakpoints defined. */
278
279struct breakpoint *breakpoint_chain;
280
281/* Number of last breakpoint made. */
282
283int breakpoint_count;
284
c5aa993b
JM
285/* Pointer to current exception event record */
286static struct exception_event_record *current_exception_event;
c906108c
SS
287
288/* Indicator of whether exception catchpoints should be nuked
289 between runs of a program */
290int exception_catchpoints_are_fragile = 0;
c5aa993b 291
c906108c
SS
292/* Indicator of when exception catchpoints set-up should be
293 reinitialized -- e.g. when program is re-run */
294int exception_support_initialized = 0;
295
296/* This function returns a pointer to the string representation of the
297 pathname of the dynamically-linked library that has just been
298 loaded.
299
300 This function must be used only when SOLIB_HAVE_LOAD_EVENT is TRUE,
301 or undefined results are guaranteed.
302
303 This string's contents are only valid immediately after the
304 inferior has stopped in the dynamic linker hook, and becomes
305 invalid as soon as the inferior is continued. Clients should make
306 a copy of this string if they wish to continue the inferior and
307 then access the string. */
308
309#ifndef SOLIB_LOADED_LIBRARY_PATHNAME
310#define SOLIB_LOADED_LIBRARY_PATHNAME(pid) ""
311#endif
312
313/* This function returns a pointer to the string representation of the
314 pathname of the dynamically-linked library that has just been
315 unloaded.
316
317 This function must be used only when SOLIB_HAVE_UNLOAD_EVENT is
318 TRUE, or undefined results are guaranteed.
319
320 This string's contents are only valid immediately after the
321 inferior has stopped in the dynamic linker hook, and becomes
322 invalid as soon as the inferior is continued. Clients should make
323 a copy of this string if they wish to continue the inferior and
324 then access the string. */
325
326#ifndef SOLIB_UNLOADED_LIBRARY_PATHNAME
327#define SOLIB_UNLOADED_LIBRARY_PATHNAME(pid) ""
328#endif
329
330/* This function is called by the "catch load" command. It allows the
331 debugger to be notified by the dynamic linker when a specified
332 library file (or any library file, if filename is NULL) is loaded. */
333
334#ifndef SOLIB_CREATE_CATCH_LOAD_HOOK
335#define SOLIB_CREATE_CATCH_LOAD_HOOK(pid,tempflag,filename,cond_string) \
336 error ("catch of library loads not yet implemented on this platform")
337#endif
338
339/* This function is called by the "catch unload" command. It allows
340 the debugger to be notified by the dynamic linker when a specified
341 library file (or any library file, if filename is NULL) is
342 unloaded. */
343
344#ifndef SOLIB_CREATE_CATCH_UNLOAD_HOOK
345#define SOLIB_CREATE_CATCH_UNLOAD_HOOK(pid,tempflag,filename,cond_string) \
346 error ("catch of library unloads not yet implemented on this platform")
347#endif
348
349/* Set breakpoint count to NUM. */
350
351void
352set_breakpoint_count (num)
353 int num;
354{
355 breakpoint_count = num;
356 set_internalvar (lookup_internalvar ("bpnum"),
357 value_from_longest (builtin_type_int, (LONGEST) num));
358}
359
360/* Used in run_command to zero the hit count when a new run starts. */
361
362void
363clear_breakpoint_hit_counts ()
364{
365 struct breakpoint *b;
366
367 ALL_BREAKPOINTS (b)
368 b->hit_count = 0;
369}
370
371/* Default address, symtab and line to put a breakpoint at
372 for "break" command with no arg.
373 if default_breakpoint_valid is zero, the other three are
374 not valid, and "break" with no arg is an error.
375
376 This set by print_stack_frame, which calls set_default_breakpoint. */
377
378int default_breakpoint_valid;
379CORE_ADDR default_breakpoint_address;
380struct symtab *default_breakpoint_symtab;
381int default_breakpoint_line;
382\f
383/* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
384 Advance *PP after the string and any trailing whitespace.
385
386 Currently the string can either be a number or "$" followed by the name
387 of a convenience variable. Making it an expression wouldn't work well
388 for map_breakpoint_numbers (e.g. "4 + 5 + 6"). */
389static int
390get_number (pp)
391 char **pp;
392{
393 int retval;
394 char *p = *pp;
395
396 if (p == NULL)
397 /* Empty line means refer to the last breakpoint. */
398 return breakpoint_count;
399 else if (*p == '$')
400 {
401 /* Make a copy of the name, so we can null-terminate it
c5aa993b 402 to pass to lookup_internalvar(). */
c906108c
SS
403 char *varname;
404 char *start = ++p;
405 value_ptr val;
406
407 while (isalnum (*p) || *p == '_')
408 p++;
409 varname = (char *) alloca (p - start + 1);
410 strncpy (varname, start, p - start);
411 varname[p - start] = '\0';
412 val = value_of_internalvar (lookup_internalvar (varname));
413 if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
414 error (
c5aa993b
JM
415 "Convenience variables used to specify breakpoints must have integer values."
416 );
c906108c
SS
417 retval = (int) value_as_long (val);
418 }
419 else
420 {
421 if (*p == '-')
422 ++p;
423 while (*p >= '0' && *p <= '9')
424 ++p;
425 if (p == *pp)
426 /* There is no number here. (e.g. "cond a == b"). */
427 error_no_arg ("breakpoint number");
428 retval = atoi (*pp);
429 }
430 if (!(isspace (*p) || *p == '\0'))
431 error ("breakpoint number expected");
432 while (isspace (*p))
433 p++;
434 *pp = p;
435 return retval;
436}
437\f
438/* condition N EXP -- set break condition of breakpoint N to EXP. */
439
440static void
441condition_command (arg, from_tty)
442 char *arg;
443 int from_tty;
444{
445 register struct breakpoint *b;
446 char *p;
447 register int bnum;
448
449 if (arg == 0)
450 error_no_arg ("breakpoint number");
451
452 p = arg;
453 bnum = get_number (&p);
454
455 ALL_BREAKPOINTS (b)
456 if (b->number == bnum)
c5aa993b
JM
457 {
458 if (b->cond)
459 {
460 free ((PTR) b->cond);
461 b->cond = 0;
462 }
463 if (b->cond_string != NULL)
464 free ((PTR) b->cond_string);
c906108c 465
c5aa993b
JM
466 if (*p == 0)
467 {
468 b->cond = 0;
469 b->cond_string = NULL;
470 if (from_tty)
471 printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
472 }
473 else
474 {
475 arg = p;
476 /* I don't know if it matters whether this is the string the user
477 typed in or the decompiled expression. */
478 b->cond_string = savestring (arg, strlen (arg));
479 b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
480 if (*arg)
481 error ("Junk at end of expression");
482 }
483 breakpoints_changed ();
484 return;
485 }
c906108c
SS
486
487 error ("No breakpoint number %d.", bnum);
488}
489
490/* ARGSUSED */
491static void
492commands_command (arg, from_tty)
493 char *arg;
494 int from_tty;
495{
496 register struct breakpoint *b;
497 char *p;
498 register int bnum;
499 struct command_line *l;
500
501 /* If we allowed this, we would have problems with when to
502 free the storage, if we change the commands currently
503 being read from. */
504
505 if (executing_breakpoint_commands)
506 error ("Can't use the \"commands\" command among a breakpoint's commands.");
507
508 p = arg;
509 bnum = get_number (&p);
510 if (p && *p)
511 error ("Unexpected extra arguments following breakpoint number.");
c5aa993b 512
c906108c
SS
513 ALL_BREAKPOINTS (b)
514 if (b->number == bnum)
c5aa993b
JM
515 {
516 char tmpbuf[128];
517 sprintf (tmpbuf, "Type commands for when breakpoint %d is hit, one per line.", bnum);
518 l = read_command_lines (tmpbuf, from_tty);
519 free_command_lines (&b->commands);
520 b->commands = l;
521 breakpoints_changed ();
522 return;
523 }
c906108c
SS
524 error ("No breakpoint number %d.", bnum);
525}
526\f
527/* Like target_read_memory() but if breakpoints are inserted, return
528 the shadow contents instead of the breakpoints themselves.
529
530 Read "memory data" from whatever target or inferior we have.
531 Returns zero if successful, errno value if not. EIO is used
532 for address out of bounds. If breakpoints are inserted, returns
533 shadow contents, not the breakpoints themselves. From breakpoint.c. */
534
535int
536read_memory_nobpt (memaddr, myaddr, len)
537 CORE_ADDR memaddr;
538 char *myaddr;
539 unsigned len;
540{
541 int status;
542 struct breakpoint *b;
543 CORE_ADDR bp_addr = 0;
544 int bp_size = 0;
545
546 if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
547 /* No breakpoints on this machine. */
548 return target_read_memory (memaddr, myaddr, len);
c5aa993b 549
c906108c 550 ALL_BREAKPOINTS (b)
c5aa993b
JM
551 {
552 if (b->type == bp_none)
553 warning ("attempted to read through apparently deleted breakpoint #%d?\n", b->number);
554
555 /* memory breakpoint? */
556 if (b->type == bp_watchpoint
557 || b->type == bp_hardware_watchpoint
558 || b->type == bp_read_watchpoint
559 || b->type == bp_access_watchpoint)
560 continue;
561 /* bp in memory? */
562 if (!b->inserted)
563 continue;
564 /* Addresses and length of the part of the breakpoint that
565 we need to copy. */
566 /* XXXX The m68k, sh and h8300 have different local and remote
567 breakpoint values. BREAKPOINT_FROM_PC still manages to
568 correctly determine the breakpoints memory address and size
569 for these targets. */
570 bp_addr = b->address;
571 bp_size = 0;
572 if (BREAKPOINT_FROM_PC (&bp_addr, &bp_size) == NULL)
573 continue;
574 if (bp_size == 0)
575 /* bp isn't valid */
576 continue;
577 if (bp_addr + bp_size <= memaddr)
578 /* The breakpoint is entirely before the chunk of memory we
579 are reading. */
580 continue;
581 if (bp_addr >= memaddr + len)
582 /* The breakpoint is entirely after the chunk of memory we are
583 reading. */
584 continue;
585 /* Copy the breakpoint from the shadow contents, and recurse for
586 the things before and after. */
c906108c 587 {
c5aa993b
JM
588 /* Offset within shadow_contents. */
589 int bptoffset = 0;
c906108c 590
c5aa993b
JM
591 if (bp_addr < memaddr)
592 {
593 /* Only copy the second part of the breakpoint. */
594 bp_size -= memaddr - bp_addr;
595 bptoffset = memaddr - bp_addr;
596 bp_addr = memaddr;
597 }
598
599 if (bp_addr + bp_size > memaddr + len)
600 {
601 /* Only copy the first part of the breakpoint. */
602 bp_size -= (bp_addr + bp_size) - (memaddr + len);
603 }
604
605 memcpy (myaddr + bp_addr - memaddr,
606 b->shadow_contents + bptoffset, bp_size);
607
608 if (bp_addr > memaddr)
609 {
610 /* Copy the section of memory before the breakpoint. */
611 status = read_memory_nobpt (memaddr, myaddr, bp_addr - memaddr);
612 if (status != 0)
613 return status;
614 }
615
616 if (bp_addr + bp_size < memaddr + len)
617 {
618 /* Copy the section of memory after the breakpoint. */
619 status = read_memory_nobpt
620 (bp_addr + bp_size,
621 myaddr + bp_addr + bp_size - memaddr,
622 memaddr + len - (bp_addr + bp_size));
623 if (status != 0)
624 return status;
625 }
626 return 0;
c906108c 627 }
c5aa993b 628 }
c906108c
SS
629 /* Nothing overlaps. Just call read_memory_noerr. */
630 return target_read_memory (memaddr, myaddr, len);
631}
c906108c 632\f
c5aa993b 633
c906108c
SS
634/* insert_breakpoints is used when starting or continuing the program.
635 remove_breakpoints is used when the program stops.
636 Both return zero if successful,
637 or an `errno' value if could not write the inferior. */
638
639int
640insert_breakpoints ()
641{
642 register struct breakpoint *b, *temp;
643 int val = 0;
644 int disabled_breaks = 0;
645
646 static char message1[] = "Error inserting catchpoint %d:\n";
647 static char message[sizeof (message1) + 30];
648
649
650 ALL_BREAKPOINTS_SAFE (b, temp)
c5aa993b
JM
651 {
652 if (b->type != bp_watchpoint
653 && b->type != bp_hardware_watchpoint
654 && b->type != bp_read_watchpoint
655 && b->type != bp_access_watchpoint
656 && b->type != bp_catch_fork
657 && b->type != bp_catch_vfork
658 && b->type != bp_catch_exec
659 && b->type != bp_catch_throw
660 && b->type != bp_catch_catch
661 && b->enable != disabled
662 && b->enable != shlib_disabled
663 && b->enable != call_disabled
664 && !b->inserted
665 && !b->duplicate)
666 {
667 if (b->type == bp_hardware_breakpoint)
668 val = target_insert_hw_breakpoint (b->address, b->shadow_contents);
669 else
670 {
671 /* Check to see if breakpoint is in an overlay section;
672 if so, we should set the breakpoint at the LMA address.
673 Only if the section is currently mapped should we ALSO
674 set a break at the VMA address. */
675 if (overlay_debugging && b->section &&
676 section_is_overlay (b->section))
677 {
678 CORE_ADDR addr;
679
680 addr = overlay_unmapped_address (b->address, b->section);
681 val = target_insert_breakpoint (addr, b->shadow_contents);
682 /* This would be the time to check val, to see if the
683 breakpoint write to the load address succeeded.
684 However, this might be an ordinary occurrance, eg. if
685 the unmapped overlay is in ROM. */
686 val = 0; /* in case unmapped address failed */
687 if (section_is_mapped (b->section))
688 val = target_insert_breakpoint (b->address,
689 b->shadow_contents);
690 }
691 else /* ordinary (non-overlay) address */
692 val = target_insert_breakpoint (b->address, b->shadow_contents);
693 }
694 if (val)
695 {
696 /* Can't set the breakpoint. */
c906108c 697#if defined (DISABLE_UNSETTABLE_BREAK)
c5aa993b
JM
698 if (DISABLE_UNSETTABLE_BREAK (b->address))
699 {
700 /* See also: disable_breakpoints_in_shlibs. */
701 val = 0;
702 b->enable = shlib_disabled;
703 if (!disabled_breaks)
704 {
705 target_terminal_ours_for_output ();
706 fprintf_unfiltered (gdb_stderr,
707 "Cannot insert breakpoint %d:\n", b->number);
708 printf_filtered ("Temporarily disabling shared library breakpoints:\n");
709 }
710 disabled_breaks = 1;
711 printf_filtered ("%d ", b->number);
712 }
713 else
c906108c 714#endif
c5aa993b
JM
715 {
716 target_terminal_ours_for_output ();
717 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
c906108c 718#ifdef ONE_PROCESS_WRITETEXT
c5aa993b
JM
719 fprintf_unfiltered (gdb_stderr,
720 "The same program may be running in another process.\n");
c906108c 721#endif
c5aa993b
JM
722 memory_error (val, b->address); /* which bombs us out */
723 }
724 }
725 else
726 b->inserted = 1;
727 }
c906108c 728 else if (ep_is_exception_catchpoint (b)
c5aa993b
JM
729 && b->enable != disabled
730 && b->enable != shlib_disabled
731 && b->enable != call_disabled
732 && !b->inserted
733 && !b->duplicate)
c906108c
SS
734
735 {
c5aa993b
JM
736 /* If we get here, we must have a callback mechanism for exception
737 events -- with g++ style embedded label support, we insert
738 ordinary breakpoints and not catchpoints. */
739 sprintf (message, message1, b->number); /* Format possible error message */
740
741 val = target_insert_breakpoint (b->address, b->shadow_contents);
742 if (val)
743 {
744 /* Couldn't set breakpoint for some reason */
745 target_terminal_ours_for_output ();
746 fprintf_unfiltered (gdb_stderr,
747 "Cannot insert catchpoint %d; disabling it\n", b->number);
748 b->enable = disabled;
749 }
750 else
751 {
752 /* Bp set, now make sure callbacks are enabled */
c906108c 753 int val;
c5aa993b 754 args_for_catchpoint_enable args;
c906108c
SS
755 args.kind = b->type == bp_catch_catch ? EX_EVENT_CATCH : EX_EVENT_THROW;
756 args.enable = 1;
757 val = catch_errors (cover_target_enable_exception_callback,
758 &args,
759 message, RETURN_MASK_ALL);
760 if (val != 0 && val != -1)
761 {
762 b->inserted = 1;
763 }
c5aa993b 764 /* Check if something went wrong; val == 0 can be ignored */
c906108c
SS
765 if (val == -1)
766 {
c5aa993b 767 /* something went wrong */
c906108c
SS
768 target_terminal_ours_for_output ();
769 fprintf_unfiltered (gdb_stderr, "Cannot insert catchpoint %d; disabling it\n", b->number);
770 b->enable = disabled;
771 }
c5aa993b 772 }
c906108c
SS
773 }
774
c5aa993b
JM
775 else if ((b->type == bp_hardware_watchpoint ||
776 b->type == bp_read_watchpoint ||
777 b->type == bp_access_watchpoint)
778 && b->enable == enabled
779 && !b->inserted
780 && !b->duplicate)
781 {
782 struct frame_info *saved_frame;
783 int saved_level, within_current_scope;
784 value_ptr mark = value_mark ();
785 value_ptr v;
786
787 /* Save the current frame and level so we can restore it after
788 evaluating the watchpoint expression on its own frame. */
789 saved_frame = selected_frame;
790 saved_level = selected_frame_level;
791
792 /* Determine if the watchpoint is within scope. */
793 if (b->exp_valid_block == NULL)
794 within_current_scope = 1;
795 else
796 {
797 struct frame_info *fi;
798
799 /* There might be no current frame at this moment if we are
800 resuming from a step over a breakpoint.
801 Set up current frame before trying to find the watchpoint
802 frame. */
803 get_current_frame ();
804 fi = find_frame_addr_in_frame_chain (b->watchpoint_frame);
805 within_current_scope = (fi != NULL);
806 if (within_current_scope)
807 select_frame (fi, -1);
808 }
809
810 if (within_current_scope)
811 {
812 /* Evaluate the expression and cut the chain of values
813 produced off from the value chain. */
814 v = evaluate_expression (b->exp);
815 value_release_to_mark (mark);
816
817 b->val_chain = v;
818 b->inserted = 1;
819
820 /* Look at each value on the value chain. */
821 for (; v; v = v->next)
822 {
823 /* If it's a memory location, then we must watch it. */
824 if (v->lval == lval_memory)
825 {
826 int addr, len, type;
827
828 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
829 len = TYPE_LENGTH (VALUE_TYPE (v));
830 type = 0;
831 if (b->type == bp_read_watchpoint)
832 type = 1;
833 else if (b->type == bp_access_watchpoint)
834 type = 2;
835
836 val = target_insert_watchpoint (addr, len, type);
837 if (val == -1)
838 {
839 b->inserted = 0;
840 break;
841 }
842 val = 0;
843 }
844 }
845 /* Failure to insert a watchpoint on any memory value in the
846 value chain brings us here. */
847 if (!b->inserted)
848 warning ("Hardware watchpoint %d: Could not insert watchpoint\n",
849 b->number);
850 }
851 else
852 {
853 printf_filtered ("\
c906108c
SS
854Hardware watchpoint %d deleted because the program has left the block in\n\
855which its expression is valid.\n", b->number);
c5aa993b
JM
856 if (b->related_breakpoint)
857 b->related_breakpoint->disposition = del_at_next_stop;
858 b->disposition = del_at_next_stop;
859 }
c906108c 860
c5aa993b
JM
861 /* Restore the frame and level. */
862 if ((saved_frame != selected_frame) ||
863 (saved_level != selected_frame_level))
864 select_and_print_frame (saved_frame, saved_level);
865 }
866 else if ((b->type == bp_catch_fork
867 || b->type == bp_catch_vfork
868 || b->type == bp_catch_exec)
869 && b->enable == enabled
870 && !b->inserted
871 && !b->duplicate)
872 {
873 val = -1;
874 switch (b->type)
875 {
876 case bp_catch_fork:
877 val = target_insert_fork_catchpoint (inferior_pid);
878 break;
879 case bp_catch_vfork:
880 val = target_insert_vfork_catchpoint (inferior_pid);
881 break;
882 case bp_catch_exec:
883 val = target_insert_exec_catchpoint (inferior_pid);
884 break;
885 default:
886 warning ("GDB bug: breakpoint.c (insert_breakpoints): enclosing `if' does not protect `switch'");
887 break;
888 }
889 if (val < 0)
890 {
891 target_terminal_ours_for_output ();
892 fprintf_unfiltered (gdb_stderr, "Cannot insert catchpoint %d:\n", b->number);
893 }
894 else
895 b->inserted = 1;
896 }
897 }
c906108c
SS
898 if (disabled_breaks)
899 printf_filtered ("\n");
900
901 return val;
902}
903
904
905int
906remove_breakpoints ()
907{
908 register struct breakpoint *b;
909 int val;
910
911 ALL_BREAKPOINTS (b)
c5aa993b
JM
912 {
913 if (b->inserted)
914 {
915 val = remove_breakpoint (b, mark_uninserted);
916 if (val != 0)
917 return val;
918 }
919 }
c906108c
SS
920 return 0;
921}
922
923int
924reattach_breakpoints (pid)
c5aa993b 925 int pid;
c906108c
SS
926{
927 register struct breakpoint *b;
928 int val;
c5aa993b 929 int saved_inferior_pid = inferior_pid;
c906108c 930
c5aa993b 931 inferior_pid = pid; /* Because remove_breakpoint will use this global. */
c906108c 932 ALL_BREAKPOINTS (b)
c5aa993b
JM
933 {
934 if (b->inserted)
935 {
936 remove_breakpoint (b, mark_inserted);
937 if (b->type == bp_hardware_breakpoint)
938 val = target_insert_hw_breakpoint (b->address, b->shadow_contents);
939 else
940 val = target_insert_breakpoint (b->address, b->shadow_contents);
941 if (val != 0)
942 {
943 inferior_pid = saved_inferior_pid;
944 return val;
945 }
946 }
947 }
c906108c
SS
948 inferior_pid = saved_inferior_pid;
949 return 0;
950}
951
952void
953update_breakpoints_after_exec ()
954{
c5aa993b
JM
955 struct breakpoint *b;
956 struct breakpoint *temp;
c906108c
SS
957
958 /* Doing this first prevents the badness of having delete_breakpoint()
959 write a breakpoint's current "shadow contents" to lift the bp. That
960 shadow is NOT valid after an exec()! */
961 mark_breakpoints_out ();
962
963 ALL_BREAKPOINTS_SAFE (b, temp)
c5aa993b
JM
964 {
965 /* Solib breakpoints must be explicitly reset after an exec(). */
966 if (b->type == bp_shlib_event)
967 {
968 delete_breakpoint (b);
969 continue;
970 }
c906108c 971
c5aa993b
JM
972 /* Step-resume breakpoints are meaningless after an exec(). */
973 if (b->type == bp_step_resume)
974 {
975 delete_breakpoint (b);
976 continue;
977 }
978
979 /* Ditto the sigtramp handler breakpoints. */
980 if (b->type == bp_through_sigtramp)
981 {
982 delete_breakpoint (b);
983 continue;
984 }
985
986 /* Ditto the exception-handling catchpoints. */
987 if ((b->type == bp_catch_catch) || (b->type == bp_catch_throw))
988 {
989 delete_breakpoint (b);
990 continue;
991 }
992
993 /* Don't delete an exec catchpoint, because else the inferior
994 won't stop when it ought!
995
996 Similarly, we probably ought to keep vfork catchpoints, 'cause
997 on this target, we may not be able to stop when the vfork is seen,
998 but only when the subsequent exec is seen. (And because deleting
999 fork catchpoints here but not vfork catchpoints will seem mysterious
1000 to users, keep those too.)
1001
1002 ??rehrauer: Let's hope that merely clearing out this catchpoint's
1003 target address field, if any, is sufficient to have it be reset
1004 automagically. Certainly on HP-UX that's true. */
1005 if ((b->type == bp_catch_exec) ||
1006 (b->type == bp_catch_vfork) ||
1007 (b->type == bp_catch_fork))
1008 {
1009 b->address = (CORE_ADDR) NULL;
1010 continue;
1011 }
1012
1013 /* bp_finish is a special case. The only way we ought to be able
1014 to see one of these when an exec() has happened, is if the user
1015 caught a vfork, and then said "finish". Ordinarily a finish just
1016 carries them to the call-site of the current callee, by setting
1017 a temporary bp there and resuming. But in this case, the finish
1018 will carry them entirely through the vfork & exec.
1019
1020 We don't want to allow a bp_finish to remain inserted now. But
1021 we can't safely delete it, 'cause finish_command has a handle to
1022 the bp on a bpstat, and will later want to delete it. There's a
1023 chance (and I've seen it happen) that if we delete the bp_finish
1024 here, that its storage will get reused by the time finish_command
1025 gets 'round to deleting the "use to be a bp_finish" breakpoint.
1026 We really must allow finish_command to delete a bp_finish.
1027
1028 In the absense of a general solution for the "how do we know it's
1029 safe to delete something others may have handles to?" problem, what
1030 we'll do here is just uninsert the bp_finish, and let finish_command
1031 delete it.
1032
1033 (We know the bp_finish is "doomed" in the sense that it's momentary,
1034 and will be deleted as soon as finish_command sees the inferior stopped.
1035 So it doesn't matter that the bp's address is probably bogus in the
1036 new a.out, unlike e.g., the solib breakpoints.) */
1037 if (b->type == bp_finish)
1038 {
1039 continue;
1040 }
1041
1042 /* Without a symbolic address, we have little hope of the
1043 pre-exec() address meaning the same thing in the post-exec()
1044 a.out. */
1045 if (b->addr_string == NULL)
1046 {
1047 delete_breakpoint (b);
1048 continue;
1049 }
1050
1051 /* If this breakpoint has survived the above battery of checks, then
1052 it must have a symbolic address. Be sure that it gets reevaluated
1053 to a target address, rather than reusing the old evaluation. */
1054 b->address = (CORE_ADDR) NULL;
1055 }
c906108c
SS
1056}
1057
1058int
1059detach_breakpoints (pid)
c5aa993b 1060 int pid;
c906108c
SS
1061{
1062 register struct breakpoint *b;
1063 int val;
c5aa993b
JM
1064 int saved_inferior_pid = inferior_pid;
1065
c906108c
SS
1066 if (pid == inferior_pid)
1067 error ("Cannot detach breakpoints of inferior_pid");
c5aa993b
JM
1068
1069 inferior_pid = pid; /* Because remove_breakpoint will use this global. */
c906108c 1070 ALL_BREAKPOINTS (b)
c5aa993b
JM
1071 {
1072 if (b->inserted)
1073 {
1074 val = remove_breakpoint (b, mark_inserted);
1075 if (val != 0)
1076 {
1077 inferior_pid = saved_inferior_pid;
1078 return val;
1079 }
1080 }
1081 }
c906108c
SS
1082 inferior_pid = saved_inferior_pid;
1083 return 0;
1084}
1085
1086static int
1087remove_breakpoint (b, is)
1088 struct breakpoint *b;
c5aa993b 1089 insertion_state_t is;
c906108c
SS
1090{
1091 int val;
c5aa993b 1092
c906108c
SS
1093 if (b->type == bp_none)
1094 warning ("attempted to remove apparently deleted breakpoint #%d?\n", b->number);
1095
1096 if (b->type != bp_watchpoint
1097 && b->type != bp_hardware_watchpoint
1098 && b->type != bp_read_watchpoint
1099 && b->type != bp_access_watchpoint
1100 && b->type != bp_catch_fork
1101 && b->type != bp_catch_vfork
1102 && b->type != bp_catch_exec
1103 && b->type != bp_catch_catch
1104 && b->type != bp_catch_throw)
c5aa993b 1105
c906108c
SS
1106 {
1107 if (b->type == bp_hardware_breakpoint)
c5aa993b 1108 val = target_remove_hw_breakpoint (b->address, b->shadow_contents);
c906108c
SS
1109 else
1110 {
1111 /* Check to see if breakpoint is in an overlay section;
1112 if so, we should remove the breakpoint at the LMA address.
1113 If that is not equal to the raw address, then we should
1114 presumable remove the breakpoint there as well. */
c5aa993b 1115 if (overlay_debugging && b->section &&
c906108c
SS
1116 section_is_overlay (b->section))
1117 {
1118 CORE_ADDR addr;
1119
1120 addr = overlay_unmapped_address (b->address, b->section);
1121 val = target_remove_breakpoint (addr, b->shadow_contents);
1122 /* This would be the time to check val, to see if the
c5aa993b
JM
1123 shadow breakpoint write to the load address succeeded.
1124 However, this might be an ordinary occurrance, eg. if
1125 the unmapped overlay is in ROM. */
1126 val = 0; /* in case unmapped address failed */
c906108c 1127 if (section_is_mapped (b->section))
c5aa993b 1128 val = target_remove_breakpoint (b->address,
c906108c
SS
1129 b->shadow_contents);
1130 }
c5aa993b
JM
1131 else /* ordinary (non-overlay) address */
1132 val = target_remove_breakpoint (b->address, b->shadow_contents);
c906108c
SS
1133 }
1134 if (val)
1135 return val;
1136 b->inserted = (is == mark_inserted);
1137 }
1138 else if ((b->type == bp_hardware_watchpoint ||
c5aa993b
JM
1139 b->type == bp_read_watchpoint ||
1140 b->type == bp_access_watchpoint)
c906108c 1141 && b->enable == enabled
c5aa993b 1142 && !b->duplicate)
c906108c
SS
1143 {
1144 value_ptr v, n;
c5aa993b 1145
c906108c
SS
1146 b->inserted = (is == mark_inserted);
1147 /* Walk down the saved value chain. */
1148 for (v = b->val_chain; v; v = v->next)
1149 {
1150 /* For each memory reference remove the watchpoint
1151 at that address. */
1152 if (v->lval == lval_memory)
1153 {
1154 int addr, len, type;
c5aa993b 1155
c906108c
SS
1156 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1157 len = TYPE_LENGTH (VALUE_TYPE (v));
1158 type = 0;
1159 if (b->type == bp_read_watchpoint)
1160 type = 1;
1161 else if (b->type == bp_access_watchpoint)
1162 type = 2;
1163
1164 val = target_remove_watchpoint (addr, len, type);
1165 if (val == -1)
1166 b->inserted = 1;
1167 val = 0;
1168 }
1169 }
1170 /* Failure to remove any of the hardware watchpoints comes here. */
1171 if ((is == mark_uninserted) && (b->inserted))
1172 warning ("Hardware watchpoint %d: Could not remove watchpoint\n",
1173 b->number);
c5aa993b 1174
c906108c 1175 /* Free the saved value chain. We will construct a new one
c5aa993b 1176 the next time the watchpoint is inserted. */
c906108c
SS
1177 for (v = b->val_chain; v; v = n)
1178 {
1179 n = v->next;
1180 value_free (v);
1181 }
1182 b->val_chain = NULL;
1183 }
1184 else if ((b->type == bp_catch_fork ||
c5aa993b
JM
1185 b->type == bp_catch_vfork ||
1186 b->type == bp_catch_exec)
c906108c 1187 && b->enable == enabled
c5aa993b 1188 && !b->duplicate)
c906108c
SS
1189 {
1190 val = -1;
1191 switch (b->type)
c5aa993b
JM
1192 {
1193 case bp_catch_fork:
1194 val = target_remove_fork_catchpoint (inferior_pid);
1195 break;
1196 case bp_catch_vfork:
1197 val = target_remove_vfork_catchpoint (inferior_pid);
1198 break;
1199 case bp_catch_exec:
1200 val = target_remove_exec_catchpoint (inferior_pid);
1201 break;
ac9a91a7
JM
1202 default:
1203 warning ("GDB bug: breakpoint.c (remove_breakpoint): enclosing `if' does not protect `switch'");
1204 break;
c5aa993b 1205 }
c906108c
SS
1206 if (val)
1207 return val;
1208 b->inserted = (is == mark_inserted);
1209 }
1210 else if ((b->type == bp_catch_catch ||
c5aa993b
JM
1211 b->type == bp_catch_throw)
1212 && b->enable == enabled
1213 && !b->duplicate)
c906108c
SS
1214 {
1215
c5aa993b 1216 val = target_remove_breakpoint (b->address, b->shadow_contents);
c906108c 1217 if (val)
c5aa993b 1218 return val;
c906108c
SS
1219 b->inserted = (is == mark_inserted);
1220 }
1221 else if (ep_is_exception_catchpoint (b)
c5aa993b
JM
1222 && b->inserted /* sometimes previous insert doesn't happen */
1223 && b->enable == enabled
1224 && !b->duplicate)
c906108c
SS
1225 {
1226
c5aa993b 1227 val = target_remove_breakpoint (b->address, b->shadow_contents);
c906108c 1228 if (val)
c5aa993b
JM
1229 return val;
1230
c906108c
SS
1231 b->inserted = (is == mark_inserted);
1232 }
1233
1234 return 0;
1235}
1236
1237/* Clear the "inserted" flag in all breakpoints. */
1238
1239void
1240mark_breakpoints_out ()
1241{
1242 register struct breakpoint *b;
1243
1244 ALL_BREAKPOINTS (b)
1245 b->inserted = 0;
1246}
1247
1248/* Clear the "inserted" flag in all breakpoints and delete any breakpoints
1249 which should go away between runs of the program.
1250
1251 Plus other such housekeeping that has to be done for breakpoints
1252 between runs.
1253
1254 Note: this function gets called at the end of a run (by generic_mourn_inferior)
c5aa993b 1255 and when a run begins (by init_wait_for_inferior). */
c906108c
SS
1256
1257
1258
1259void
1260breakpoint_init_inferior (context)
c5aa993b 1261 enum inf_context context;
c906108c
SS
1262{
1263 register struct breakpoint *b, *temp;
1264 static int warning_needed = 0;
1265
1266 ALL_BREAKPOINTS_SAFE (b, temp)
c5aa993b
JM
1267 {
1268 b->inserted = 0;
c906108c 1269
c5aa993b
JM
1270 switch (b->type)
1271 {
1272 case bp_call_dummy:
1273 case bp_watchpoint_scope:
c906108c 1274
c5aa993b
JM
1275 /* If the call dummy breakpoint is at the entry point it will
1276 cause problems when the inferior is rerun, so we better
1277 get rid of it.
c906108c 1278
c5aa993b
JM
1279 Also get rid of scope breakpoints. */
1280 delete_breakpoint (b);
1281 break;
c906108c 1282
c5aa993b
JM
1283 case bp_watchpoint:
1284 case bp_hardware_watchpoint:
1285 case bp_read_watchpoint:
1286 case bp_access_watchpoint:
c906108c 1287
c5aa993b
JM
1288 /* Likewise for watchpoints on local expressions. */
1289 if (b->exp_valid_block != NULL)
1290 delete_breakpoint (b);
1291 break;
1292 default:
1293 /* Likewise for exception catchpoints in dynamic-linked
1294 executables where required */
1295 if (ep_is_exception_catchpoint (b) &&
1296 exception_catchpoints_are_fragile)
1297 {
1298 warning_needed = 1;
c906108c 1299 delete_breakpoint (b);
c5aa993b
JM
1300 }
1301 break;
1302 }
1303 }
c906108c
SS
1304
1305 if (exception_catchpoints_are_fragile)
1306 exception_support_initialized = 0;
1307
c5aa993b 1308 /* Don't issue the warning unless it's really needed... */
c906108c
SS
1309 if (warning_needed && (context != inf_exited))
1310 {
1311 warning ("Exception catchpoints from last run were deleted, you must reinsert them explicitly");
1312 warning_needed = 0;
c5aa993b 1313 }
c906108c
SS
1314}
1315
1316/* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
1317 When continuing from a location with a breakpoint,
1318 we actually single step once before calling insert_breakpoints. */
1319
1320int
1321breakpoint_here_p (pc)
1322 CORE_ADDR pc;
1323{
1324 register struct breakpoint *b;
1325
1326 ALL_BREAKPOINTS (b)
1327 if (b->enable == enabled
1328 && b->enable != shlib_disabled
1329 && b->enable != call_disabled
1330 && b->address == pc) /* bp is enabled and matches pc */
c5aa993b
JM
1331 {
1332 if (overlay_debugging &&
1333 section_is_overlay (b->section) &&
1334 !section_is_mapped (b->section))
1335 continue; /* unmapped overlay -- can't be a match */
1336 else
1337 return 1;
1338 }
c906108c
SS
1339
1340 return 0;
1341}
1342
1343/* breakpoint_inserted_here_p (PC) is just like breakpoint_here_p(), but it
1344 only returns true if there is actually a breakpoint inserted at PC. */
1345
1346int
1347breakpoint_inserted_here_p (pc)
1348 CORE_ADDR pc;
1349{
1350 register struct breakpoint *b;
1351
1352 ALL_BREAKPOINTS (b)
1353 if (b->inserted
1354 && b->address == pc) /* bp is inserted and matches pc */
c5aa993b
JM
1355 {
1356 if (overlay_debugging &&
1357 section_is_overlay (b->section) &&
1358 !section_is_mapped (b->section))
1359 continue; /* unmapped overlay -- can't be a match */
1360 else
1361 return 1;
1362 }
c906108c
SS
1363
1364 return 0;
1365}
1366
1367/* Return nonzero if FRAME is a dummy frame. We can't use PC_IN_CALL_DUMMY
1368 because figuring out the saved SP would take too much time, at least using
1369 get_saved_register on the 68k. This means that for this function to
1370 work right a port must use the bp_call_dummy breakpoint. */
1371
1372int
1373frame_in_dummy (frame)
1374 struct frame_info *frame;
1375{
c906108c
SS
1376 struct breakpoint *b;
1377
c5aa993b 1378 if (!CALL_DUMMY_P)
7a292a7a
SS
1379 return 0;
1380
1381 if (USE_GENERIC_DUMMY_FRAMES)
1382 return generic_pc_in_call_dummy (frame->pc, frame->frame, frame->frame);
c5aa993b 1383
c906108c 1384 ALL_BREAKPOINTS (b)
c5aa993b
JM
1385 {
1386 if (b->type == bp_call_dummy
1387 && b->frame == frame->frame
1388 /* We need to check the PC as well as the frame on the sparc,
1389 for signals.exp in the testsuite. */
1390 && (frame->pc
1391 >= (b->address
1392 - SIZEOF_CALL_DUMMY_WORDS / sizeof (LONGEST) * REGISTER_SIZE))
1393 && frame->pc <= b->address)
1394 return 1;
1395 }
c906108c
SS
1396 return 0;
1397}
1398
1399/* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
1400 is valid for process/thread PID. */
1401
1402int
1403breakpoint_thread_match (pc, pid)
1404 CORE_ADDR pc;
1405 int pid;
1406{
1407 struct breakpoint *b;
1408 int thread;
1409
1410 thread = pid_to_thread_id (pid);
1411
1412 ALL_BREAKPOINTS (b)
1413 if (b->enable != disabled
1414 && b->enable != shlib_disabled
1415 && b->enable != call_disabled
1416 && b->address == pc
1417 && (b->thread == -1 || b->thread == thread))
c5aa993b
JM
1418 {
1419 if (overlay_debugging &&
1420 section_is_overlay (b->section) &&
1421 !section_is_mapped (b->section))
1422 continue; /* unmapped overlay -- can't be a match */
1423 else
1424 return 1;
1425 }
c906108c
SS
1426
1427 return 0;
1428}
c906108c 1429\f
c5aa993b 1430
c906108c
SS
1431/* bpstat stuff. External routines' interfaces are documented
1432 in breakpoint.h. */
1433
1434int
1435ep_is_catchpoint (ep)
c5aa993b 1436 struct breakpoint *ep;
c906108c
SS
1437{
1438 return
1439 (ep->type == bp_catch_load)
1440 || (ep->type == bp_catch_unload)
1441 || (ep->type == bp_catch_fork)
1442 || (ep->type == bp_catch_vfork)
1443 || (ep->type == bp_catch_exec)
1444 || (ep->type == bp_catch_catch)
1445 || (ep->type == bp_catch_throw)
1446
1447
c5aa993b 1448 /* ??rehrauer: Add more kinds here, as are implemented... */
c906108c
SS
1449 ;
1450}
c5aa993b 1451
c906108c
SS
1452int
1453ep_is_shlib_catchpoint (ep)
c5aa993b 1454 struct breakpoint *ep;
c906108c
SS
1455{
1456 return
1457 (ep->type == bp_catch_load)
1458 || (ep->type == bp_catch_unload)
1459 ;
1460}
1461
1462int
1463ep_is_exception_catchpoint (ep)
c5aa993b 1464 struct breakpoint *ep;
c906108c
SS
1465{
1466 return
1467 (ep->type == bp_catch_catch)
1468 || (ep->type == bp_catch_throw)
1469 ;
1470}
1471
1472/* Clear a bpstat so that it says we are not at any breakpoint.
1473 Also free any storage that is part of a bpstat. */
1474
1475void
1476bpstat_clear (bsp)
1477 bpstat *bsp;
1478{
1479 bpstat p;
1480 bpstat q;
1481
1482 if (bsp == 0)
1483 return;
1484 p = *bsp;
1485 while (p != NULL)
1486 {
1487 q = p->next;
1488 if (p->old_val != NULL)
1489 value_free (p->old_val);
c5aa993b 1490 free ((PTR) p);
c906108c
SS
1491 p = q;
1492 }
1493 *bsp = NULL;
1494}
1495
1496/* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
1497 is part of the bpstat is copied as well. */
1498
1499bpstat
1500bpstat_copy (bs)
1501 bpstat bs;
1502{
1503 bpstat p = NULL;
1504 bpstat tmp;
1505 bpstat retval = NULL;
1506
1507 if (bs == NULL)
1508 return bs;
1509
1510 for (; bs != NULL; bs = bs->next)
1511 {
1512 tmp = (bpstat) xmalloc (sizeof (*tmp));
1513 memcpy (tmp, bs, sizeof (*tmp));
1514 if (p == NULL)
1515 /* This is the first thing in the chain. */
1516 retval = tmp;
1517 else
1518 p->next = tmp;
1519 p = tmp;
1520 }
1521 p->next = NULL;
1522 return retval;
1523}
1524
1525/* Find the bpstat associated with this breakpoint */
1526
1527bpstat
c5aa993b 1528bpstat_find_breakpoint (bsp, breakpoint)
c906108c
SS
1529 bpstat bsp;
1530 struct breakpoint *breakpoint;
1531{
c5aa993b
JM
1532 if (bsp == NULL)
1533 return NULL;
c906108c 1534
c5aa993b
JM
1535 for (; bsp != NULL; bsp = bsp->next)
1536 {
1537 if (bsp->breakpoint_at == breakpoint)
1538 return bsp;
1539 }
c906108c
SS
1540 return NULL;
1541}
1542
1543/* Find a step_resume breakpoint associated with this bpstat.
1544 (If there are multiple step_resume bp's on the list, this function
1545 will arbitrarily pick one.)
1546
1547 It is an error to use this function if BPSTAT doesn't contain a
1548 step_resume breakpoint.
1549
1550 See wait_for_inferior's use of this function. */
1551struct breakpoint *
1552bpstat_find_step_resume_breakpoint (bsp)
c5aa993b 1553 bpstat bsp;
c906108c
SS
1554{
1555 if (bsp == NULL)
1556 error ("Internal error (bpstat_find_step_resume_breakpoint)");
1557
1558 for (; bsp != NULL; bsp = bsp->next)
1559 {
1560 if ((bsp->breakpoint_at != NULL) &&
c5aa993b
JM
1561 (bsp->breakpoint_at->type == bp_step_resume))
1562 return bsp->breakpoint_at;
c906108c
SS
1563 }
1564
1565 error ("Internal error (no step_resume breakpoint found)");
1566}
1567
1568
1569/* Return the breakpoint number of the first breakpoint we are stopped
1570 at. *BSP upon return is a bpstat which points to the remaining
1571 breakpoints stopped at (but which is not guaranteed to be good for
1572 anything but further calls to bpstat_num).
1573 Return 0 if passed a bpstat which does not indicate any breakpoints. */
1574
1575int
1576bpstat_num (bsp)
1577 bpstat *bsp;
1578{
1579 struct breakpoint *b;
1580
1581 if ((*bsp) == NULL)
1582 return 0; /* No more breakpoint values */
1583 else
1584 {
1585 b = (*bsp)->breakpoint_at;
1586 *bsp = (*bsp)->next;
1587 if (b == NULL)
1588 return -1; /* breakpoint that's been deleted since */
1589 else
c5aa993b 1590 return b->number; /* We have its number */
c906108c
SS
1591 }
1592}
1593
1594/* Modify BS so that the actions will not be performed. */
1595
1596void
1597bpstat_clear_actions (bs)
1598 bpstat bs;
1599{
1600 for (; bs != NULL; bs = bs->next)
1601 {
1602 bs->commands = NULL;
1603 if (bs->old_val != NULL)
1604 {
1605 value_free (bs->old_val);
1606 bs->old_val = NULL;
1607 }
1608 }
1609}
1610
1611/* Stub for cleaning up our state if we error-out of a breakpoint command */
1612/* ARGSUSED */
1613static void
1614cleanup_executing_breakpoints (ignore)
1615 PTR ignore;
1616{
1617 executing_breakpoint_commands = 0;
1618}
1619
1620/* Execute all the commands associated with all the breakpoints at this
1621 location. Any of these commands could cause the process to proceed
1622 beyond this point, etc. We look out for such changes by checking
1623 the global "breakpoint_proceeded" after each command. */
1624
1625void
1626bpstat_do_actions (bsp)
1627 bpstat *bsp;
1628{
1629 bpstat bs;
1630 struct cleanup *old_chain;
1631 struct command_line *cmd;
1632
1633 /* Avoid endless recursion if a `source' command is contained
1634 in bs->commands. */
1635 if (executing_breakpoint_commands)
1636 return;
1637
1638 executing_breakpoint_commands = 1;
1639 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
1640
1641top:
1642 /* Note that (as of this writing), our callers all appear to
1643 be passing us the address of global stop_bpstat. And, if
1644 our calls to execute_control_command cause the inferior to
1645 proceed, that global (and hence, *bsp) will change.
1646
1647 We must be careful to not touch *bsp unless the inferior
1648 has not proceeded. */
1649
1650 /* This pointer will iterate over the list of bpstat's. */
1651 bs = *bsp;
1652
1653 breakpoint_proceeded = 0;
1654 for (; bs != NULL; bs = bs->next)
1655 {
1656 cmd = bs->commands;
1657 while (cmd != NULL)
1658 {
1659 execute_control_command (cmd);
1660
1661 if (breakpoint_proceeded)
1662 break;
1663 else
1664 cmd = cmd->next;
1665 }
1666 if (breakpoint_proceeded)
1667 /* The inferior is proceeded by the command; bomb out now.
1668 The bpstat chain has been blown away by wait_for_inferior.
1669 But since execution has stopped again, there is a new bpstat
1670 to look at, so start over. */
1671 goto top;
1672 else
1673 bs->commands = NULL;
1674 }
1675
1676 executing_breakpoint_commands = 0;
1677 discard_cleanups (old_chain);
1678}
1679
1680/* This is the normal print_it function for a bpstat. In the future,
1681 much of this logic could (should?) be moved to bpstat_stop_status,
1682 by having it set different print_it functions.
1683
1684 Current scheme: When we stop, bpstat_print() is called.
1685 It loops through the bpstat list of things causing this stop,
1686 calling the print_it function for each one. The default
1687 print_it function, used for breakpoints, is print_it_normal().
1688 (Also see print_it_noop() and print_it_done()).
c5aa993b 1689
c906108c
SS
1690 Return values from this routine (used by bpstat_print() to
1691 decide what to do):
1692 1: Means we printed something, and we do *not* desire that
c5aa993b 1693 something to be followed by a location.
c906108c 1694 0: Means we printed something, and we *do* desire that
c5aa993b 1695 something to be followed by a location.
c906108c
SS
1696 -1: Means we printed nothing. */
1697
1698static int
1699print_it_normal (bs)
1700 bpstat bs;
1701{
1702 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
1703 which has since been deleted. */
1704 if (bs->breakpoint_at == NULL
1705 || (bs->breakpoint_at->type != bp_breakpoint
c5aa993b
JM
1706 && bs->breakpoint_at->type != bp_catch_load
1707 && bs->breakpoint_at->type != bp_catch_unload
1708 && bs->breakpoint_at->type != bp_catch_fork
1709 && bs->breakpoint_at->type != bp_catch_vfork
1710 && bs->breakpoint_at->type != bp_catch_exec
1711 && bs->breakpoint_at->type != bp_catch_catch
1712 && bs->breakpoint_at->type != bp_catch_throw
c906108c
SS
1713 && bs->breakpoint_at->type != bp_hardware_breakpoint
1714 && bs->breakpoint_at->type != bp_watchpoint
1715 && bs->breakpoint_at->type != bp_read_watchpoint
1716 && bs->breakpoint_at->type != bp_access_watchpoint
1717 && bs->breakpoint_at->type != bp_hardware_watchpoint))
1718 return -1;
1719
1720 if (ep_is_shlib_catchpoint (bs->breakpoint_at))
1721 {
1722 annotate_catchpoint (bs->breakpoint_at->number);
1723 printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1724 if (bs->breakpoint_at->type == bp_catch_load)
c5aa993b 1725 printf_filtered ("loaded");
c906108c 1726 else if (bs->breakpoint_at->type == bp_catch_unload)
c5aa993b 1727 printf_filtered ("unloaded");
c906108c
SS
1728 printf_filtered (" %s), ", bs->breakpoint_at->triggered_dll_pathname);
1729 return 0;
1730 }
1731 else if (bs->breakpoint_at->type == bp_catch_fork ||
c5aa993b 1732 bs->breakpoint_at->type == bp_catch_vfork)
c906108c
SS
1733 {
1734 annotate_catchpoint (bs->breakpoint_at->number);
1735 printf_filtered ("\nCatchpoint %d (", bs->breakpoint_at->number);
1736 if (bs->breakpoint_at->type == bp_catch_fork)
c5aa993b 1737 printf_filtered ("forked");
c906108c 1738 else if (bs->breakpoint_at->type == bp_catch_vfork)
c5aa993b 1739 printf_filtered ("vforked");
c906108c
SS
1740 printf_filtered (" process %d), ", bs->breakpoint_at->forked_inferior_pid);
1741 return 0;
1742 }
1743 else if (bs->breakpoint_at->type == bp_catch_exec)
1744 {
1745 annotate_catchpoint (bs->breakpoint_at->number);
1746 printf_filtered ("\nCatchpoint %d (exec'd %s), ",
c5aa993b
JM
1747 bs->breakpoint_at->number,
1748 bs->breakpoint_at->exec_pathname);
c906108c
SS
1749 return 0;
1750 }
c5aa993b 1751 else if (bs->breakpoint_at->type == bp_catch_catch)
c906108c
SS
1752 {
1753 if (current_exception_event && (CURRENT_EXCEPTION_KIND == EX_EVENT_CATCH))
c5aa993b
JM
1754 {
1755 annotate_catchpoint (bs->breakpoint_at->number);
1756 printf_filtered ("\nCatchpoint %d (exception caught), ", bs->breakpoint_at->number);
1757 printf_filtered ("throw location ");
1758 if (CURRENT_EXCEPTION_THROW_PC && CURRENT_EXCEPTION_THROW_LINE)
1759 printf_filtered ("%s:%d",
1760 CURRENT_EXCEPTION_THROW_FILE,
1761 CURRENT_EXCEPTION_THROW_LINE);
1762 else
1763 printf_filtered ("unknown");
1764
1765 printf_filtered (", catch location ");
1766 if (CURRENT_EXCEPTION_CATCH_PC && CURRENT_EXCEPTION_CATCH_LINE)
1767 printf_filtered ("%s:%d",
1768 CURRENT_EXCEPTION_CATCH_FILE,
1769 CURRENT_EXCEPTION_CATCH_LINE);
1770 else
1771 printf_filtered ("unknown");
1772
1773 printf_filtered ("\n");
1774 return 1; /* don't bother to print location frame info */
1775 }
c906108c 1776 else
c5aa993b
JM
1777 {
1778 return -1; /* really throw, some other bpstat will handle it */
1779 }
c906108c
SS
1780 }
1781 else if (bs->breakpoint_at->type == bp_catch_throw)
1782 {
1783 if (current_exception_event && (CURRENT_EXCEPTION_KIND == EX_EVENT_THROW))
c5aa993b
JM
1784 {
1785 annotate_catchpoint (bs->breakpoint_at->number);
1786 printf_filtered ("\nCatchpoint %d (exception thrown), ", bs->breakpoint_at->number);
1787 printf_filtered ("throw location ");
1788 if (CURRENT_EXCEPTION_THROW_PC && CURRENT_EXCEPTION_THROW_LINE)
1789 printf_filtered ("%s:%d",
1790 CURRENT_EXCEPTION_THROW_FILE,
1791 CURRENT_EXCEPTION_THROW_LINE);
1792 else
1793 printf_filtered ("unknown");
1794
1795 printf_filtered (", catch location ");
1796 if (CURRENT_EXCEPTION_CATCH_PC && CURRENT_EXCEPTION_CATCH_LINE)
1797 printf_filtered ("%s:%d",
1798 CURRENT_EXCEPTION_CATCH_FILE,
1799 CURRENT_EXCEPTION_CATCH_LINE);
1800 else
1801 printf_filtered ("unknown");
1802
1803 printf_filtered ("\n");
1804 return 1; /* don't bother to print location frame info */
1805 }
c906108c 1806 else
c5aa993b
JM
1807 {
1808 return -1; /* really catch, some other bpstat willhandle it */
1809 }
c906108c
SS
1810 }
1811
1812 else if (bs->breakpoint_at->type == bp_breakpoint ||
c5aa993b 1813 bs->breakpoint_at->type == bp_hardware_breakpoint)
c906108c
SS
1814 {
1815 /* I think the user probably only wants to see one breakpoint
c5aa993b 1816 number, not all of them. */
c906108c
SS
1817 annotate_breakpoint (bs->breakpoint_at->number);
1818 printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
1819 return 0;
1820 }
1821 else if ((bs->old_val != NULL) &&
c5aa993b
JM
1822 (bs->breakpoint_at->type == bp_watchpoint ||
1823 bs->breakpoint_at->type == bp_access_watchpoint ||
1824 bs->breakpoint_at->type == bp_hardware_watchpoint))
c906108c
SS
1825 {
1826 annotate_watchpoint (bs->breakpoint_at->number);
1827 mention (bs->breakpoint_at);
1828 printf_filtered ("\nOld value = ");
1829 value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
1830 printf_filtered ("\nNew value = ");
1831 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1832 Val_pretty_default);
1833 printf_filtered ("\n");
1834 value_free (bs->old_val);
1835 bs->old_val = NULL;
1836 /* More than one watchpoint may have been triggered. */
1837 return -1;
1838 }
1839 else if (bs->breakpoint_at->type == bp_access_watchpoint ||
1840 bs->breakpoint_at->type == bp_read_watchpoint)
1841 {
1842 mention (bs->breakpoint_at);
1843 printf_filtered ("\nValue = ");
1844 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
c5aa993b 1845 Val_pretty_default);
c906108c
SS
1846 printf_filtered ("\n");
1847 return -1;
1848 }
1849 /* We can't deal with it. Maybe another member of the bpstat chain can. */
1850 return -1;
1851}
1852
1853/* Print a message indicating what happened.
1854 This is called from normal_stop().
1855 The input to this routine is the head of the bpstat list - a list
1856 of the eventpoints that caused this stop.
1857 This routine calls the "print_it" routine(s) associated
1858 with these eventpoints. This will print (for example)
1859 the "Breakpoint n," part of the output.
1860 The return value of this routine is one of:
1861
1862 -1: Means we printed nothing
1863 0: Means we printed something, and expect subsequent
c5aa993b
JM
1864 code to print the location. An example is
1865 "Breakpoint 1, " which should be followed by
1866 the location.
c906108c 1867 1 : Means we printed something, but there is no need
c5aa993b
JM
1868 to also print the location part of the message.
1869 An example is the catch/throw messages, which
1870 don't require a location appended to the end. */
c906108c
SS
1871
1872int
1873bpstat_print (bs)
1874 bpstat bs;
1875{
1876 int val;
c5aa993b 1877
c906108c
SS
1878 if (bs == NULL)
1879 return -1;
1880
1881 val = (*bs->print_it) (bs);
1882 if (val >= 0)
1883 return val;
c5aa993b 1884
c906108c
SS
1885 /* Maybe another breakpoint in the chain caused us to stop.
1886 (Currently all watchpoints go on the bpstat whether hit or
1887 not. That probably could (should) be changed, provided care is taken
1888 with respect to bpstat_explains_signal). */
1889 if (bs->next)
1890 return bpstat_print (bs->next);
1891
1892 /* We reached the end of the chain without printing anything. */
1893 return -1;
1894}
1895
1896/* Evaluate the expression EXP and return 1 if value is zero.
1897 This is used inside a catch_errors to evaluate the breakpoint condition.
1898 The argument is a "struct expression *" that has been cast to char * to
1899 make it pass through catch_errors. */
1900
1901static int
1902breakpoint_cond_eval (exp)
1903 PTR exp;
1904{
1905 value_ptr mark = value_mark ();
c5aa993b 1906 int i = !value_true (evaluate_expression ((struct expression *) exp));
c906108c
SS
1907 value_free_to_mark (mark);
1908 return i;
1909}
1910
1911/* Allocate a new bpstat and chain it to the current one. */
1912
1913static bpstat
1914bpstat_alloc (b, cbs)
1915 register struct breakpoint *b;
c5aa993b 1916 bpstat cbs; /* Current "bs" value */
c906108c
SS
1917{
1918 bpstat bs;
1919
1920 bs = (bpstat) xmalloc (sizeof (*bs));
1921 cbs->next = bs;
1922 bs->breakpoint_at = b;
1923 /* If the condition is false, etc., don't do the commands. */
1924 bs->commands = NULL;
1925 bs->old_val = NULL;
1926 bs->print_it = print_it_normal;
1927 return bs;
1928}
1929\f
1930/* Possible return values for watchpoint_check (this can't be an enum
1931 because of check_errors). */
1932/* The watchpoint has been deleted. */
1933#define WP_DELETED 1
1934/* The value has changed. */
1935#define WP_VALUE_CHANGED 2
1936/* The value has not changed. */
1937#define WP_VALUE_NOT_CHANGED 3
1938
1939#define BP_TEMPFLAG 1
1940#define BP_HARDWAREFLAG 2
1941
1942/* Check watchpoint condition. */
1943
1944static int
1945watchpoint_check (p)
1946 PTR p;
1947{
1948 bpstat bs = (bpstat) p;
1949 struct breakpoint *b;
1950 struct frame_info *fr;
1951 int within_current_scope;
1952
1953 b = bs->breakpoint_at;
1954
1955 if (b->exp_valid_block == NULL)
1956 within_current_scope = 1;
1957 else
1958 {
1959 /* There is no current frame at this moment. If we're going to have
c5aa993b
JM
1960 any chance of handling watchpoints on local variables, we'll need
1961 the frame chain (so we can determine if we're in scope). */
1962 reinit_frame_cache ();
c906108c
SS
1963 fr = find_frame_addr_in_frame_chain (b->watchpoint_frame);
1964 within_current_scope = (fr != NULL);
1965 if (within_current_scope)
1966 /* If we end up stopping, the current frame will get selected
1967 in normal_stop. So this call to select_frame won't affect
1968 the user. */
1969 select_frame (fr, -1);
1970 }
c5aa993b 1971
c906108c
SS
1972 if (within_current_scope)
1973 {
1974 /* We use value_{,free_to_}mark because it could be a
1975 *long* time before we return to the command level and
c5aa993b
JM
1976 call free_all_values. We can't call free_all_values because
1977 we might be in the middle of evaluating a function call. */
c906108c
SS
1978
1979 value_ptr mark = value_mark ();
1980 value_ptr new_val = evaluate_expression (bs->breakpoint_at->exp);
1981 if (!value_equal (b->val, new_val))
1982 {
1983 release_value (new_val);
1984 value_free_to_mark (mark);
1985 bs->old_val = b->val;
1986 b->val = new_val;
1987 /* We will stop here */
1988 return WP_VALUE_CHANGED;
1989 }
1990 else
1991 {
1992 /* Nothing changed, don't do anything. */
1993 value_free_to_mark (mark);
1994 /* We won't stop here */
1995 return WP_VALUE_NOT_CHANGED;
1996 }
1997 }
1998 else
1999 {
2000 /* This seems like the only logical thing to do because
c5aa993b
JM
2001 if we temporarily ignored the watchpoint, then when
2002 we reenter the block in which it is valid it contains
2003 garbage (in the case of a function, it may have two
2004 garbage values, one before and one after the prologue).
2005 So we can't even detect the first assignment to it and
2006 watch after that (since the garbage may or may not equal
2007 the first value assigned). */
c906108c
SS
2008 printf_filtered ("\
2009Watchpoint %d deleted because the program has left the block in\n\
2010which its expression is valid.\n", bs->breakpoint_at->number);
2011 if (b->related_breakpoint)
2012 b->related_breakpoint->disposition = del_at_next_stop;
2013 b->disposition = del_at_next_stop;
2014
2015 return WP_DELETED;
2016 }
2017}
2018
2019/* This is used when everything which needs to be printed has
2020 already been printed. But we still want to print the frame. */
2021
2022/* Background: When we stop, bpstat_print() is called.
2023 It loops through the bpstat list of things causing this stop,
2024 calling the print_it function for each one. The default
2025 print_it function, used for breakpoints, is print_it_normal().
2026 Also see print_it_noop() and print_it_done() are the other
2027 two possibilities. See comments in bpstat_print() and
2028 in header of print_it_normal() for more detail. */
2029
2030static int
2031print_it_done (bs)
2032 bpstat bs;
2033{
2034 return 0;
2035}
2036
2037/* This is used when nothing should be printed for this bpstat entry. */
2038/* Background: When we stop, bpstat_print() is called.
2039 It loops through the bpstat list of things causing this stop,
2040 calling the print_it function for each one. The default
2041 print_it function, used for breakpoints, is print_it_normal().
2042 Also see print_it_noop() and print_it_done() are the other
2043 two possibilities. See comments in bpstat_print() and
2044 in header of print_it_normal() for more detail. */
2045
2046static int
2047print_it_noop (bs)
2048 bpstat bs;
2049{
2050 return -1;
2051}
2052
2053/* Get a bpstat associated with having just stopped at address *PC
2054 and frame address CORE_ADDRESS. Update *PC to point at the
2055 breakpoint (if we hit a breakpoint). NOT_A_BREAKPOINT is nonzero
2056 if this is known to not be a real breakpoint (it could still be a
2057 watchpoint, though). */
2058
2059/* Determine whether we stopped at a breakpoint, etc, or whether we
2060 don't understand this stop. Result is a chain of bpstat's such that:
2061
c5aa993b 2062 if we don't understand the stop, the result is a null pointer.
c906108c 2063
c5aa993b 2064 if we understand why we stopped, the result is not null.
c906108c 2065
c5aa993b
JM
2066 Each element of the chain refers to a particular breakpoint or
2067 watchpoint at which we have stopped. (We may have stopped for
2068 several reasons concurrently.)
c906108c 2069
c5aa993b
JM
2070 Each element of the chain has valid next, breakpoint_at,
2071 commands, FIXME??? fields. */
c906108c
SS
2072
2073bpstat
2074bpstat_stop_status (pc, not_a_breakpoint)
2075 CORE_ADDR *pc;
2076 int not_a_breakpoint;
2077{
2078 register struct breakpoint *b, *temp;
2079 CORE_ADDR bp_addr;
2080 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
2081 int real_breakpoint = 0;
2082 /* Root of the chain of bpstat's */
2083 struct bpstats root_bs[1];
2084 /* Pointer to the last thing in the chain currently. */
2085 bpstat bs = root_bs;
2086 static char message1[] =
c5aa993b
JM
2087 "Error evaluating expression for watchpoint %d\n";
2088 char message[sizeof (message1) + 30 /* slop */ ];
c906108c
SS
2089
2090 /* Get the address where the breakpoint would have been. */
2091 bp_addr = *pc - DECR_PC_AFTER_BREAK;
2092
2093 ALL_BREAKPOINTS_SAFE (b, temp)
c5aa993b
JM
2094 {
2095 if (b->enable == disabled
2096 || b->enable == shlib_disabled
2097 || b->enable == call_disabled)
2098 continue;
2099
2100 if (b->type != bp_watchpoint
2101 && b->type != bp_hardware_watchpoint
2102 && b->type != bp_read_watchpoint
2103 && b->type != bp_access_watchpoint
2104 && b->type != bp_hardware_breakpoint
2105 && b->type != bp_catch_fork
2106 && b->type != bp_catch_vfork
2107 && b->type != bp_catch_exec
2108 && b->type != bp_catch_catch
2109 && b->type != bp_catch_throw) /* a non-watchpoint bp */
2110 if (b->address != bp_addr || /* address doesn't match or */
2111 (overlay_debugging && /* overlay doesn't match */
2112 section_is_overlay (b->section) &&
2113 !section_is_mapped (b->section)))
c906108c
SS
2114 continue;
2115
c5aa993b
JM
2116 if (b->type == bp_hardware_breakpoint
2117 && b->address != (*pc - DECR_PC_AFTER_HW_BREAK))
2118 continue;
2119
2120 if (b->type != bp_watchpoint
2121 && b->type != bp_hardware_watchpoint
2122 && b->type != bp_read_watchpoint
2123 && b->type != bp_access_watchpoint
2124 && not_a_breakpoint)
2125 continue;
2126
2127 /* Is this a catchpoint of a load or unload? If so, did we
2128 get a load or unload of the specified library? If not,
2129 ignore it. */
2130 if ((b->type == bp_catch_load)
c906108c 2131#if defined(SOLIB_HAVE_LOAD_EVENT)
c5aa993b
JM
2132 && (!SOLIB_HAVE_LOAD_EVENT (inferior_pid)
2133 || ((b->dll_pathname != NULL)
2134 && (strcmp (b->dll_pathname, SOLIB_LOADED_LIBRARY_PATHNAME (inferior_pid)) != 0)))
c906108c 2135#endif
c5aa993b
JM
2136 )
2137 continue;
2138
2139 if ((b->type == bp_catch_unload)
c906108c 2140#if defined(SOLIB_HAVE_UNLOAD_EVENT)
c5aa993b
JM
2141 && (!SOLIB_HAVE_UNLOAD_EVENT (inferior_pid)
2142 || ((b->dll_pathname != NULL)
2143 && (strcmp (b->dll_pathname, SOLIB_UNLOADED_LIBRARY_PATHNAME (inferior_pid)) != 0)))
c906108c 2144#endif
c5aa993b
JM
2145 )
2146 continue;
c906108c 2147
c5aa993b
JM
2148 if ((b->type == bp_catch_fork)
2149 && !target_has_forked (inferior_pid, &b->forked_inferior_pid))
2150 continue;
c906108c 2151
c5aa993b
JM
2152 if ((b->type == bp_catch_vfork)
2153 && !target_has_vforked (inferior_pid, &b->forked_inferior_pid))
2154 continue;
c906108c 2155
c5aa993b
JM
2156 if ((b->type == bp_catch_exec)
2157 && !target_has_execd (inferior_pid, &b->exec_pathname))
2158 continue;
c906108c 2159
c5aa993b
JM
2160 if (ep_is_exception_catchpoint (b) &&
2161 !(current_exception_event = target_get_current_exception_event ()))
2162 continue;
c906108c 2163
c5aa993b
JM
2164 /* Come here if it's a watchpoint, or if the break address matches */
2165
2166 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
2167
2168 /* Watchpoints may change this, if not found to have triggered. */
2169 bs->stop = 1;
2170 bs->print = 1;
2171
2172 sprintf (message, message1, b->number);
2173 if (b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
2174 {
2175 switch (catch_errors (watchpoint_check, bs, message, RETURN_MASK_ALL))
2176 {
2177 case WP_DELETED:
2178 /* We've already printed what needs to be printed. */
2179 bs->print_it = print_it_done;
2180 /* Stop. */
2181 break;
2182 case WP_VALUE_CHANGED:
2183 /* Stop. */
2184 ++(b->hit_count);
2185 break;
2186 case WP_VALUE_NOT_CHANGED:
2187 /* Don't stop. */
2188 bs->print_it = print_it_noop;
2189 bs->stop = 0;
2190 /* Don't consider this a hit. */
2191 --(b->hit_count);
2192 continue;
2193 default:
2194 /* Can't happen. */
2195 /* FALLTHROUGH */
2196 case 0:
2197 /* Error from catch_errors. */
2198 printf_filtered ("Watchpoint %d deleted.\n", b->number);
2199 if (b->related_breakpoint)
2200 b->related_breakpoint->disposition = del_at_next_stop;
2201 b->disposition = del_at_next_stop;
2202 /* We've already printed what needs to be printed. */
2203 bs->print_it = print_it_done;
2204
2205 /* Stop. */
2206 break;
2207 }
2208 }
2209 else if (b->type == bp_read_watchpoint || b->type == bp_access_watchpoint)
2210 {
2211 CORE_ADDR addr;
2212 value_ptr v;
2213 int found = 0;
2214
2215 addr = target_stopped_data_address ();
2216 if (addr == 0)
2217 continue;
2218 for (v = b->val_chain; v; v = v->next)
2219 {
2220 if (v->lval == lval_memory)
2221 {
2222 CORE_ADDR vaddr;
2223
2224 vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
2225 if (addr == vaddr)
2226 found = 1;
2227 }
2228 }
2229 if (found)
c906108c
SS
2230 switch (catch_errors (watchpoint_check, bs, message, RETURN_MASK_ALL))
2231 {
2232 case WP_DELETED:
2233 /* We've already printed what needs to be printed. */
2234 bs->print_it = print_it_done;
2235 /* Stop. */
2236 break;
2237 case WP_VALUE_CHANGED:
c5aa993b 2238 case WP_VALUE_NOT_CHANGED:
c906108c
SS
2239 /* Stop. */
2240 ++(b->hit_count);
2241 break;
c906108c
SS
2242 default:
2243 /* Can't happen. */
c906108c
SS
2244 case 0:
2245 /* Error from catch_errors. */
2246 printf_filtered ("Watchpoint %d deleted.\n", b->number);
2247 if (b->related_breakpoint)
2248 b->related_breakpoint->disposition = del_at_next_stop;
2249 b->disposition = del_at_next_stop;
2250 /* We've already printed what needs to be printed. */
2251 bs->print_it = print_it_done;
c906108c
SS
2252 break;
2253 }
c5aa993b
JM
2254 }
2255 else
2256 {
2257 /* By definition, an encountered breakpoint is a triggered
2258 breakpoint. */
2259 ++(b->hit_count);
c906108c 2260
c5aa993b
JM
2261 real_breakpoint = 1;
2262 }
2263
2264 if (b->frame && b->frame != (get_current_frame ())->frame &&
2265 (b->type == bp_step_resume &&
2266 (INNER_THAN (get_current_frame ()->frame, b->frame))))
2267 bs->stop = 0;
2268 else
2269 {
2270 int value_is_zero = 0;
2271
2272 if (b->cond)
2273 {
2274 /* Need to select the frame, with all that implies
2275 so that the conditions will have the right context. */
2276 select_frame (get_current_frame (), 0);
2277 value_is_zero
2278 = catch_errors (breakpoint_cond_eval, (b->cond),
2279 "Error in testing breakpoint condition:\n",
2280 RETURN_MASK_ALL);
2281 /* FIXME-someday, should give breakpoint # */
2282 free_all_values ();
2283 }
2284 if (b->cond && value_is_zero)
2285 {
2286 bs->stop = 0;
2287 /* Don't consider this a hit. */
2288 --(b->hit_count);
2289 }
2290 else if (b->ignore_count > 0)
2291 {
2292 b->ignore_count--;
2293 bs->stop = 0;
2294 }
2295 else
2296 {
2297 /* We will stop here */
2298 if (b->disposition == disable)
2299 b->enable = disabled;
2300 bs->commands = b->commands;
2301 if (b->silent)
2302 bs->print = 0;
2303 if (bs->commands &&
2304 (STREQ ("silent", bs->commands->line) ||
2305 (xdb_commands && STREQ ("Q", bs->commands->line))))
2306 {
2307 bs->commands = bs->commands->next;
c906108c 2308 bs->print = 0;
c5aa993b
JM
2309 }
2310 }
2311 }
2312 /* Print nothing for this entry if we dont stop or if we dont print. */
2313 if (bs->stop == 0 || bs->print == 0)
2314 bs->print_it = print_it_noop;
2315 }
c906108c
SS
2316
2317 bs->next = NULL; /* Terminate the chain */
2318 bs = root_bs->next; /* Re-grab the head of the chain */
2319
2320 if (real_breakpoint && bs)
2321 {
c5aa993b 2322 if (bs->breakpoint_at->type == bp_hardware_breakpoint)
c906108c 2323 {
c5aa993b 2324 if (DECR_PC_AFTER_HW_BREAK != 0)
c906108c
SS
2325 {
2326 *pc = *pc - DECR_PC_AFTER_HW_BREAK;
2327 write_pc (*pc);
2328 }
2329 }
2330 else
2331 {
2332 if (DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs)
2333 {
2334 *pc = bp_addr;
2335#if defined (SHIFT_INST_REGS)
c5aa993b 2336 SHIFT_INST_REGS ();
c906108c
SS
2337#else /* No SHIFT_INST_REGS. */
2338 write_pc (bp_addr);
2339#endif /* No SHIFT_INST_REGS. */
2340 }
2341 }
2342 }
2343
2344 /* The value of a hardware watchpoint hasn't changed, but the
2345 intermediate memory locations we are watching may have. */
c5aa993b 2346 if (bs && !bs->stop &&
c906108c
SS
2347 (bs->breakpoint_at->type == bp_hardware_watchpoint ||
2348 bs->breakpoint_at->type == bp_read_watchpoint ||
2349 bs->breakpoint_at->type == bp_access_watchpoint))
2350 {
2351 remove_breakpoints ();
2352 insert_breakpoints ();
2353 }
2354 return bs;
2355}
2356\f
2357/* Tell what to do about this bpstat. */
2358struct bpstat_what
2359bpstat_what (bs)
2360 bpstat bs;
2361{
2362 /* Classify each bpstat as one of the following. */
c5aa993b
JM
2363 enum class
2364 {
2365 /* This bpstat element has no effect on the main_action. */
2366 no_effect = 0,
2367
2368 /* There was a watchpoint, stop but don't print. */
2369 wp_silent,
c906108c 2370
c5aa993b
JM
2371 /* There was a watchpoint, stop and print. */
2372 wp_noisy,
c906108c 2373
c5aa993b
JM
2374 /* There was a breakpoint but we're not stopping. */
2375 bp_nostop,
c906108c 2376
c5aa993b
JM
2377 /* There was a breakpoint, stop but don't print. */
2378 bp_silent,
c906108c 2379
c5aa993b
JM
2380 /* There was a breakpoint, stop and print. */
2381 bp_noisy,
c906108c 2382
c5aa993b
JM
2383 /* We hit the longjmp breakpoint. */
2384 long_jump,
c906108c 2385
c5aa993b
JM
2386 /* We hit the longjmp_resume breakpoint. */
2387 long_resume,
c906108c 2388
c5aa993b
JM
2389 /* We hit the step_resume breakpoint. */
2390 step_resume,
c906108c 2391
c5aa993b
JM
2392 /* We hit the through_sigtramp breakpoint. */
2393 through_sig,
c906108c 2394
c5aa993b
JM
2395 /* We hit the shared library event breakpoint. */
2396 shlib_event,
c906108c 2397
c5aa993b
JM
2398 /* We caught a shared library event. */
2399 catch_shlib_event,
c906108c 2400
c5aa993b
JM
2401 /* This is just used to count how many enums there are. */
2402 class_last
c906108c
SS
2403 };
2404
2405 /* Here is the table which drives this routine. So that we can
2406 format it pretty, we define some abbreviations for the
2407 enum bpstat_what codes. */
2408#define kc BPSTAT_WHAT_KEEP_CHECKING
2409#define ss BPSTAT_WHAT_STOP_SILENT
2410#define sn BPSTAT_WHAT_STOP_NOISY
2411#define sgl BPSTAT_WHAT_SINGLE
2412#define slr BPSTAT_WHAT_SET_LONGJMP_RESUME
2413#define clr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
2414#define clrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
2415#define sr BPSTAT_WHAT_STEP_RESUME
2416#define ts BPSTAT_WHAT_THROUGH_SIGTRAMP
2417#define shl BPSTAT_WHAT_CHECK_SHLIBS
2418#define shlr BPSTAT_WHAT_CHECK_SHLIBS_RESUME_FROM_HOOK
2419
2420/* "Can't happen." Might want to print an error message.
2421 abort() is not out of the question, but chances are GDB is just
2422 a bit confused, not unusable. */
2423#define err BPSTAT_WHAT_STOP_NOISY
2424
2425 /* Given an old action and a class, come up with a new action. */
2426 /* One interesting property of this table is that wp_silent is the same
2427 as bp_silent and wp_noisy is the same as bp_noisy. That is because
2428 after stopping, the check for whether to step over a breakpoint
2429 (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
2430 reference to how we stopped. We retain separate wp_silent and bp_silent
43ff13b4
JM
2431 codes in case we want to change that someday.
2432
2433 Another possibly interesting property of this table is that
2434 there's a partial ordering, priority-like, of the actions. Once
2435 you've decided that some action is appropriate, you'll never go
2436 back and decide something of a lower priority is better. The
2437 ordering is:
2438
c5aa993b
JM
2439 kc < clr sgl shl slr sn sr ss ts
2440 sgl < clrs shl shlr slr sn sr ss ts
2441 slr < err shl shlr sn sr ss ts
2442 clr < clrs err shl shlr sn sr ss ts
2443 clrs < err shl shlr sn sr ss ts
2444 ss < shl shlr sn sr ts
2445 sn < shl shlr sr ts
2446 sr < shl shlr ts
2447 shl < shlr
2448 ts <
2449 shlr <
2450
43ff13b4
JM
2451 What I think this means is that we don't need a damned table
2452 here. If you just put the rows and columns in the right order,
2453 it'd look awfully regular. We could simply walk the bpstat list
2454 and choose the highest priority action we find, with a little
2455 logic to handle the 'err' cases, and the CLEAR_LONGJMP_RESUME/
2456 CLEAR_LONGJMP_RESUME_SINGLE distinction (which breakpoint.h says
2457 is messy anyway). */
c906108c
SS
2458
2459 /* step_resume entries: a step resume breakpoint overrides another
2460 breakpoint of signal handling (see comment in wait_for_inferior
2461 at first IN_SIGTRAMP where we set the step_resume breakpoint). */
2462 /* We handle the through_sigtramp_breakpoint the same way; having both
2463 one of those and a step_resume_breakpoint is probably very rare (?). */
2464
2465 static const enum bpstat_what_main_action
c5aa993b
JM
2466 table[(int) class_last][(int) BPSTAT_WHAT_LAST] =
2467 {
2468 /* old action */
2469 /* kc ss sn sgl slr clr clrs sr ts shl shlr
2470 */
2471/*no_effect */
2472 {kc, ss, sn, sgl, slr, clr, clrs, sr, ts, shl, shlr},
2473/*wp_silent */
2474 {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl, shlr},
2475/*wp_noisy */
2476 {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl, shlr},
2477/*bp_nostop */
2478 {sgl, ss, sn, sgl, slr, clrs, clrs, sr, ts, shl, shlr},
2479/*bp_silent */
2480 {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl, shlr},
2481/*bp_noisy */
2482 {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl, shlr},
2483/*long_jump */
2484 {slr, ss, sn, slr, err, err, err, sr, ts, shl, shlr},
2485/*long_resume */
2486 {clr, ss, sn, clrs, err, err, err, sr, ts, shl, shlr},
2487/*step_resume */
2488 {sr, sr, sr, sr, sr, sr, sr, sr, ts, shl, shlr},
2489/*through_sig */
2490 {ts, ts, ts, ts, ts, ts, ts, ts, ts, shl, shlr},
2491/*shlib */
2492 {shl, shl, shl, shl, shl, shl, shl, shl, ts, shl, shlr},
2493/*catch_shlib */
2494 {shlr, shlr, shlr, shlr, shlr, shlr, shlr, shlr, ts, shlr, shlr}
2495 };
c906108c
SS
2496
2497#undef kc
2498#undef ss
2499#undef sn
2500#undef sgl
2501#undef slr
2502#undef clr
2503#undef clrs
2504#undef err
2505#undef sr
2506#undef ts
2507#undef shl
2508#undef shlr
2509 enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
2510 struct bpstat_what retval;
2511
2512 retval.call_dummy = 0;
2513 for (; bs != NULL; bs = bs->next)
2514 {
2515 enum class bs_class = no_effect;
2516 if (bs->breakpoint_at == NULL)
2517 /* I suspect this can happen if it was a momentary breakpoint
2518 which has since been deleted. */
2519 continue;
2520 switch (bs->breakpoint_at->type)
2521 {
2522 case bp_none:
2523 continue;
2524
2525 case bp_breakpoint:
2526 case bp_hardware_breakpoint:
2527 case bp_until:
2528 case bp_finish:
2529 if (bs->stop)
2530 {
2531 if (bs->print)
2532 bs_class = bp_noisy;
2533 else
2534 bs_class = bp_silent;
2535 }
2536 else
2537 bs_class = bp_nostop;
2538 break;
2539 case bp_watchpoint:
2540 case bp_hardware_watchpoint:
2541 case bp_read_watchpoint:
2542 case bp_access_watchpoint:
2543 if (bs->stop)
2544 {
2545 if (bs->print)
2546 bs_class = wp_noisy;
2547 else
2548 bs_class = wp_silent;
2549 }
2550 else
2551 /* There was a watchpoint, but we're not stopping. This requires
2552 no further action. */
2553 bs_class = no_effect;
2554 break;
2555 case bp_longjmp:
2556 bs_class = long_jump;
2557 break;
2558 case bp_longjmp_resume:
2559 bs_class = long_resume;
2560 break;
2561 case bp_step_resume:
2562 if (bs->stop)
2563 {
2564 bs_class = step_resume;
2565 }
2566 else
2567 /* It is for the wrong frame. */
2568 bs_class = bp_nostop;
2569 break;
2570 case bp_through_sigtramp:
2571 bs_class = through_sig;
2572 break;
2573 case bp_watchpoint_scope:
2574 bs_class = bp_nostop;
2575 break;
c5aa993b
JM
2576 case bp_shlib_event:
2577 bs_class = shlib_event;
2578 break;
2579 case bp_catch_load:
2580 case bp_catch_unload:
2581 /* Only if this catchpoint triggered should we cause the
2582 step-out-of-dld behaviour. Otherwise, we ignore this
2583 catchpoint. */
2584 if (bs->stop)
2585 bs_class = catch_shlib_event;
2586 else
2587 bs_class = no_effect;
2588 break;
2589 case bp_catch_fork:
2590 case bp_catch_vfork:
2591 case bp_catch_exec:
2592 if (bs->stop)
2593 {
2594 if (bs->print)
2595 bs_class = bp_noisy;
2596 else
2597 bs_class = bp_silent;
2598 }
2599 else
2600 /* There was a catchpoint, but we're not stopping. This requires
2601 no further action. */
2602 bs_class = no_effect;
2603 break;
2604 case bp_catch_catch:
2605 if (!bs->stop || CURRENT_EXCEPTION_KIND != EX_EVENT_CATCH)
2606 bs_class = bp_nostop;
2607 else if (bs->stop)
2608 bs_class = bs->print ? bp_noisy : bp_silent;
2609 break;
2610 case bp_catch_throw:
2611 if (!bs->stop || CURRENT_EXCEPTION_KIND != EX_EVENT_THROW)
2612 bs_class = bp_nostop;
2613 else if (bs->stop)
2614 bs_class = bs->print ? bp_noisy : bp_silent;
c906108c 2615 break;
c906108c
SS
2616 case bp_call_dummy:
2617 /* Make sure the action is stop (silent or noisy), so infrun.c
2618 pops the dummy frame. */
2619 bs_class = bp_silent;
2620 retval.call_dummy = 1;
2621 break;
2622 }
c5aa993b 2623 current_action = table[(int) bs_class][(int) current_action];
c906108c
SS
2624 }
2625 retval.main_action = current_action;
2626 return retval;
2627}
2628
2629/* Nonzero if we should step constantly (e.g. watchpoints on machines
2630 without hardware support). This isn't related to a specific bpstat,
2631 just to things like whether watchpoints are set. */
2632
c5aa993b 2633int
c906108c
SS
2634bpstat_should_step ()
2635{
2636 struct breakpoint *b;
2637 ALL_BREAKPOINTS (b)
2638 if (b->enable == enabled && b->type == bp_watchpoint)
c5aa993b 2639 return 1;
c906108c
SS
2640 return 0;
2641}
2642
2643/* Nonzero if there are enabled hardware watchpoints. */
2644int
2645bpstat_have_active_hw_watchpoints ()
2646{
2647 struct breakpoint *b;
2648 ALL_BREAKPOINTS (b)
2649 if ((b->enable == enabled) &&
c5aa993b
JM
2650 (b->inserted) &&
2651 ((b->type == bp_hardware_watchpoint) ||
2652 (b->type == bp_read_watchpoint) ||
2653 (b->type == bp_access_watchpoint)))
2654 return 1;
c906108c
SS
2655 return 0;
2656}
c906108c 2657\f
c5aa993b 2658
c906108c
SS
2659/* Given a bpstat that records zero or more triggered eventpoints, this
2660 function returns another bpstat which contains only the catchpoints
2661 on that first list, if any. */
2662void
2663bpstat_get_triggered_catchpoints (ep_list, cp_list)
c5aa993b
JM
2664 bpstat ep_list;
2665 bpstat *cp_list;
2666{
2667 struct bpstats root_bs[1];
2668 bpstat bs = root_bs;
2669 struct breakpoint *ep;
2670 char *dll_pathname;
2671
c906108c
SS
2672 bpstat_clear (cp_list);
2673 root_bs->next = NULL;
c5aa993b
JM
2674
2675 for (; ep_list != NULL; ep_list = ep_list->next)
c906108c
SS
2676 {
2677 /* Is this eventpoint a catchpoint? If not, ignore it. */
2678 ep = ep_list->breakpoint_at;
2679 if (ep == NULL)
c5aa993b
JM
2680 break;
2681 if ((ep->type != bp_catch_load) &&
2682 (ep->type != bp_catch_unload) &&
2683 (ep->type != bp_catch_catch) &&
2684 (ep->type != bp_catch_throw)) /* pai: (temp) ADD fork/vfork here!! */
2685 continue;
2686
c906108c
SS
2687 /* Yes; add it to the list. */
2688 bs = bpstat_alloc (ep, bs);
2689 *bs = *ep_list;
2690 bs->next = NULL;
2691 bs = root_bs->next;
c5aa993b 2692
c906108c
SS
2693#if defined(SOLIB_ADD)
2694 /* Also, for each triggered catchpoint, tag it with the name of
2695 the library that caused this trigger. (We copy the name now,
2696 because it's only guaranteed to be available NOW, when the
2697 catchpoint triggers. Clients who may wish to know the name
2698 later must get it from the catchpoint itself.) */
2699 if (ep->triggered_dll_pathname != NULL)
c5aa993b 2700 free (ep->triggered_dll_pathname);
c906108c 2701 if (ep->type == bp_catch_load)
c5aa993b 2702 dll_pathname = SOLIB_LOADED_LIBRARY_PATHNAME (inferior_pid);
c906108c 2703 else
c5aa993b 2704 dll_pathname = SOLIB_UNLOADED_LIBRARY_PATHNAME (inferior_pid);
c906108c
SS
2705#else
2706 dll_pathname = NULL;
2707#endif
2708 if (dll_pathname)
2709 {
2710 ep->triggered_dll_pathname = (char *) xmalloc (strlen (dll_pathname) + 1);
2711 strcpy (ep->triggered_dll_pathname, dll_pathname);
2712 }
2713 else
2714 ep->triggered_dll_pathname = NULL;
2715 }
c5aa993b 2716
c906108c
SS
2717 *cp_list = bs;
2718}
2719
2720/* Print information on breakpoint number BNUM, or -1 if all.
2721 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
2722 is nonzero, process only watchpoints. */
2723
c5aa993b
JM
2724typedef struct
2725{
2726 enum bptype type;
2727 char *description;
2728}
2729ep_type_description_t;
c906108c
SS
2730
2731static void
2732breakpoint_1 (bnum, allflag)
2733 int bnum;
2734 int allflag;
2735{
2736 register struct breakpoint *b;
2737 register struct command_line *l;
2738 register struct symbol *sym;
c5aa993b 2739 CORE_ADDR last_addr = (CORE_ADDR) - 1;
c906108c 2740 int found_a_breakpoint = 0;
c5aa993b 2741 static ep_type_description_t bptypes[] =
c906108c 2742 {
c5aa993b
JM
2743 {bp_none, "?deleted?"},
2744 {bp_breakpoint, "breakpoint"},
c906108c 2745 {bp_hardware_breakpoint, "hw breakpoint"},
c5aa993b
JM
2746 {bp_until, "until"},
2747 {bp_finish, "finish"},
2748 {bp_watchpoint, "watchpoint"},
c906108c 2749 {bp_hardware_watchpoint, "hw watchpoint"},
c5aa993b
JM
2750 {bp_read_watchpoint, "read watchpoint"},
2751 {bp_access_watchpoint, "acc watchpoint"},
2752 {bp_longjmp, "longjmp"},
2753 {bp_longjmp_resume, "longjmp resume"},
2754 {bp_step_resume, "step resume"},
2755 {bp_through_sigtramp, "sigtramp"},
2756 {bp_watchpoint_scope, "watchpoint scope"},
2757 {bp_call_dummy, "call dummy"},
2758 {bp_shlib_event, "shlib events"},
2759 {bp_catch_load, "catch load"},
2760 {bp_catch_unload, "catch unload"},
2761 {bp_catch_fork, "catch fork"},
2762 {bp_catch_vfork, "catch vfork"},
2763 {bp_catch_exec, "catch exec"},
2764 {bp_catch_catch, "catch catch"},
2765 {bp_catch_throw, "catch throw"}
2766 };
2767
2768 static char *bpdisps[] =
2769 {"del", "dstp", "dis", "keep"};
c906108c
SS
2770 static char bpenables[] = "nyn";
2771 char wrap_indent[80];
2772
392a587b 2773
c906108c
SS
2774 ALL_BREAKPOINTS (b)
2775 if (bnum == -1
2776 || bnum == b->number)
c5aa993b 2777 {
c906108c 2778/* We only print out user settable breakpoints unless the allflag is set. */
c5aa993b
JM
2779 if (!allflag
2780 && b->type != bp_breakpoint
2781 && b->type != bp_catch_load
2782 && b->type != bp_catch_unload
2783 && b->type != bp_catch_fork
2784 && b->type != bp_catch_vfork
2785 && b->type != bp_catch_exec
2786 && b->type != bp_catch_catch
2787 && b->type != bp_catch_throw
2788 && b->type != bp_hardware_breakpoint
2789 && b->type != bp_watchpoint
2790 && b->type != bp_read_watchpoint
2791 && b->type != bp_access_watchpoint
2792 && b->type != bp_hardware_watchpoint)
2793 continue;
c906108c 2794
c5aa993b
JM
2795 if (!found_a_breakpoint++)
2796 {
2797 annotate_breakpoints_headers ();
2798
2799 annotate_field (0);
2800 printf_filtered ("Num ");
2801 annotate_field (1);
2802 printf_filtered ("Type ");
2803 annotate_field (2);
2804 printf_filtered ("Disp ");
2805 annotate_field (3);
2806 printf_filtered ("Enb ");
2807 if (addressprint)
2808 {
2809 annotate_field (4);
2810 printf_filtered ("Address ");
2811 }
2812 annotate_field (5);
2813 printf_filtered ("What\n");
c906108c 2814
c5aa993b
JM
2815 annotate_breakpoints_table ();
2816 }
c906108c 2817
c5aa993b
JM
2818 annotate_record ();
2819 annotate_field (0);
2820 printf_filtered ("%-3d ", b->number);
2821 annotate_field (1);
2822 if ((int) b->type > (sizeof (bptypes) / sizeof (bptypes[0])))
2823 error ("bptypes table does not describe type #%d.", (int) b->type);
2824 if ((int) b->type != bptypes[(int) b->type].type)
2825 error ("bptypes table does not describe type #%d?", (int) b->type);
2826 printf_filtered ("%-14s ", bptypes[(int) b->type].description);
2827 annotate_field (2);
2828 printf_filtered ("%-4s ", bpdisps[(int) b->disposition]);
2829 annotate_field (3);
2830 printf_filtered ("%-3c ", bpenables[(int) b->enable]);
2831
2832 strcpy (wrap_indent, " ");
2833 if (addressprint)
2834 strcat (wrap_indent, " ");
2835 switch (b->type)
2836 {
2837 case bp_watchpoint:
2838 case bp_hardware_watchpoint:
2839 case bp_read_watchpoint:
2840 case bp_access_watchpoint:
2841 /* Field 4, the address, is omitted (which makes the columns
2842 not line up too nicely with the headers, but the effect
2843 is relatively readable). */
2844 annotate_field (5);
2845 print_expression (b->exp, gdb_stdout);
2846 break;
c906108c 2847
c5aa993b
JM
2848 case bp_catch_load:
2849 case bp_catch_unload:
2850 /* Field 4, the address, is omitted (which makes the columns
2851 not line up too nicely with the headers, but the effect
2852 is relatively readable). */
2853 annotate_field (5);
2854 if (b->dll_pathname == NULL)
2855 printf_filtered ("<any library> ");
2856 else
2857 printf_filtered ("library \"%s\" ", b->dll_pathname);
2858 break;
c906108c 2859
c5aa993b
JM
2860 case bp_catch_fork:
2861 case bp_catch_vfork:
2862 /* Field 4, the address, is omitted (which makes the columns
2863 not line up too nicely with the headers, but the effect
2864 is relatively readable). */
2865 annotate_field (5);
2866 if (b->forked_inferior_pid != 0)
2867 printf_filtered ("process %d ", b->forked_inferior_pid);
2868 break;
c906108c 2869
c5aa993b
JM
2870 case bp_catch_exec:
2871 /* Field 4, the address, is omitted (which makes the columns
2872 not line up too nicely with the headers, but the effect
2873 is relatively readable). */
2874 annotate_field (5);
2875 if (b->exec_pathname != NULL)
2876 printf_filtered ("program \"%s\" ", b->exec_pathname);
2877 break;
2878 case bp_catch_catch:
2879 /* Field 4, the address, is omitted (which makes the columns
2880 not line up too nicely with the headers, but the effect
2881 is relatively readable). */
2882 annotate_field (5);
2883 printf_filtered ("exception catch ");
2884 break;
2885 case bp_catch_throw:
2886 /* Field 4, the address, is omitted (which makes the columns
2887 not line up too nicely with the headers, but the effect
2888 is relatively readable). */
2889 annotate_field (5);
2890 printf_filtered ("exception throw ");
2891 break;
c906108c 2892
c5aa993b
JM
2893 case bp_breakpoint:
2894 case bp_hardware_breakpoint:
2895 case bp_until:
2896 case bp_finish:
2897 case bp_longjmp:
2898 case bp_longjmp_resume:
2899 case bp_step_resume:
2900 case bp_through_sigtramp:
2901 case bp_watchpoint_scope:
2902 case bp_call_dummy:
2903 case bp_shlib_event:
2904 if (addressprint)
2905 {
2906 annotate_field (4);
2907 /* FIXME-32x64: need a print_address_numeric with
2908 field width */
2909 printf_filtered
2910 ("%s ",
2911 local_hex_string_custom
2912 ((unsigned long) b->address, "08l"));
2913 }
c906108c 2914
c5aa993b 2915 annotate_field (5);
c906108c 2916
c5aa993b
JM
2917 last_addr = b->address;
2918 if (b->source_file)
2919 {
2920 sym = find_pc_sect_function (b->address, b->section);
2921 if (sym)
2922 {
2923 fputs_filtered ("in ", gdb_stdout);
2924 fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
2925 wrap_here (wrap_indent);
2926 fputs_filtered (" at ", gdb_stdout);
2927 }
2928 fputs_filtered (b->source_file, gdb_stdout);
2929 printf_filtered (":%d", b->line_number);
2930 }
2931 else
2932 print_address_symbolic (b->address, gdb_stdout, demangle, " ");
2933 break;
2934 }
c906108c 2935
c5aa993b
JM
2936 if (b->thread != -1)
2937 printf_filtered (" thread %d", b->thread);
c906108c 2938
c5aa993b 2939 printf_filtered ("\n");
c906108c 2940
c5aa993b
JM
2941 if (b->frame)
2942 {
2943 annotate_field (6);
c906108c 2944
c5aa993b
JM
2945 printf_filtered ("\tstop only in stack frame at ");
2946 print_address_numeric (b->frame, 1, gdb_stdout);
2947 printf_filtered ("\n");
2948 }
c906108c 2949
c5aa993b
JM
2950 if (b->cond)
2951 {
2952 annotate_field (7);
c906108c 2953
c5aa993b
JM
2954 printf_filtered ("\tstop only if ");
2955 print_expression (b->cond, gdb_stdout);
2956 printf_filtered ("\n");
2957 }
2958
2959 if (b->thread != -1)
2960 {
2961 /* FIXME should make an annotation for this */
2962 printf_filtered ("\tstop only in thread %d\n", b->thread);
2963 }
2964
2965 if (show_breakpoint_hit_counts && b->hit_count)
2966 {
2967 /* FIXME should make an annotation for this */
2968 if (ep_is_catchpoint (b))
2969 printf_filtered ("\tcatchpoint");
2970 else
2971 printf_filtered ("\tbreakpoint");
2972 printf_filtered (" already hit %d time%s\n",
2973 b->hit_count, (b->hit_count == 1 ? "" : "s"));
2974 }
2975
2976 if (b->ignore_count)
2977 {
2978 annotate_field (8);
2979
2980 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
2981 }
2982
2983 if ((l = b->commands))
2984 {
2985 annotate_field (9);
2986
2987 while (l)
2988 {
2989 print_command_line (l, 4, gdb_stdout);
2990 l = l->next;
2991 }
2992 }
2993 }
c906108c
SS
2994
2995 if (!found_a_breakpoint)
2996 {
2997 if (bnum == -1)
c5aa993b 2998 printf_filtered ("No breakpoints or watchpoints.\n");
c906108c 2999 else
c5aa993b 3000 printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
c906108c
SS
3001 }
3002 else
3003 /* Compare against (CORE_ADDR)-1 in case some compiler decides
3004 that a comparison of an unsigned with -1 is always false. */
c5aa993b
JM
3005 if (last_addr != (CORE_ADDR) - 1)
3006 set_next_address (last_addr);
c906108c
SS
3007
3008 annotate_breakpoints_table_end ();
3009}
3010
3011/* ARGSUSED */
3012static void
3013breakpoints_info (bnum_exp, from_tty)
3014 char *bnum_exp;
3015 int from_tty;
3016{
3017 int bnum = -1;
3018
3019 if (bnum_exp)
3020 bnum = parse_and_eval_address (bnum_exp);
3021
3022 breakpoint_1 (bnum, 0);
3023}
3024
c906108c 3025/* ARGSUSED */
7a292a7a 3026static void
c906108c
SS
3027maintenance_info_breakpoints (bnum_exp, from_tty)
3028 char *bnum_exp;
3029 int from_tty;
3030{
3031 int bnum = -1;
3032
3033 if (bnum_exp)
3034 bnum = parse_and_eval_address (bnum_exp);
3035
3036 breakpoint_1 (bnum, 1);
3037}
3038
c906108c
SS
3039/* Print a message describing any breakpoints set at PC. */
3040
3041static void
3042describe_other_breakpoints (pc, section)
3043 CORE_ADDR pc;
3044 asection *section;
3045{
3046 register int others = 0;
3047 register struct breakpoint *b;
3048
3049 ALL_BREAKPOINTS (b)
3050 if (b->address == pc)
c5aa993b
JM
3051 if (overlay_debugging == 0 ||
3052 b->section == section)
3053 others++;
c906108c
SS
3054 if (others > 0)
3055 {
3056 printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
3057 ALL_BREAKPOINTS (b)
3058 if (b->address == pc)
c5aa993b
JM
3059 if (overlay_debugging == 0 ||
3060 b->section == section)
3061 {
3062 others--;
3063 printf_filtered
3064 ("%d%s%s ",
3065 b->number,
3066 ((b->enable == disabled || b->enable == shlib_disabled || b->enable == call_disabled)
3067 ? " (disabled)" : ""),
3068 (others > 1) ? "," : ((others == 1) ? " and" : ""));
3069 }
c906108c
SS
3070 printf_filtered ("also set at pc ");
3071 print_address_numeric (pc, 1, gdb_stdout);
3072 printf_filtered (".\n");
3073 }
3074}
3075\f
3076/* Set the default place to put a breakpoint
3077 for the `break' command with no arguments. */
3078
3079void
3080set_default_breakpoint (valid, addr, symtab, line)
3081 int valid;
3082 CORE_ADDR addr;
3083 struct symtab *symtab;
3084 int line;
3085{
3086 default_breakpoint_valid = valid;
3087 default_breakpoint_address = addr;
3088 default_breakpoint_symtab = symtab;
3089 default_breakpoint_line = line;
3090}
3091
3092/* Rescan breakpoints at address ADDRESS,
3093 marking the first one as "first" and any others as "duplicates".
3094 This is so that the bpt instruction is only inserted once. */
3095
3096static void
3097check_duplicates (address, section)
3098 CORE_ADDR address;
3099 asection *section;
3100{
3101 register struct breakpoint *b;
3102 register int count = 0;
3103
3104 if (address == 0) /* Watchpoints are uninteresting */
3105 return;
3106
3107 ALL_BREAKPOINTS (b)
3108 if (b->enable != disabled
3109 && b->enable != shlib_disabled
3110 && b->enable != call_disabled
3111 && b->address == address
3112 && (overlay_debugging == 0 || b->section == section))
c5aa993b
JM
3113 {
3114 count++;
3115 b->duplicate = count > 1;
3116 }
c906108c
SS
3117}
3118
3119/* Low level routine to set a breakpoint.
3120 Takes as args the three things that every breakpoint must have.
3121 Returns the breakpoint object so caller can set other things.
3122 Does not set the breakpoint number!
3123 Does not print anything.
3124
3125 ==> This routine should not be called if there is a chance of later
3126 error(); otherwise it leaves a bogus breakpoint on the chain. Validate
3127 your arguments BEFORE calling this routine! */
3128
3129struct breakpoint *
3130set_raw_breakpoint (sal)
3131 struct symtab_and_line sal;
3132{
3133 register struct breakpoint *b, *b1;
3134
3135 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
3136 memset (b, 0, sizeof (*b));
3137 b->address = sal.pc;
3138 if (sal.symtab == NULL)
3139 b->source_file = NULL;
3140 else
3141 b->source_file = savestring (sal.symtab->filename,
3142 strlen (sal.symtab->filename));
3143 b->section = sal.section;
3144 b->language = current_language->la_language;
3145 b->input_radix = input_radix;
3146 b->thread = -1;
3147 b->line_number = sal.line;
3148 b->enable = enabled;
3149 b->next = 0;
3150 b->silent = 0;
3151 b->ignore_count = 0;
3152 b->commands = NULL;
3153 b->frame = 0;
3154 b->dll_pathname = NULL;
3155 b->triggered_dll_pathname = NULL;
3156 b->forked_inferior_pid = 0;
3157 b->exec_pathname = NULL;
3158
3159 /* Add this breakpoint to the end of the chain
3160 so that a list of breakpoints will come out in order
3161 of increasing numbers. */
3162
3163 b1 = breakpoint_chain;
3164 if (b1 == 0)
3165 breakpoint_chain = b;
3166 else
3167 {
3168 while (b1->next)
3169 b1 = b1->next;
3170 b1->next = b;
3171 }
3172
3173 check_duplicates (sal.pc, sal.section);
3174 breakpoints_changed ();
3175
3176 return b;
3177}
3178
3179#ifdef GET_LONGJMP_TARGET
3180
3181static void
3182create_longjmp_breakpoint (func_name)
3183 char *func_name;
3184{
3185 struct symtab_and_line sal;
3186 struct breakpoint *b;
3187
c5aa993b 3188 INIT_SAL (&sal); /* initialize to zeroes */
c906108c
SS
3189 if (func_name != NULL)
3190 {
3191 struct minimal_symbol *m;
3192
c5aa993b 3193 m = lookup_minimal_symbol_text (func_name, NULL, (struct objfile *) NULL);
c906108c
SS
3194 if (m)
3195 sal.pc = SYMBOL_VALUE_ADDRESS (m);
3196 else
3197 return;
3198 }
3199 sal.section = find_pc_overlay (sal.pc);
3200 b = set_raw_breakpoint (sal);
c5aa993b
JM
3201 if (!b)
3202 return;
c906108c
SS
3203
3204 b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
3205 b->disposition = donttouch;
3206 b->enable = disabled;
3207 b->silent = 1;
3208 if (func_name)
c5aa993b 3209 b->addr_string = strsave (func_name);
c906108c
SS
3210 b->number = internal_breakpoint_number--;
3211}
3212
c5aa993b 3213#endif /* #ifdef GET_LONGJMP_TARGET */
c906108c
SS
3214
3215/* Call this routine when stepping and nexting to enable a breakpoint if we do
3216 a longjmp(). When we hit that breakpoint, call
3217 set_longjmp_resume_breakpoint() to figure out where we are going. */
3218
3219void
c5aa993b 3220enable_longjmp_breakpoint ()
c906108c
SS
3221{
3222 register struct breakpoint *b;
3223
3224 ALL_BREAKPOINTS (b)
3225 if (b->type == bp_longjmp)
c5aa993b
JM
3226 {
3227 b->enable = enabled;
3228 check_duplicates (b->address, b->section);
3229 }
c906108c
SS
3230}
3231
3232void
c5aa993b 3233disable_longjmp_breakpoint ()
c906108c
SS
3234{
3235 register struct breakpoint *b;
3236
3237 ALL_BREAKPOINTS (b)
c5aa993b 3238 if (b->type == bp_longjmp
c906108c 3239 || b->type == bp_longjmp_resume)
c5aa993b
JM
3240 {
3241 b->enable = disabled;
3242 check_duplicates (b->address, b->section);
3243 }
c906108c
SS
3244}
3245
3246#ifdef SOLIB_ADD
3247void
3248remove_solib_event_breakpoints ()
3249{
3250 register struct breakpoint *b, *temp;
3251
3252 ALL_BREAKPOINTS_SAFE (b, temp)
3253 if (b->type == bp_shlib_event)
c5aa993b 3254 delete_breakpoint (b);
c906108c
SS
3255}
3256
3257void
3258create_solib_event_breakpoint (address)
3259 CORE_ADDR address;
3260{
3261 struct breakpoint *b;
3262 struct symtab_and_line sal;
3263
c5aa993b 3264 INIT_SAL (&sal); /* initialize to zeroes */
c906108c
SS
3265 sal.pc = address;
3266 sal.section = find_pc_overlay (sal.pc);
3267 b = set_raw_breakpoint (sal);
3268 b->number = internal_breakpoint_number--;
3269 b->disposition = donttouch;
3270 b->type = bp_shlib_event;
3271}
3272
3273void
3274disable_breakpoints_in_shlibs (silent)
3275 int silent;
3276{
c5aa993b
JM
3277 struct breakpoint *b;
3278 int disabled_shlib_breaks = 0;
c906108c
SS
3279
3280 /* See also: insert_breakpoints, under DISABLE_UNSETTABLE_BREAK. */
3281 ALL_BREAKPOINTS (b)
c5aa993b 3282 {
c906108c 3283#if defined (PC_SOLIB)
c5aa993b
JM
3284 if (((b->type == bp_breakpoint) ||
3285 (b->type == bp_hardware_breakpoint)) &&
3286 (b->enable != shlib_disabled) &&
3287 (b->enable != call_disabled) &&
3288 !b->duplicate &&
3289 PC_SOLIB (b->address))
3290 {
3291 b->enable = shlib_disabled;
3292 if (!silent)
3293 {
3294 if (!disabled_shlib_breaks)
3295 {
3296 target_terminal_ours_for_output ();
3297 printf_filtered ("Temporarily disabling shared library breakpoints:\n");
3298 }
3299 disabled_shlib_breaks = 1;
3300 printf_filtered ("%d ", b->number);
3301 }
3302 }
c906108c 3303#endif
c5aa993b 3304 }
c906108c
SS
3305 if (disabled_shlib_breaks && !silent)
3306 printf_filtered ("\n");
3307}
3308
3309/* Try to reenable any breakpoints in shared libraries. */
3310void
3311re_enable_breakpoints_in_shlibs ()
3312{
3313 struct breakpoint *b;
3314
3315 ALL_BREAKPOINTS (b)
3316 if (b->enable == shlib_disabled)
c5aa993b
JM
3317 {
3318 char buf[1];
c906108c 3319
c5aa993b
JM
3320 /* Do not reenable the breakpoint if the shared library
3321 is still not mapped in. */
3322 if (target_read_memory (b->address, buf, 1) == 0)
3323 b->enable = enabled;
3324 }
c906108c
SS
3325}
3326
3327#endif
3328
3329static void
3330create_solib_load_unload_event_breakpoint (hookname, tempflag, dll_pathname, cond_string, bp_kind)
7a292a7a
SS
3331 char *hookname;
3332 int tempflag;
3333 char *dll_pathname;
3334 char *cond_string;
3335 enum bptype bp_kind;
c906108c 3336{
c5aa993b 3337 struct breakpoint *b;
c906108c 3338 struct symtabs_and_lines sals;
c5aa993b
JM
3339 struct symtab_and_line sal;
3340 struct cleanup *old_chain;
3341 struct cleanup *canonical_strings_chain = NULL;
3342 int i;
3343 char *addr_start = hookname;
3344 char *addr_end = NULL;
3345 char **canonical = (char **) NULL;
3346 int thread = -1; /* All threads. */
3347
c906108c
SS
3348 /* Set a breakpoint on the specified hook. */
3349 sals = decode_line_1 (&hookname, 1, (struct symtab *) NULL, 0, &canonical);
3350 addr_end = hookname;
c5aa993b 3351
c906108c
SS
3352 if (sals.nelts == 0)
3353 {
3354 warning ("Unable to set a breakpoint on dynamic linker callback.");
3355 warning ("Suggest linking with /opt/langtools/lib/end.o.");
3356 warning ("GDB will be unable to track shl_load/shl_unload calls");
3357 return;
3358 }
3359 if (sals.nelts != 1)
3360 {
3361 warning ("Unable to set a unique breakpoint on dynamic linker callback.");
3362 warning ("GDB will be unable to track shl_load/shl_unload calls");
3363 return;
3364 }
3365
3366 /* Make sure that all storage allocated in decode_line_1 gets freed in case
3367 the following errors out. */
3368 old_chain = make_cleanup (free, sals.sals);
c5aa993b 3369 if (canonical != (char **) NULL)
c906108c
SS
3370 {
3371 make_cleanup (free, canonical);
3372 canonical_strings_chain = make_cleanup (null_cleanup, 0);
3373 if (canonical[0] != NULL)
c5aa993b 3374 make_cleanup (free, canonical[0]);
c906108c 3375 }
c5aa993b 3376
c906108c 3377 resolve_sal_pc (&sals.sals[0]);
c5aa993b 3378
c906108c 3379 /* Remove the canonical strings from the cleanup, they are needed below. */
c5aa993b 3380 if (canonical != (char **) NULL)
c906108c 3381 discard_cleanups (canonical_strings_chain);
c5aa993b 3382
c906108c
SS
3383 b = set_raw_breakpoint (sals.sals[0]);
3384 set_breakpoint_count (breakpoint_count + 1);
3385 b->number = breakpoint_count;
3386 b->cond = NULL;
3387 b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3388 b->thread = thread;
c5aa993b
JM
3389
3390 if (canonical != (char **) NULL && canonical[0] != NULL)
c906108c
SS
3391 b->addr_string = canonical[0];
3392 else if (addr_start)
3393 b->addr_string = savestring (addr_start, addr_end - addr_start);
c5aa993b 3394
c906108c
SS
3395 b->enable = enabled;
3396 b->disposition = tempflag ? del : donttouch;
c5aa993b 3397
c906108c
SS
3398 if (dll_pathname == NULL)
3399 b->dll_pathname = NULL;
3400 else
3401 {
3402 b->dll_pathname = (char *) xmalloc (strlen (dll_pathname) + 1);
3403 strcpy (b->dll_pathname, dll_pathname);
3404 }
3405 b->type = bp_kind;
c5aa993b 3406
c906108c
SS
3407 mention (b);
3408 do_cleanups (old_chain);
3409}
3410
3411void
3412create_solib_load_event_breakpoint (hookname, tempflag, dll_pathname, cond_string)
c5aa993b
JM
3413 char *hookname;
3414 int tempflag;
3415 char *dll_pathname;
3416 char *cond_string;
c906108c
SS
3417{
3418 create_solib_load_unload_event_breakpoint (hookname,
c5aa993b
JM
3419 tempflag,
3420 dll_pathname,
3421 cond_string,
3422 bp_catch_load);
c906108c
SS
3423}
3424
3425void
3426create_solib_unload_event_breakpoint (hookname, tempflag, dll_pathname, cond_string)
c5aa993b
JM
3427 char *hookname;
3428 int tempflag;
3429 char *dll_pathname;
3430 char *cond_string;
c906108c
SS
3431{
3432 create_solib_load_unload_event_breakpoint (hookname,
c5aa993b
JM
3433 tempflag,
3434 dll_pathname,
3435 cond_string,
3436 bp_catch_unload);
c906108c
SS
3437}
3438
3439static void
3440create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_kind)
7a292a7a
SS
3441 int tempflag;
3442 char *cond_string;
3443 enum bptype bp_kind;
c906108c 3444{
c5aa993b
JM
3445 struct symtab_and_line sal;
3446 struct breakpoint *b;
3447 int thread = -1; /* All threads. */
3448
3449 INIT_SAL (&sal);
c906108c
SS
3450 sal.pc = 0;
3451 sal.symtab = NULL;
3452 sal.line = 0;
c5aa993b 3453
c906108c
SS
3454 b = set_raw_breakpoint (sal);
3455 set_breakpoint_count (breakpoint_count + 1);
3456 b->number = breakpoint_count;
3457 b->cond = NULL;
3458 b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3459 b->thread = thread;
3460 b->addr_string = NULL;
3461 b->enable = enabled;
3462 b->disposition = tempflag ? del : donttouch;
3463 b->forked_inferior_pid = 0;
c5aa993b 3464
c906108c 3465 b->type = bp_kind;
c5aa993b 3466
c906108c
SS
3467 mention (b);
3468}
3469
3470void
3471create_fork_event_catchpoint (tempflag, cond_string)
c5aa993b
JM
3472 int tempflag;
3473 char *cond_string;
c906108c
SS
3474{
3475 create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_fork);
3476}
c5aa993b 3477
c906108c
SS
3478void
3479create_vfork_event_catchpoint (tempflag, cond_string)
c5aa993b
JM
3480 int tempflag;
3481 char *cond_string;
c906108c
SS
3482{
3483 create_fork_vfork_event_catchpoint (tempflag, cond_string, bp_catch_vfork);
3484}
3485
3486void
3487create_exec_event_catchpoint (tempflag, cond_string)
c5aa993b
JM
3488 int tempflag;
3489 char *cond_string;
c906108c 3490{
c5aa993b
JM
3491 struct symtab_and_line sal;
3492 struct breakpoint *b;
3493 int thread = -1; /* All threads. */
c906108c 3494
c5aa993b 3495 INIT_SAL (&sal);
c906108c
SS
3496 sal.pc = 0;
3497 sal.symtab = NULL;
3498 sal.line = 0;
3499
3500 b = set_raw_breakpoint (sal);
3501 set_breakpoint_count (breakpoint_count + 1);
3502 b->number = breakpoint_count;
3503 b->cond = NULL;
3504 b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
3505 b->thread = thread;
3506 b->addr_string = NULL;
3507 b->enable = enabled;
3508 b->disposition = tempflag ? del : donttouch;
3509
3510 b->type = bp_catch_exec;
3511
3512 mention (b);
3513}
3514
3515static int
c5aa993b 3516hw_breakpoint_used_count ()
c906108c
SS
3517{
3518 register struct breakpoint *b;
3519 int i = 0;
3520
3521 ALL_BREAKPOINTS (b)
c5aa993b
JM
3522 {
3523 if (b->type == bp_hardware_breakpoint && b->enable == enabled)
3524 i++;
3525 }
c906108c
SS
3526
3527 return i;
3528}
3529
3530static int
c5aa993b
JM
3531hw_watchpoint_used_count (type, other_type_used)
3532 enum bptype type;
3533 int *other_type_used;
c906108c
SS
3534{
3535 register struct breakpoint *b;
3536 int i = 0;
3537
3538 *other_type_used = 0;
3539 ALL_BREAKPOINTS (b)
c5aa993b
JM
3540 {
3541 if (b->enable == enabled)
3542 {
3543 if (b->type == type)
3544 i++;
3545 else if ((b->type == bp_hardware_watchpoint ||
3546 b->type == bp_read_watchpoint ||
3547 b->type == bp_access_watchpoint)
3548 && b->enable == enabled)
3549 *other_type_used = 1;
3550 }
3551 }
c906108c
SS
3552 return i;
3553}
3554
3555/* Call this after hitting the longjmp() breakpoint. Use this to set a new
3556 breakpoint at the target of the jmp_buf.
3557
3558 FIXME - This ought to be done by setting a temporary breakpoint that gets
3559 deleted automatically... */
3560
3561void
c5aa993b 3562set_longjmp_resume_breakpoint (pc, frame)
c906108c
SS
3563 CORE_ADDR pc;
3564 struct frame_info *frame;
3565{
3566 register struct breakpoint *b;
3567
3568 ALL_BREAKPOINTS (b)
3569 if (b->type == bp_longjmp_resume)
c5aa993b
JM
3570 {
3571 b->address = pc;
3572 b->enable = enabled;
3573 if (frame != NULL)
3574 b->frame = frame->frame;
3575 else
3576 b->frame = 0;
3577 check_duplicates (b->address, b->section);
3578 return;
3579 }
c906108c
SS
3580}
3581
3582void
3583disable_watchpoints_before_interactive_call_start ()
3584{
c5aa993b 3585 struct breakpoint *b;
c906108c
SS
3586
3587 ALL_BREAKPOINTS (b)
c5aa993b
JM
3588 {
3589 if (((b->type == bp_watchpoint)
3590 || (b->type == bp_hardware_watchpoint)
3591 || (b->type == bp_read_watchpoint)
3592 || (b->type == bp_access_watchpoint)
3593 || ep_is_exception_catchpoint (b))
3594 && (b->enable == enabled))
3595 {
3596 b->enable = call_disabled;
3597 check_duplicates (b->address, b->section);
3598 }
3599 }
c906108c
SS
3600}
3601
3602void
3603enable_watchpoints_after_interactive_call_stop ()
3604{
c5aa993b 3605 struct breakpoint *b;
c906108c
SS
3606
3607 ALL_BREAKPOINTS (b)
c5aa993b
JM
3608 {
3609 if (((b->type == bp_watchpoint)
3610 || (b->type == bp_hardware_watchpoint)
3611 || (b->type == bp_read_watchpoint)
3612 || (b->type == bp_access_watchpoint)
3613 || ep_is_exception_catchpoint (b))
3614 && (b->enable == call_disabled))
3615 {
3616 b->enable = enabled;
3617 check_duplicates (b->address, b->section);
3618 }
3619 }
c906108c
SS
3620}
3621
3622
3623/* Set a breakpoint that will evaporate an end of command
3624 at address specified by SAL.
3625 Restrict it to frame FRAME if FRAME is nonzero. */
3626
3627struct breakpoint *
3628set_momentary_breakpoint (sal, frame, type)
3629 struct symtab_and_line sal;
3630 struct frame_info *frame;
3631 enum bptype type;
3632{
3633 register struct breakpoint *b;
3634 b = set_raw_breakpoint (sal);
3635 b->type = type;
3636 b->enable = enabled;
3637 b->disposition = donttouch;
3638 b->frame = (frame ? frame->frame : 0);
3639
3640 /* If we're debugging a multi-threaded program, then we
3641 want momentary breakpoints to be active in only a
3642 single thread of control. */
3643 if (in_thread_list (inferior_pid))
3644 b->thread = pid_to_thread_id (inferior_pid);
3645
3646 return b;
3647}
c906108c 3648\f
c5aa993b 3649
c906108c
SS
3650/* Tell the user we have just set a breakpoint B. */
3651
3652static void
3653mention (b)
3654 struct breakpoint *b;
3655{
3656 int say_where = 0;
3657
3658 /* FIXME: This is misplaced; mention() is called by things (like hitting a
3659 watchpoint) other than breakpoint creation. It should be possible to
3660 clean this up and at the same time replace the random calls to
3661 breakpoint_changed with this hook, as has already been done for
3662 delete_breakpoint_hook and so on. */
3663 if (create_breakpoint_hook)
3664 create_breakpoint_hook (b);
3665
3666 switch (b->type)
3667 {
3668 case bp_none:
3669 printf_filtered ("(apparently deleted?) Eventpoint %d: ", b->number);
3670 break;
3671 case bp_watchpoint:
3672 printf_filtered ("Watchpoint %d: ", b->number);
3673 print_expression (b->exp, gdb_stdout);
3674 break;
3675 case bp_hardware_watchpoint:
3676 printf_filtered ("Hardware watchpoint %d: ", b->number);
3677 print_expression (b->exp, gdb_stdout);
3678 break;
3679 case bp_read_watchpoint:
3680 printf_filtered ("Hardware read watchpoint %d: ", b->number);
3681 print_expression (b->exp, gdb_stdout);
3682 break;
3683 case bp_access_watchpoint:
c5aa993b 3684 printf_filtered ("Hardware access (read/write) watchpoint %d: ", b->number);
c906108c
SS
3685 print_expression (b->exp, gdb_stdout);
3686 break;
3687 case bp_breakpoint:
3688 printf_filtered ("Breakpoint %d", b->number);
3689 say_where = 1;
3690 break;
3691 case bp_hardware_breakpoint:
3692 printf_filtered ("Hardware assisted breakpoint %d", b->number);
3693 say_where = 1;
3694 break;
3695 case bp_catch_load:
3696 case bp_catch_unload:
3697 printf_filtered ("Catchpoint %d (%s %s)",
c5aa993b
JM
3698 b->number,
3699 (b->type == bp_catch_load) ? "load" : "unload",
3700 (b->dll_pathname != NULL) ? b->dll_pathname : "<any library>");
c906108c
SS
3701 break;
3702 case bp_catch_fork:
3703 case bp_catch_vfork:
3704 printf_filtered ("Catchpoint %d (%s)",
c5aa993b
JM
3705 b->number,
3706 (b->type == bp_catch_fork) ? "fork" : "vfork");
c906108c
SS
3707 break;
3708 case bp_catch_exec:
3709 printf_filtered ("Catchpoint %d (exec)",
c5aa993b 3710 b->number);
c906108c
SS
3711 break;
3712 case bp_catch_catch:
3713 case bp_catch_throw:
3714 printf_filtered ("Catchpoint %d (%s)",
c5aa993b
JM
3715 b->number,
3716 (b->type == bp_catch_catch) ? "catch" : "throw");
c906108c
SS
3717 break;
3718
3719 case bp_until:
3720 case bp_finish:
3721 case bp_longjmp:
3722 case bp_longjmp_resume:
3723 case bp_step_resume:
3724 case bp_through_sigtramp:
3725 case bp_call_dummy:
3726 case bp_watchpoint_scope:
3727 case bp_shlib_event:
3728 break;
3729 }
3730 if (say_where)
3731 {
3732 if (addressprint || b->source_file == NULL)
3733 {
3734 printf_filtered (" at ");
3735 print_address_numeric (b->address, 1, gdb_stdout);
3736 }
3737 if (b->source_file)
3738 printf_filtered (": file %s, line %d.",
3739 b->source_file, b->line_number);
c5aa993b
JM
3740 TUIDO (((TuiOpaqueFuncPtr) tui_vAllSetHasBreakAt, b, 1));
3741 TUIDO (((TuiOpaqueFuncPtr) tuiUpdateAllExecInfos));
c906108c
SS
3742 }
3743 printf_filtered ("\n");
3744}
c906108c 3745\f
c5aa993b 3746
c906108c
SS
3747/* Set a breakpoint according to ARG (function, linenum or *address)
3748 flag: first bit : 0 non-temporary, 1 temporary.
c5aa993b 3749 second bit : 0 normal breakpoint, 1 hardware breakpoint. */
c906108c
SS
3750
3751static void
3752break_command_1 (arg, flag, from_tty)
3753 char *arg;
3754 int flag, from_tty;
3755{
3756 int tempflag, hardwareflag;
3757 struct symtabs_and_lines sals;
3758 struct symtab_and_line sal;
3759 register struct expression *cond = 0;
3760 register struct breakpoint *b;
3761
3762 /* Pointers in arg to the start, and one past the end, of the condition. */
3763 char *cond_start = NULL;
3764 char *cond_end = NULL;
3765 /* Pointers in arg to the start, and one past the end,
3766 of the address part. */
3767 char *addr_start = NULL;
3768 char *addr_end = NULL;
3769 struct cleanup *old_chain;
3770 struct cleanup *canonical_strings_chain = NULL;
c5aa993b 3771 char **canonical = (char **) NULL;
c906108c
SS
3772 int i;
3773 int thread;
3774
3775 hardwareflag = flag & BP_HARDWAREFLAG;
3776 tempflag = flag & BP_TEMPFLAG;
3777
3778 sals.sals = NULL;
3779 sals.nelts = 0;
3780
c5aa993b 3781 INIT_SAL (&sal); /* initialize to zeroes */
c906108c
SS
3782
3783 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
3784
c5aa993b 3785 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
c906108c
SS
3786 && (arg[2] == ' ' || arg[2] == '\t')))
3787 {
3788 if (default_breakpoint_valid)
3789 {
c5aa993b 3790 sals.sals = (struct symtab_and_line *)
c906108c
SS
3791 xmalloc (sizeof (struct symtab_and_line));
3792 sal.pc = default_breakpoint_address;
3793 sal.line = default_breakpoint_line;
3794 sal.symtab = default_breakpoint_symtab;
c5aa993b 3795 sal.section = find_pc_overlay (sal.pc);
c906108c
SS
3796 sals.sals[0] = sal;
3797 sals.nelts = 1;
3798 }
3799 else
3800 error ("No default breakpoint address now.");
3801 }
3802 else
3803 {
3804 addr_start = arg;
3805
3806 /* Force almost all breakpoints to be in terms of the
c5aa993b
JM
3807 current_source_symtab (which is decode_line_1's default). This
3808 should produce the results we want almost all of the time while
3809 leaving default_breakpoint_* alone. */
c906108c
SS
3810 if (default_breakpoint_valid
3811 && (!current_source_symtab
3812 || (arg && (*arg == '+' || *arg == '-'))))
3813 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
3814 default_breakpoint_line, &canonical);
3815 else
c5aa993b 3816 sals = decode_line_1 (&arg, 1, (struct symtab *) NULL, 0, &canonical);
c906108c
SS
3817
3818 addr_end = arg;
3819 }
c5aa993b
JM
3820
3821 if (!sals.nelts)
c906108c
SS
3822 return;
3823
3824 /* Make sure that all storage allocated in decode_line_1 gets freed in case
3825 the following `for' loop errors out. */
3826 old_chain = make_cleanup (free, sals.sals);
c5aa993b 3827 if (canonical != (char **) NULL)
c906108c
SS
3828 {
3829 make_cleanup (free, canonical);
3830 canonical_strings_chain = make_cleanup (null_cleanup, 0);
3831 for (i = 0; i < sals.nelts; i++)
3832 {
3833 if (canonical[i] != NULL)
3834 make_cleanup (free, canonical[i]);
3835 }
3836 }
3837
3838 thread = -1; /* No specific thread yet */
3839
3840 /* Resolve all line numbers to PC's, and verify that conditions
3841 can be parsed, before setting any breakpoints. */
3842 for (i = 0; i < sals.nelts; i++)
3843 {
3844 char *tok, *end_tok;
3845 int toklen;
3846
3847 resolve_sal_pc (&sals.sals[i]);
3848
3849 /* It's possible for the PC to be nonzero, but still an illegal
3850 value on some targets.
3851
3852 For example, on HP-UX if you start gdb, and before running the
3853 inferior you try to set a breakpoint on a shared library function
3854 "foo" where the inferior doesn't call "foo" directly but does
3855 pass its address to another function call, then we do find a
3856 minimal symbol for the "foo", but it's address is invalid.
3857 (Appears to be an index into a table that the loader sets up
3858 when the inferior is run.)
3859
3860 Give the target a chance to bless sals.sals[i].pc before we
3861 try to make a breakpoint for it. */
c5aa993b
JM
3862 if (PC_REQUIRES_RUN_BEFORE_USE (sals.sals[i].pc))
3863 {
3864 error ("Cannot break on %s without a running program.", addr_start);
3865 }
3866
c906108c
SS
3867 tok = arg;
3868
3869 while (tok && *tok)
3870 {
3871 while (*tok == ' ' || *tok == '\t')
3872 tok++;
3873
3874 end_tok = tok;
3875
3876 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
3877 end_tok++;
3878
3879 toklen = end_tok - tok;
3880
3881 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
3882 {
3883 tok = cond_start = end_tok + 1;
3884 cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
3885 cond_end = tok;
3886 }
3887 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
3888 {
3889 char *tmptok;
3890
3891 tok = end_tok + 1;
3892 tmptok = tok;
3893 thread = strtol (tok, &tok, 0);
3894 if (tok == tmptok)
3895 error ("Junk after thread keyword.");
3896 if (!valid_thread_id (thread))
3897 error ("Unknown thread %d\n", thread);
3898 }
3899 else
3900 error ("Junk at end of arguments.");
3901 }
3902 }
3903 if (hardwareflag)
3904 {
3905 int i, target_resources_ok;
3906
c5aa993b 3907 i = hw_breakpoint_used_count ();
c906108c 3908 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
c5aa993b 3909 bp_hardware_breakpoint, i + sals.nelts, 0);
c906108c
SS
3910 if (target_resources_ok == 0)
3911 error ("No hardware breakpoint support in the target.");
3912 else if (target_resources_ok < 0)
c5aa993b 3913 error ("Hardware breakpoints used exceeds limit.");
c906108c
SS
3914 }
3915
3916 /* Remove the canonical strings from the cleanup, they are needed below. */
c5aa993b 3917 if (canonical != (char **) NULL)
c906108c
SS
3918 discard_cleanups (canonical_strings_chain);
3919
3920 /* Now set all the breakpoints. */
3921 for (i = 0; i < sals.nelts; i++)
3922 {
3923 sal = sals.sals[i];
3924
3925 if (from_tty)
3926 describe_other_breakpoints (sal.pc, sal.section);
3927
3928 b = set_raw_breakpoint (sal);
3929 set_breakpoint_count (breakpoint_count + 1);
3930 b->number = breakpoint_count;
3931 b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
3932 b->cond = cond;
3933 b->thread = thread;
3934
3935 /* If a canonical line spec is needed use that instead of the
c5aa993b
JM
3936 command string. */
3937 if (canonical != (char **) NULL && canonical[i] != NULL)
c906108c
SS
3938 b->addr_string = canonical[i];
3939 else if (addr_start)
3940 b->addr_string = savestring (addr_start, addr_end - addr_start);
3941 if (cond_start)
3942 b->cond_string = savestring (cond_start, cond_end - cond_start);
c5aa993b 3943
c906108c
SS
3944 b->enable = enabled;
3945 b->disposition = tempflag ? del : donttouch;
3946 mention (b);
3947 }
3948
3949 if (sals.nelts > 1)
3950 {
3951 printf_filtered ("Multiple breakpoints were set.\n");
3952 printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
3953 }
3954 do_cleanups (old_chain);
3955}
3956
3957static void
3958break_at_finish_at_depth_command_1 (arg, flag, from_tty)
3959 char *arg;
3960 int flag;
3961 int from_tty;
3962{
3963 struct frame_info *frame;
3964 CORE_ADDR low, high, selected_pc = 0;
3965 char *extra_args, *level_arg, *addr_string;
3966 int extra_args_len = 0, if_arg = 0;
3967
3968 if (!arg ||
3969 (arg[0] == 'i' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\t')))
3970 {
3971
3972 if (default_breakpoint_valid)
3973 {
3974 if (selected_frame)
3975 {
3976 selected_pc = selected_frame->pc;
3977 if (arg)
3978 if_arg = 1;
3979 }
3980 else
3981 error ("No selected frame.");
3982 }
3983 else
3984 error ("No default breakpoint address now.");
3985 }
3986 else
3987 {
3988 extra_args = strchr (arg, ' ');
3989 if (extra_args)
3990 {
3991 extra_args++;
3992 extra_args_len = strlen (extra_args);
3993 level_arg = (char *) xmalloc (extra_args - arg);
3994 strncpy (level_arg, arg, extra_args - arg - 1);
3995 level_arg[extra_args - arg - 1] = '\0';
3996 }
3997 else
3998 {
3999 level_arg = (char *) xmalloc (strlen (arg) + 1);
4000 strcpy (level_arg, arg);
4001 }
4002
4003 frame = parse_frame_specification (level_arg);
4004 if (frame)
4005 selected_pc = frame->pc;
4006 else
4007 selected_pc = 0;
4008 }
4009 if (if_arg)
4010 {
4011 extra_args = arg;
c5aa993b 4012 extra_args_len = strlen (arg);
c906108c
SS
4013 }
4014
4015 if (selected_pc)
4016 {
c5aa993b 4017 if (find_pc_partial_function (selected_pc, (char **) NULL, &low, &high))
c906108c
SS
4018 {
4019 addr_string = (char *) xmalloc (26 + extra_args_len);
4020 if (extra_args_len)
4021 sprintf (addr_string, "*0x%x %s", high, extra_args);
4022 else
4023 sprintf (addr_string, "*0x%x", high);
4024 break_command_1 (addr_string, flag, from_tty);
4025 free (addr_string);
4026 }
4027 else
4028 error ("No function contains the specified address");
4029 }
4030 else
4031 error ("Unable to set breakpoint at procedure exit");
4032}
4033
4034
4035static void
4036break_at_finish_command_1 (arg, flag, from_tty)
4037 char *arg;
4038 int flag;
4039 int from_tty;
4040{
4041 char *addr_string, *break_string, *beg_addr_string;
4042 CORE_ADDR low, high;
4043 struct symtabs_and_lines sals;
4044 struct symtab_and_line sal;
4045 struct cleanup *old_chain;
4046 char *extra_args;
4047 int extra_args_len = 0;
4048 int i, if_arg = 0;
4049
4050 if (!arg ||
4051 (arg[0] == 'i' && arg[1] == 'f' && (arg[2] == ' ' || arg[2] == '\t')))
4052 {
4053 if (default_breakpoint_valid)
4054 {
4055 if (selected_frame)
4056 {
4057 addr_string = (char *) xmalloc (15);
4058 sprintf (addr_string, "*0x%x", selected_frame->pc);
4059 if (arg)
4060 if_arg = 1;
4061 }
4062 else
4063 error ("No selected frame.");
4064 }
4065 else
4066 error ("No default breakpoint address now.");
4067 }
4068 else
4069 {
4070 addr_string = (char *) xmalloc (strlen (arg) + 1);
4071 strcpy (addr_string, arg);
4072 }
4073
4074 if (if_arg)
4075 {
4076 extra_args = arg;
c5aa993b
JM
4077 extra_args_len = strlen (arg);
4078 }
4079 else if (arg)
4080 {
4081 /* get the stuff after the function name or address */
4082 extra_args = strchr (arg, ' ');
4083 if (extra_args)
4084 {
4085 extra_args++;
4086 extra_args_len = strlen (extra_args);
4087 }
c906108c 4088 }
c906108c
SS
4089
4090 sals.sals = NULL;
4091 sals.nelts = 0;
4092
c5aa993b
JM
4093 beg_addr_string = addr_string;
4094 sals = decode_line_1 (&addr_string, 1, (struct symtab *) NULL, 0,
4095 (char ***) NULL);
c906108c
SS
4096
4097 free (beg_addr_string);
4098 old_chain = make_cleanup (free, sals.sals);
4099 for (i = 0; (i < sals.nelts); i++)
4100 {
4101 sal = sals.sals[i];
c5aa993b 4102 if (find_pc_partial_function (sal.pc, (char **) NULL, &low, &high))
c906108c
SS
4103 {
4104 break_string = (char *) xmalloc (extra_args_len + 26);
4105 if (extra_args_len)
4106 sprintf (break_string, "*0x%x %s", high, extra_args);
4107 else
4108 sprintf (break_string, "*0x%x", high);
4109 break_command_1 (break_string, flag, from_tty);
c5aa993b 4110 free (break_string);
c906108c
SS
4111 }
4112 else
4113 error ("No function contains the specified address");
4114 }
4115 if (sals.nelts > 1)
4116 {
4117 printf_filtered ("Multiple breakpoints were set.\n");
4118 printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
4119 }
c5aa993b 4120 do_cleanups (old_chain);
c906108c
SS
4121}
4122
4123
4124/* Helper function for break_command_1 and disassemble_command. */
4125
4126void
4127resolve_sal_pc (sal)
4128 struct symtab_and_line *sal;
4129{
4130 CORE_ADDR pc;
4131
4132 if (sal->pc == 0 && sal->symtab != NULL)
4133 {
4134 if (!find_line_pc (sal->symtab, sal->line, &pc))
4135 error ("No line %d in file \"%s\".",
4136 sal->line, sal->symtab->filename);
4137 sal->pc = pc;
4138 }
4139
4140 if (sal->section == 0 && sal->symtab != NULL)
4141 {
4142 struct blockvector *bv;
c5aa993b
JM
4143 struct block *b;
4144 struct symbol *sym;
4145 int index;
c906108c 4146
c5aa993b 4147 bv = blockvector_for_pc_sect (sal->pc, 0, &index, sal->symtab);
c906108c
SS
4148 if (bv != NULL)
4149 {
c5aa993b 4150 b = BLOCKVECTOR_BLOCK (bv, index);
c906108c
SS
4151 sym = block_function (b);
4152 if (sym != NULL)
4153 {
4154 fixup_symbol_section (sym, sal->symtab->objfile);
4155 sal->section = SYMBOL_BFD_SECTION (sym);
4156 }
4157 else
4158 {
4159 /* It really is worthwhile to have the section, so we'll just
c5aa993b
JM
4160 have to look harder. This case can be executed if we have
4161 line numbers but no functions (as can happen in assembly
4162 source). */
c906108c 4163
c5aa993b 4164 struct minimal_symbol *msym;
c906108c
SS
4165
4166 msym = lookup_minimal_symbol_by_pc (sal->pc);
4167 if (msym)
4168 sal->section = SYMBOL_BFD_SECTION (msym);
4169 }
4170 }
4171 }
4172}
4173
4174void
4175break_command (arg, from_tty)
4176 char *arg;
4177 int from_tty;
4178{
4179 break_command_1 (arg, 0, from_tty);
4180}
4181
7a292a7a 4182static void
c906108c
SS
4183break_at_finish_command (arg, from_tty)
4184 char *arg;
4185 int from_tty;
4186{
4187 break_at_finish_command_1 (arg, 0, from_tty);
4188}
4189
7a292a7a 4190static void
c906108c
SS
4191break_at_finish_at_depth_command (arg, from_tty)
4192 char *arg;
4193 int from_tty;
4194{
4195 break_at_finish_at_depth_command_1 (arg, 0, from_tty);
4196}
4197
4198void
4199tbreak_command (arg, from_tty)
4200 char *arg;
4201 int from_tty;
4202{
4203 break_command_1 (arg, BP_TEMPFLAG, from_tty);
4204}
4205
7a292a7a 4206static void
c906108c
SS
4207tbreak_at_finish_command (arg, from_tty)
4208 char *arg;
4209 int from_tty;
4210{
4211 break_at_finish_command_1 (arg, BP_TEMPFLAG, from_tty);
4212}
4213
4214static void
4215hbreak_command (arg, from_tty)
4216 char *arg;
4217 int from_tty;
4218{
4219 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
4220}
4221
4222static void
4223thbreak_command (arg, from_tty)
4224 char *arg;
4225 int from_tty;
4226{
4227 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
4228}
4229
4230static void
4231stop_command (arg, from_tty)
4232 char *arg;
4233 int from_tty;
4234{
4235 printf_filtered ("Specify the type of breakpoint to set.\n\
4236Usage: stop in <function | address>\n\
4237 stop at <line>\n");
4238}
4239
4240static void
4241stopin_command (arg, from_tty)
4242 char *arg;
4243 int from_tty;
4244{
4245 int badInput = 0;
4246
c5aa993b 4247 if (arg == (char *) NULL)
c906108c
SS
4248 badInput = 1;
4249 else if (*arg != '*')
4250 {
4251 char *argptr = arg;
4252 int hasColon = 0;
4253
4254 /* look for a ':'. If this is a line number specification, then say
c5aa993b
JM
4255 it is bad, otherwise, it should be an address or function/method
4256 name */
c906108c 4257 while (*argptr && !hasColon)
c5aa993b
JM
4258 {
4259 hasColon = (*argptr == ':');
4260 argptr++;
4261 }
c906108c
SS
4262
4263 if (hasColon)
c5aa993b 4264 badInput = (*argptr != ':'); /* Not a class::method */
c906108c 4265 else
c5aa993b 4266 badInput = isdigit (*arg); /* a simple line number */
c906108c
SS
4267 }
4268
4269 if (badInput)
c5aa993b 4270 printf_filtered ("Usage: stop in <function | address>\n");
c906108c
SS
4271 else
4272 break_command_1 (arg, 0, from_tty);
4273}
4274
4275static void
4276stopat_command (arg, from_tty)
4277 char *arg;
4278 int from_tty;
4279{
4280 int badInput = 0;
4281
c5aa993b 4282 if (arg == (char *) NULL || *arg == '*') /* no line number */
c906108c
SS
4283 badInput = 1;
4284 else
4285 {
4286 char *argptr = arg;
4287 int hasColon = 0;
4288
4289 /* look for a ':'. If there is a '::' then get out, otherwise
c5aa993b 4290 it is probably a line number. */
c906108c 4291 while (*argptr && !hasColon)
c5aa993b
JM
4292 {
4293 hasColon = (*argptr == ':');
4294 argptr++;
4295 }
c906108c
SS
4296
4297 if (hasColon)
c5aa993b 4298 badInput = (*argptr == ':'); /* we have class::method */
c906108c 4299 else
c5aa993b 4300 badInput = !isdigit (*arg); /* not a line number */
c906108c
SS
4301 }
4302
4303 if (badInput)
c5aa993b 4304 printf_filtered ("Usage: stop at <line>\n");
c906108c
SS
4305 else
4306 break_command_1 (arg, 0, from_tty);
4307}
4308
4309/* ARGSUSED */
4310/* accessflag: 0: watch write, 1: watch read, 2: watch access(read or write) */
4311static void
4312watch_command_1 (arg, accessflag, from_tty)
4313 char *arg;
4314 int accessflag;
4315 int from_tty;
4316{
4317 struct breakpoint *b;
4318 struct symtab_and_line sal;
4319 struct expression *exp;
4320 struct block *exp_valid_block;
4321 struct value *val, *mark;
4322 struct frame_info *frame;
4323 struct frame_info *prev_frame = NULL;
4324 char *exp_start = NULL;
4325 char *exp_end = NULL;
4326 char *tok, *end_tok;
4327 int toklen;
4328 char *cond_start = NULL;
4329 char *cond_end = NULL;
4330 struct expression *cond = NULL;
4331 int i, other_type_used, target_resources_ok = 0;
4332 enum bptype bp_type;
4333 int mem_cnt = 0;
4334
c5aa993b
JM
4335 INIT_SAL (&sal); /* initialize to zeroes */
4336
c906108c
SS
4337 /* Parse arguments. */
4338 innermost_block = NULL;
4339 exp_start = arg;
4340 exp = parse_exp_1 (&arg, 0, 0);
4341 exp_end = arg;
4342 exp_valid_block = innermost_block;
4343 mark = value_mark ();
4344 val = evaluate_expression (exp);
4345 release_value (val);
4346 if (VALUE_LAZY (val))
4347 value_fetch_lazy (val);
4348
4349 tok = arg;
4350 while (*tok == ' ' || *tok == '\t')
4351 tok++;
4352 end_tok = tok;
4353
4354 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
4355 end_tok++;
4356
4357 toklen = end_tok - tok;
4358 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
4359 {
4360 tok = cond_start = end_tok + 1;
4361 cond = parse_exp_1 (&tok, 0, 0);
4362 cond_end = tok;
4363 }
4364 if (*tok)
c5aa993b 4365 error ("Junk at end of command.");
c906108c 4366
c5aa993b
JM
4367 if (accessflag == 1)
4368 bp_type = bp_read_watchpoint;
4369 else if (accessflag == 2)
4370 bp_type = bp_access_watchpoint;
4371 else
4372 bp_type = bp_hardware_watchpoint;
c906108c
SS
4373
4374 mem_cnt = can_use_hardware_watchpoint (val);
4375 if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
4376 error ("Expression cannot be implemented with read/access watchpoint.");
c5aa993b
JM
4377 if (mem_cnt != 0)
4378 {
4379 i = hw_watchpoint_used_count (bp_type, &other_type_used);
4380 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
4381 bp_type, i + mem_cnt, other_type_used);
4382 if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
4383 error ("Target does not have this type of hardware watchpoint support.");
4384 if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
4385 error ("Target resources have been allocated for other types of watchpoints.");
4386 }
c906108c
SS
4387
4388#if defined(HPUXHPPA)
c5aa993b 4389 /* On HP-UX if you set a h/w
c906108c
SS
4390 watchpoint before the "run" command, the inferior dies with a e.g.,
4391 SIGILL once you start it. I initially believed this was due to a
4392 bad interaction between page protection traps and the initial
4393 startup sequence by the dynamic linker.
4394
4395 However, I tried avoiding that by having HP-UX's implementation of
4396 TARGET_CAN_USE_HW_WATCHPOINT return FALSE if there was no inferior_pid
4397 yet, which forced slow watches before a "run" or "attach", and it
4398 still fails somewhere in the startup code.
4399
4400 Until I figure out what's happening, I'm disallowing watches altogether
4401 before the "run" or "attach" command. We'll tell the user they must
4402 set watches after getting the program started. */
c5aa993b 4403 if (!target_has_execution)
c906108c
SS
4404 {
4405 warning ("can't do that without a running program; try \"break main\", \"run\" first");
4406 return;
4407 }
4408#endif /* HPUXHPPA */
c5aa993b 4409
c906108c
SS
4410 /* Now set up the breakpoint. */
4411 b = set_raw_breakpoint (sal);
4412 set_breakpoint_count (breakpoint_count + 1);
4413 b->number = breakpoint_count;
4414 b->disposition = donttouch;
4415 b->exp = exp;
4416 b->exp_valid_block = exp_valid_block;
4417 b->exp_string = savestring (exp_start, exp_end - exp_start);
4418 b->val = val;
4419 b->cond = cond;
4420 if (cond_start)
4421 b->cond_string = savestring (cond_start, cond_end - cond_start);
4422 else
4423 b->cond_string = 0;
c5aa993b 4424
c906108c
SS
4425 frame = block_innermost_frame (exp_valid_block);
4426 if (frame)
4427 {
4428 prev_frame = get_prev_frame (frame);
4429 b->watchpoint_frame = frame->frame;
4430 }
4431 else
c5aa993b 4432 b->watchpoint_frame = (CORE_ADDR) 0;
c906108c
SS
4433
4434 if (mem_cnt && target_resources_ok > 0)
4435 b->type = bp_type;
4436 else
4437 b->type = bp_watchpoint;
4438
4439 /* If the expression is "local", then set up a "watchpoint scope"
4440 breakpoint at the point where we've left the scope of the watchpoint
4441 expression. */
4442 if (innermost_block)
4443 {
4444 if (prev_frame)
4445 {
4446 struct breakpoint *scope_breakpoint;
4447 struct symtab_and_line scope_sal;
4448
4449 INIT_SAL (&scope_sal); /* initialize to zeroes */
c5aa993b 4450 scope_sal.pc = get_frame_pc (prev_frame);
c906108c
SS
4451 scope_sal.section = find_pc_overlay (scope_sal.pc);
4452
4453 scope_breakpoint = set_raw_breakpoint (scope_sal);
4454 set_breakpoint_count (breakpoint_count + 1);
4455 scope_breakpoint->number = breakpoint_count;
4456
4457 scope_breakpoint->type = bp_watchpoint_scope;
4458 scope_breakpoint->enable = enabled;
4459
4460 /* Automatically delete the breakpoint when it hits. */
4461 scope_breakpoint->disposition = del;
4462
4463 /* Only break in the proper frame (help with recursion). */
4464 scope_breakpoint->frame = prev_frame->frame;
4465
4466 /* Set the address at which we will stop. */
4467 scope_breakpoint->address = get_frame_pc (prev_frame);
4468
4469 /* The scope breakpoint is related to the watchpoint. We
4470 will need to act on them together. */
4471 b->related_breakpoint = scope_breakpoint;
4472 }
4473 }
4474 value_free_to_mark (mark);
4475 mention (b);
4476}
4477
4478/* Return count of locations need to be watched and can be handled
4479 in hardware. If the watchpoint can not be handled
4480 in hardware return zero. */
4481
4482#if !defined(TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT)
4483#define TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT(byte_size) \
4484 ((byte_size) <= (REGISTER_SIZE))
4485#endif
4486
4487static int
4488can_use_hardware_watchpoint (v)
4489 struct value *v;
4490{
4491 int found_memory_cnt = 0;
4492
4493 /* Did the user specifically forbid us to use hardware watchpoints? */
c5aa993b 4494 if (!can_use_hw_watchpoints)
c906108c 4495 return 0;
c5aa993b 4496
c906108c
SS
4497 /* Make sure all the intermediate values are in memory. Also make sure
4498 we found at least one memory expression. Guards against watch 0x12345,
4499 which is meaningless, but could cause errors if one tries to insert a
4500 hardware watchpoint for the constant expression. */
c5aa993b 4501 for (; v; v = v->next)
c906108c
SS
4502 {
4503 if (v->lval == lval_memory)
4504 {
4505 if (TARGET_REGION_SIZE_OK_FOR_HW_WATCHPOINT (TYPE_LENGTH (VALUE_TYPE (v))))
4506 found_memory_cnt++;
c5aa993b 4507 }
c906108c
SS
4508 else if (v->lval != not_lval && v->modifiable == 0)
4509 return 0;
4510 }
4511
4512 /* The expression itself looks suitable for using a hardware
4513 watchpoint, but give the target machine a chance to reject it. */
4514 return found_memory_cnt;
4515}
4516
c5aa993b
JM
4517static void
4518watch_command (arg, from_tty)
c906108c
SS
4519 char *arg;
4520 int from_tty;
4521{
4522 watch_command_1 (arg, 0, from_tty);
4523}
4524
c5aa993b
JM
4525static void
4526rwatch_command (arg, from_tty)
c906108c
SS
4527 char *arg;
4528 int from_tty;
4529{
4530 watch_command_1 (arg, 1, from_tty);
4531}
4532
c5aa993b
JM
4533static void
4534awatch_command (arg, from_tty)
c906108c
SS
4535 char *arg;
4536 int from_tty;
4537{
4538 watch_command_1 (arg, 2, from_tty);
4539}
c906108c 4540\f
c5aa993b 4541
43ff13b4 4542/* Helper routines for the until_command routine in infcmd.c. Here
c906108c
SS
4543 because it uses the mechanisms of breakpoints. */
4544
43ff13b4
JM
4545/* This function is called by fetch_inferior_event via the
4546 cmd_continuation pointer, to complete the until command. It takes
4547 care of cleaning up the temporary breakpoints set up by the until
4548 command. */
4549void
4550until_break_command_continuation (arg)
4551 struct continuation_arg *arg;
4552{
4553 /* Do all the exec cleanups, which at this point should only be the
4554 one set up in the first part of the until_break_command
4555 function. */
4556 do_exec_cleanups (ALL_CLEANUPS);
4557}
4558
c906108c
SS
4559/* ARGSUSED */
4560void
4561until_break_command (arg, from_tty)
4562 char *arg;
4563 int from_tty;
4564{
4565 struct symtabs_and_lines sals;
4566 struct symtab_and_line sal;
4567 struct frame_info *prev_frame = get_prev_frame (selected_frame);
4568 struct breakpoint *breakpoint;
4569 struct cleanup *old_chain;
43ff13b4 4570 struct continuation_arg *arg1, *arg2;
c906108c
SS
4571
4572 clear_proceed_status ();
4573
4574 /* Set a breakpoint where the user wants it and at return from
4575 this function */
c5aa993b 4576
c906108c
SS
4577 if (default_breakpoint_valid)
4578 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
c5aa993b 4579 default_breakpoint_line, (char ***) NULL);
c906108c 4580 else
c5aa993b
JM
4581 sals = decode_line_1 (&arg, 1, (struct symtab *) NULL, 0, (char ***) NULL);
4582
c906108c
SS
4583 if (sals.nelts != 1)
4584 error ("Couldn't get information on specified line.");
c5aa993b 4585
c906108c 4586 sal = sals.sals[0];
c5aa993b
JM
4587 free ((PTR) sals.sals); /* malloc'd, so freed */
4588
c906108c
SS
4589 if (*arg)
4590 error ("Junk at end of arguments.");
c5aa993b 4591
c906108c 4592 resolve_sal_pc (&sal);
c5aa993b 4593
c906108c 4594 breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
c5aa993b 4595
43ff13b4
JM
4596 if (!async_p || !target_has_async)
4597 old_chain = make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
4598 else
4599 make_exec_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
4600
4601 /* If we are running asynchronously, and the target supports async
4602 execution, we are not waiting for the target to stop, in the call
4603 tp proceed, below. This means that we cannot delete the
4604 brekpoints until the target has actually stopped. The only place
4605 where we get a chance to do that is in fetch_inferior_event, so
4606 we must set things up for that. */
4607
4608 if (async_p && target_has_async)
4609 {
4610 /* In this case we don't need args for the continuation, because
c5aa993b
JM
4611 all it needs to do is do the cleanups in the
4612 exec_cleanup_chain, which will be only those inserted by this
4613 function. We can get away by using ALL_CLEANUPS. */
43ff13b4
JM
4614 add_continuation (until_break_command_continuation, NULL);
4615 }
c906108c
SS
4616
4617 /* Keep within the current frame */
c5aa993b 4618
c906108c
SS
4619 if (prev_frame)
4620 {
4621 sal = find_pc_line (prev_frame->pc, 0);
4622 sal.pc = prev_frame->pc;
4623 breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
43ff13b4
JM
4624 if (!async_p || !target_has_async)
4625 make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
4626 else
4627 make_exec_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
c906108c 4628 }
c5aa993b 4629
c906108c 4630 proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
43ff13b4
JM
4631 /* Do the cleanups now, anly if we are not running asynchronously,
4632 of if we are, but the target is still synchronous. */
4633 if (!async_p || !target_has_async)
c5aa993b 4634 do_cleanups (old_chain);
c906108c
SS
4635}
4636\f
4637#if 0
4638/* These aren't used; I don't konw what they were for. */
4639/* Set a breakpoint at the catch clause for NAME. */
4640static int
4641catch_breakpoint (name)
4642 char *name;
4643{
4644}
4645
4646static int
4647disable_catch_breakpoint ()
4648{
4649}
4650
4651static int
4652delete_catch_breakpoint ()
4653{
4654}
4655
4656static int
4657enable_catch_breakpoint ()
4658{
4659}
4660#endif /* 0 */
4661
4662struct sal_chain
4663{
4664 struct sal_chain *next;
4665 struct symtab_and_line sal;
4666};
4667
7a292a7a 4668#if 0
c906108c
SS
4669/* Not really used -- invocation in handle_gnu_4_16_catch_command
4670 had been commented out in the v.4.16 sources, and stays
4671 disabled there now because "catch NAME" syntax isn't allowed.
4672 pai/1997-07-11 */
4673/* This isn't used; I don't know what it was for. */
4674/* For each catch clause identified in ARGS, run FUNCTION
4675 with that clause as an argument. */
4676static struct symtabs_and_lines
4677map_catch_names (args, function)
4678 char *args;
c5aa993b 4679 int (*function) ();
c906108c
SS
4680{
4681 register char *p = args;
4682 register char *p1;
4683 struct symtabs_and_lines sals;
4684#if 0
4685 struct sal_chain *sal_chain = 0;
4686#endif
4687
4688 if (p == 0)
4689 error_no_arg ("one or more catch names");
4690
4691 sals.nelts = 0;
4692 sals.sals = NULL;
4693
4694 while (*p)
4695 {
4696 p1 = p;
4697 /* Don't swallow conditional part. */
4698 if (p1[0] == 'i' && p1[1] == 'f'
4699 && (p1[2] == ' ' || p1[2] == '\t'))
4700 break;
4701
4702 if (isalpha (*p1))
4703 {
4704 p1++;
4705 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
4706 p1++;
4707 }
4708
4709 if (*p1 && *p1 != ' ' && *p1 != '\t')
4710 error ("Arguments must be catch names.");
4711
4712 *p1 = 0;
4713#if 0
4714 if (function (p))
4715 {
4716 struct sal_chain *next = (struct sal_chain *)
c5aa993b 4717 alloca (sizeof (struct sal_chain));
c906108c
SS
4718 next->next = sal_chain;
4719 next->sal = get_catch_sal (p);
4720 sal_chain = next;
4721 goto win;
4722 }
4723#endif
4724 printf_unfiltered ("No catch clause for exception %s.\n", p);
4725#if 0
4726 win:
4727#endif
4728 p = p1;
c5aa993b
JM
4729 while (*p == ' ' || *p == '\t')
4730 p++;
c906108c
SS
4731 }
4732}
7a292a7a 4733#endif
c906108c
SS
4734
4735/* This shares a lot of code with `print_frame_label_vars' from stack.c. */
4736
4737static struct symtabs_and_lines
4738get_catch_sals (this_level_only)
4739 int this_level_only;
4740{
4741 register struct blockvector *bl;
4742 register struct block *block;
4743 int index, have_default = 0;
4744 CORE_ADDR pc;
4745 struct symtabs_and_lines sals;
4746 struct sal_chain *sal_chain = 0;
4747 char *blocks_searched;
4748
4749 /* Not sure whether an error message is always the correct response,
4750 but it's better than a core dump. */
4751 if (selected_frame == NULL)
4752 error ("No selected frame.");
4753 block = get_frame_block (selected_frame);
4754 pc = selected_frame->pc;
4755
4756 sals.nelts = 0;
4757 sals.sals = NULL;
4758
4759 if (block == 0)
4760 error ("No symbol table info available.\n");
4761
4762 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
4763 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
4764 memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
4765
4766 while (block != 0)
4767 {
4768 CORE_ADDR end = BLOCK_END (block) - 4;
4769 int last_index;
4770
4771 if (bl != blockvector_for_pc (end, &index))
4772 error ("blockvector blotch");
4773 if (BLOCKVECTOR_BLOCK (bl, index) != block)
4774 error ("blockvector botch");
4775 last_index = BLOCKVECTOR_NBLOCKS (bl);
4776 index += 1;
4777
4778 /* Don't print out blocks that have gone by. */
4779 while (index < last_index
4780 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
4781 index++;
4782
4783 while (index < last_index
4784 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
4785 {
4786 if (blocks_searched[index] == 0)
4787 {
4788 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
4789 int nsyms;
4790 register int i;
4791 register struct symbol *sym;
4792
4793 nsyms = BLOCK_NSYMS (b);
4794
4795 for (i = 0; i < nsyms; i++)
4796 {
4797 sym = BLOCK_SYM (b, i);
4798 if (STREQ (SYMBOL_NAME (sym), "default"))
4799 {
4800 if (have_default)
4801 continue;
4802 have_default = 1;
4803 }
4804 if (SYMBOL_CLASS (sym) == LOC_LABEL)
4805 {
4806 struct sal_chain *next = (struct sal_chain *)
c5aa993b 4807 alloca (sizeof (struct sal_chain));
c906108c
SS
4808 next->next = sal_chain;
4809 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
4810 sal_chain = next;
4811 }
4812 }
4813 blocks_searched[index] = 1;
4814 }
4815 index++;
4816 }
4817 if (have_default)
4818 break;
4819 if (sal_chain && this_level_only)
4820 break;
4821
4822 /* After handling the function's top-level block, stop.
c5aa993b
JM
4823 Don't continue to its superblock, the block of
4824 per-file symbols. */
c906108c
SS
4825 if (BLOCK_FUNCTION (block))
4826 break;
4827 block = BLOCK_SUPERBLOCK (block);
4828 }
4829
4830 if (sal_chain)
4831 {
4832 struct sal_chain *tmp_chain;
4833
4834 /* Count the number of entries. */
4835 for (index = 0, tmp_chain = sal_chain; tmp_chain;
4836 tmp_chain = tmp_chain->next)
4837 index++;
4838
4839 sals.nelts = index;
4840 sals.sals = (struct symtab_and_line *)
4841 xmalloc (index * sizeof (struct symtab_and_line));
4842 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
4843 sals.sals[index] = sal_chain->sal;
4844 }
4845
4846 return sals;
4847}
4848
4849static void
4850ep_skip_leading_whitespace (s)
7a292a7a 4851 char **s;
c906108c 4852{
c5aa993b
JM
4853 if ((s == NULL) || (*s == NULL))
4854 return;
4855 while (isspace (**s))
4856 *s += 1;
c906108c 4857}
c5aa993b 4858
c906108c
SS
4859/* This function examines a string, and attempts to find a token
4860 that might be an event name in the leading characters. If a
4861 possible match is found, a pointer to the last character of
4862 the token is returned. Else, NULL is returned. */
4863static char *
4864ep_find_event_name_end (arg)
7a292a7a 4865 char *arg;
c906108c 4866{
c5aa993b
JM
4867 char *s = arg;
4868 char *event_name_end = NULL;
4869
c906108c
SS
4870 /* If we could depend upon the presense of strrpbrk, we'd use that... */
4871 if (arg == NULL)
4872 return NULL;
c5aa993b 4873
c906108c 4874 /* We break out of the loop when we find a token delimiter.
c5aa993b
JM
4875 Basically, we're looking for alphanumerics and underscores;
4876 anything else delimites the token. */
c906108c
SS
4877 while (*s != '\0')
4878 {
c5aa993b
JM
4879 if (!isalnum (*s) && (*s != '_'))
4880 break;
c906108c
SS
4881 event_name_end = s;
4882 s++;
4883 }
c5aa993b 4884
c906108c
SS
4885 return event_name_end;
4886}
4887
c5aa993b 4888
c906108c
SS
4889/* This function attempts to parse an optional "if <cond>" clause
4890 from the arg string. If one is not found, it returns NULL.
c5aa993b 4891
c906108c
SS
4892 Else, it returns a pointer to the condition string. (It does not
4893 attempt to evaluate the string against a particular block.) And,
4894 it updates arg to point to the first character following the parsed
4895 if clause in the arg string. */
4896static char *
4897ep_parse_optional_if_clause (arg)
7a292a7a 4898 char **arg;
c906108c 4899{
c5aa993b
JM
4900 char *cond_string;
4901
4902 if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
c906108c 4903 return NULL;
c5aa993b 4904
c906108c
SS
4905 /* Skip the "if" keyword. */
4906 (*arg) += 2;
c5aa993b 4907
c906108c
SS
4908 /* Skip any extra leading whitespace, and record the start of the
4909 condition string. */
4910 ep_skip_leading_whitespace (arg);
4911 cond_string = *arg;
c5aa993b 4912
c906108c
SS
4913 /* Assume that the condition occupies the remainder of the arg string. */
4914 (*arg) += strlen (cond_string);
c5aa993b 4915
c906108c
SS
4916 return cond_string;
4917}
c5aa993b 4918
c906108c
SS
4919/* This function attempts to parse an optional filename from the arg
4920 string. If one is not found, it returns NULL.
c5aa993b 4921
c906108c
SS
4922 Else, it returns a pointer to the parsed filename. (This function
4923 makes no attempt to verify that a file of that name exists, or is
4924 accessible.) And, it updates arg to point to the first character
4925 following the parsed filename in the arg string.
c5aa993b 4926
c906108c
SS
4927 Note that clients needing to preserve the returned filename for
4928 future access should copy it to their own buffers. */
4929static char *
4930ep_parse_optional_filename (arg)
7a292a7a 4931 char **arg;
c906108c 4932{
c5aa993b
JM
4933 static char filename[1024];
4934 char *arg_p = *arg;
4935 int i;
4936 char c;
4937
c906108c
SS
4938 if ((*arg_p == '\0') || isspace (*arg_p))
4939 return NULL;
c5aa993b
JM
4940
4941 for (i = 0;; i++)
c906108c
SS
4942 {
4943 c = *arg_p;
4944 if (isspace (c))
c5aa993b 4945 c = '\0';
c906108c
SS
4946 filename[i] = c;
4947 if (c == '\0')
c5aa993b 4948 break;
c906108c
SS
4949 arg_p++;
4950 }
4951 *arg = arg_p;
c5aa993b 4952
c906108c
SS
4953 return filename;
4954}
c5aa993b 4955
c906108c
SS
4956/* Commands to deal with catching events, such as signals, exceptions,
4957 process start/exit, etc. */
c5aa993b
JM
4958
4959typedef enum
4960{
4961 catch_fork, catch_vfork
4962}
4963catch_fork_kind;
4964
7a292a7a
SS
4965static void catch_fork_command_1 PARAMS ((catch_fork_kind fork_kind, char *arg, int tempflag, int from_tty));
4966
c906108c
SS
4967static void
4968catch_fork_command_1 (fork_kind, arg, tempflag, from_tty)
7a292a7a
SS
4969 catch_fork_kind fork_kind;
4970 char *arg;
4971 int tempflag;
4972 int from_tty;
c906108c 4973{
c5aa993b
JM
4974 char *cond_string = NULL;
4975
c906108c 4976 ep_skip_leading_whitespace (&arg);
c5aa993b 4977
c906108c 4978 /* The allowed syntax is:
c5aa993b
JM
4979 catch [v]fork
4980 catch [v]fork if <cond>
4981
c906108c
SS
4982 First, check if there's an if clause. */
4983 cond_string = ep_parse_optional_if_clause (&arg);
c5aa993b 4984
c906108c
SS
4985 if ((*arg != '\0') && !isspace (*arg))
4986 error ("Junk at end of arguments.");
c5aa993b 4987
c906108c
SS
4988 /* If this target supports it, create a fork or vfork catchpoint
4989 and enable reporting of such events. */
c5aa993b
JM
4990 switch (fork_kind)
4991 {
4992 case catch_fork:
c906108c
SS
4993 create_fork_event_catchpoint (tempflag, cond_string);
4994 break;
c5aa993b 4995 case catch_vfork:
c906108c
SS
4996 create_vfork_event_catchpoint (tempflag, cond_string);
4997 break;
c5aa993b 4998 default:
c906108c
SS
4999 error ("unsupported or unknown fork kind; cannot catch it");
5000 break;
c5aa993b 5001 }
c906108c
SS
5002}
5003
5004static void
5005catch_exec_command_1 (arg, tempflag, from_tty)
7a292a7a
SS
5006 char *arg;
5007 int tempflag;
5008 int from_tty;
c906108c 5009{
c5aa993b 5010 char *cond_string = NULL;
c906108c
SS
5011
5012 ep_skip_leading_whitespace (&arg);
5013
5014 /* The allowed syntax is:
c5aa993b
JM
5015 catch exec
5016 catch exec if <cond>
c906108c
SS
5017
5018 First, check if there's an if clause. */
5019 cond_string = ep_parse_optional_if_clause (&arg);
5020
5021 if ((*arg != '\0') && !isspace (*arg))
5022 error ("Junk at end of arguments.");
5023
5024 /* If this target supports it, create an exec catchpoint
5025 and enable reporting of such events. */
5026 create_exec_event_catchpoint (tempflag, cond_string);
5027}
c5aa993b 5028
c906108c
SS
5029#if defined(SOLIB_ADD)
5030static void
5031catch_load_command_1 (arg, tempflag, from_tty)
c5aa993b
JM
5032 char *arg;
5033 int tempflag;
5034 int from_tty;
c906108c 5035{
c5aa993b
JM
5036 char *dll_pathname = NULL;
5037 char *cond_string = NULL;
5038
c906108c 5039 ep_skip_leading_whitespace (&arg);
c5aa993b 5040
c906108c 5041 /* The allowed syntax is:
c5aa993b
JM
5042 catch load
5043 catch load if <cond>
5044 catch load <filename>
5045 catch load <filename> if <cond>
5046
c906108c
SS
5047 The user is not allowed to specify the <filename> after an
5048 if clause.
c5aa993b 5049
c906108c 5050 We'll ignore the pathological case of a file named "if".
c5aa993b 5051
c906108c
SS
5052 First, check if there's an if clause. If so, then there
5053 cannot be a filename. */
5054 cond_string = ep_parse_optional_if_clause (&arg);
c5aa993b 5055
c906108c
SS
5056 /* If there was an if clause, then there cannot be a filename.
5057 Else, there might be a filename and an if clause. */
5058 if (cond_string == NULL)
5059 {
5060 dll_pathname = ep_parse_optional_filename (&arg);
5061 ep_skip_leading_whitespace (&arg);
5062 cond_string = ep_parse_optional_if_clause (&arg);
5063 }
c5aa993b 5064
c906108c
SS
5065 if ((*arg != '\0') && !isspace (*arg))
5066 error ("Junk at end of arguments.");
c5aa993b 5067
c906108c
SS
5068 /* Create a load breakpoint that only triggers when a load of
5069 the specified dll (or any dll, if no pathname was specified)
5070 occurs. */
5071 SOLIB_CREATE_CATCH_LOAD_HOOK (inferior_pid, tempflag, dll_pathname, cond_string);
5072}
c5aa993b 5073
c906108c
SS
5074static void
5075catch_unload_command_1 (arg, tempflag, from_tty)
c5aa993b
JM
5076 char *arg;
5077 int tempflag;
5078 int from_tty;
c906108c 5079{
c5aa993b
JM
5080 char *dll_pathname = NULL;
5081 char *cond_string = NULL;
5082
c906108c 5083 ep_skip_leading_whitespace (&arg);
c5aa993b 5084
c906108c 5085 /* The allowed syntax is:
c5aa993b
JM
5086 catch unload
5087 catch unload if <cond>
5088 catch unload <filename>
5089 catch unload <filename> if <cond>
5090
c906108c
SS
5091 The user is not allowed to specify the <filename> after an
5092 if clause.
c5aa993b 5093
c906108c 5094 We'll ignore the pathological case of a file named "if".
c5aa993b 5095
c906108c
SS
5096 First, check if there's an if clause. If so, then there
5097 cannot be a filename. */
5098 cond_string = ep_parse_optional_if_clause (&arg);
c5aa993b 5099
c906108c
SS
5100 /* If there was an if clause, then there cannot be a filename.
5101 Else, there might be a filename and an if clause. */
5102 if (cond_string == NULL)
5103 {
5104 dll_pathname = ep_parse_optional_filename (&arg);
5105 ep_skip_leading_whitespace (&arg);
5106 cond_string = ep_parse_optional_if_clause (&arg);
5107 }
c5aa993b 5108
c906108c
SS
5109 if ((*arg != '\0') && !isspace (*arg))
5110 error ("Junk at end of arguments.");
c5aa993b 5111
c906108c
SS
5112 /* Create an unload breakpoint that only triggers when an unload of
5113 the specified dll (or any dll, if no pathname was specified)
5114 occurs. */
5115 SOLIB_CREATE_CATCH_UNLOAD_HOOK (inferior_pid, tempflag, dll_pathname, cond_string);
5116}
5117#endif /* SOLIB_ADD */
5118
5119/* Commands to deal with catching exceptions. */
5120
5121/* Set a breakpoint at the specified callback routine for an
c5aa993b 5122 exception event callback */
c906108c
SS
5123
5124static void
5125create_exception_catchpoint (tempflag, cond_string, ex_event, sal)
7a292a7a
SS
5126 int tempflag;
5127 char *cond_string;
5128 enum exception_event_kind ex_event;
5129 struct symtab_and_line *sal;
c906108c 5130{
c5aa993b
JM
5131 struct breakpoint *b;
5132 int i;
5133 int thread = -1; /* All threads. */
c906108c 5134
c5aa993b 5135 if (!sal) /* no exception support? */
c906108c
SS
5136 return;
5137
5138 b = set_raw_breakpoint (*sal);
5139 set_breakpoint_count (breakpoint_count + 1);
5140 b->number = breakpoint_count;
5141 b->cond = NULL;
5142 b->cond_string = (cond_string == NULL) ? NULL : savestring (cond_string, strlen (cond_string));
5143 b->thread = thread;
5144 b->addr_string = NULL;
5145 b->enable = enabled;
5146 b->disposition = tempflag ? del : donttouch;
5147 switch (ex_event)
5148 {
c5aa993b
JM
5149 case EX_EVENT_THROW:
5150 b->type = bp_catch_throw;
5151 break;
5152 case EX_EVENT_CATCH:
5153 b->type = bp_catch_catch;
5154 break;
5155 default: /* error condition */
5156 b->type = bp_none;
5157 b->enable = disabled;
5158 error ("Internal error -- invalid catchpoint kind");
c906108c
SS
5159 }
5160 mention (b);
5161}
5162
c5aa993b 5163/* Deal with "catch catch" and "catch throw" commands */
c906108c
SS
5164
5165static void
5166catch_exception_command_1 (ex_event, arg, tempflag, from_tty)
7a292a7a
SS
5167 enum exception_event_kind ex_event;
5168 char *arg;
5169 int tempflag;
5170 int from_tty;
c906108c 5171{
c5aa993b
JM
5172 char *cond_string = NULL;
5173 struct symtab_and_line *sal = NULL;
5174
c906108c 5175 ep_skip_leading_whitespace (&arg);
c5aa993b 5176
c906108c
SS
5177 cond_string = ep_parse_optional_if_clause (&arg);
5178
5179 if ((*arg != '\0') && !isspace (*arg))
5180 error ("Junk at end of arguments.");
5181
5182 if ((ex_event != EX_EVENT_THROW) &&
5183 (ex_event != EX_EVENT_CATCH))
5184 error ("Unsupported or unknown exception event; cannot catch it");
5185
5186 /* See if we can find a callback routine */
5187 sal = target_enable_exception_callback (ex_event, 1);
5188
c5aa993b 5189 if (sal)
c906108c
SS
5190 {
5191 /* We have callbacks from the runtime system for exceptions.
c5aa993b 5192 Set a breakpoint on the sal found, if no errors */
c906108c 5193 if (sal != (struct symtab_and_line *) -1)
c5aa993b 5194 create_exception_catchpoint (tempflag, cond_string, ex_event, sal);
c906108c 5195 else
c5aa993b 5196 return; /* something went wrong with setting up callbacks */
c906108c 5197 }
c5aa993b 5198 else
c906108c
SS
5199 {
5200 /* No callbacks from runtime system for exceptions.
5201 Try GNU C++ exception breakpoints using labels in debug info. */
5202 if (ex_event == EX_EVENT_CATCH)
c5aa993b
JM
5203 {
5204 handle_gnu_4_16_catch_command (arg, tempflag, from_tty);
5205 }
c906108c 5206 else if (ex_event == EX_EVENT_THROW)
c5aa993b
JM
5207 {
5208 /* Set a breakpoint on __raise_exception () */
5209
5210 fprintf_filtered (gdb_stderr, "Unsupported with this platform/compiler combination.\n");
5211 fprintf_filtered (gdb_stderr, "Perhaps you can achieve the effect you want by setting\n");
5212 fprintf_filtered (gdb_stderr, "a breakpoint on __raise_exception().\n");
5213 }
c906108c
SS
5214 }
5215}
5216
5217/* Cover routine to allow wrapping target_enable_exception_catchpoints
5218 inside a catch_errors */
5219
5220static int
5221cover_target_enable_exception_callback (arg)
c5aa993b 5222 PTR arg;
c906108c
SS
5223{
5224 args_for_catchpoint_enable *args = arg;
5225 struct symtab_and_line *sal;
5226 sal = target_enable_exception_callback (args->kind, args->enable);
5227 if (sal == NULL)
5228 return 0;
5229 else if (sal == (struct symtab_and_line *) -1)
5230 return -1;
5231 else
c5aa993b 5232 return 1; /*is valid */
c906108c
SS
5233}
5234
5235
5236
5237/* This is the original v.4.16 and earlier version of the
5238 catch_command_1() function. Now that other flavours of "catch"
5239 have been introduced, and since exception handling can be handled
5240 in other ways (through target ops) also, this is used only for the
5241 GNU C++ exception handling system.
5242 Note: Only the "catch" flavour of GDB 4.16 is handled here. The
5243 "catch NAME" is now no longer allowed in catch_command_1(). Also,
5244 there was no code in GDB 4.16 for "catch throw".
c5aa993b 5245
c906108c
SS
5246 Called from catch_exception_command_1 () */
5247
5248
5249static void
5250handle_gnu_4_16_catch_command (arg, tempflag, from_tty)
5251 char *arg;
5252 int tempflag;
5253 int from_tty;
5254{
5255 /* First, translate ARG into something we can deal with in terms
5256 of breakpoints. */
5257
5258 struct symtabs_and_lines sals;
5259 struct symtab_and_line sal;
5260 register struct expression *cond = 0;
5261 register struct breakpoint *b;
5262 char *save_arg;
5263 int i;
5264
c5aa993b 5265 INIT_SAL (&sal); /* initialize to zeroes */
c906108c
SS
5266
5267 /* If no arg given, or if first arg is 'if ', all active catch clauses
5268 are breakpointed. */
5269
c5aa993b 5270 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
c906108c
SS
5271 && (arg[2] == ' ' || arg[2] == '\t')))
5272 {
5273 /* Grab all active catch clauses. */
5274 sals = get_catch_sals (0);
5275 }
5276 else
5277 {
5278 /* Grab selected catch clauses. */
5279 error ("catch NAME not implemented");
5280
5281#if 0
5282 /* Not sure why this code has been disabled. I'm leaving
5283 it disabled. We can never come here now anyway
5284 since we don't allow the "catch NAME" syntax.
c5aa993b 5285 pai/1997-07-11 */
c906108c
SS
5286
5287 /* This isn't used; I don't know what it was for. */
5288 sals = map_catch_names (arg, catch_breakpoint);
5289#endif
5290 }
5291
c5aa993b 5292 if (!sals.nelts)
c906108c
SS
5293 return;
5294
5295 save_arg = arg;
5296 for (i = 0; i < sals.nelts; i++)
5297 {
5298 resolve_sal_pc (&sals.sals[i]);
c5aa993b 5299
c906108c
SS
5300 while (arg && *arg)
5301 {
5302 if (arg[0] == 'i' && arg[1] == 'f'
5303 && (arg[2] == ' ' || arg[2] == '\t'))
c5aa993b 5304 cond = parse_exp_1 ((arg += 2, &arg),
c906108c
SS
5305 block_for_pc (sals.sals[i].pc), 0);
5306 else
5307 error ("Junk at end of arguments.");
5308 }
5309 arg = save_arg;
5310 }
5311
5312 for (i = 0; i < sals.nelts; i++)
5313 {
5314 sal = sals.sals[i];
5315
5316 if (from_tty)
5317 describe_other_breakpoints (sal.pc, sal.section);
5318
5319 b = set_raw_breakpoint (sal);
5320 set_breakpoint_count (breakpoint_count + 1);
5321 b->number = breakpoint_count;
c5aa993b
JM
5322 b->type = bp_breakpoint; /* Important -- this is an ordinary breakpoint.
5323 For platforms with callback support for exceptions,
5324 create_exception_catchpoint() will create special
5325 bp types (bp_catch_catch and bp_catch_throw), and
5326 there is code in insert_breakpoints() and elsewhere
5327 that depends on that. */
c906108c
SS
5328
5329 b->cond = cond;
5330 b->enable = enabled;
5331 b->disposition = tempflag ? del : donttouch;
5332
5333 mention (b);
5334 }
5335
5336 if (sals.nelts > 1)
5337 {
5338 printf_unfiltered ("Multiple breakpoints were set.\n");
5339 printf_unfiltered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
5340 }
c5aa993b 5341 free ((PTR) sals.sals);
c906108c
SS
5342}
5343
5344#if 0
5345/* This creates a temporary internal breakpoint
5346 just to placate infrun */
5347static struct breakpoint *
5348create_temp_exception_breakpoint (pc)
c5aa993b 5349 CORE_ADDR pc;
c906108c
SS
5350{
5351 struct symtab_and_line sal;
5352 struct breakpoint *b;
5353
c5aa993b 5354 INIT_SAL (&sal);
c906108c
SS
5355 sal.pc = pc;
5356 sal.symtab = NULL;
5357 sal.line = 0;
5358
5359 b = set_raw_breakpoint (sal);
5360 if (!b)
5361 error ("Internal error -- couldn't set temp exception breakpoint");
5362
5363 b->type = bp_breakpoint;
5364 b->disposition = del;
5365 b->enable = enabled;
5366 b->silent = 1;
5367 b->number = internal_breakpoint_number--;
5368 return b;
5369}
5370#endif
5371
5372static void
5373catch_command_1 (arg, tempflag, from_tty)
c5aa993b
JM
5374 char *arg;
5375 int tempflag;
5376 int from_tty;
c906108c 5377{
c5aa993b 5378
c906108c
SS
5379 /* The first argument may be an event name, such as "start" or "load".
5380 If so, then handle it as such. If it doesn't match an event name,
5381 then attempt to interpret it as an exception name. (This latter is
5382 the v4.16-and-earlier GDB meaning of the "catch" command.)
c5aa993b 5383
c906108c 5384 First, try to find the bounds of what might be an event name. */
c5aa993b
JM
5385 char *arg1_start = arg;
5386 char *arg1_end;
5387 int arg1_length;
5388
c906108c
SS
5389 if (arg1_start == NULL)
5390 {
c5aa993b 5391 /* Old behaviour was to use pre-v-4.16 syntax */
c906108c
SS
5392 /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
5393 /* return; */
c5aa993b 5394 /* Now, this is not allowed */
c906108c
SS
5395 error ("Catch requires an event name.");
5396
5397 }
5398 arg1_end = ep_find_event_name_end (arg1_start);
5399 if (arg1_end == NULL)
5400 error ("catch requires an event");
5401 arg1_length = arg1_end + 1 - arg1_start;
c5aa993b 5402
c906108c
SS
5403 /* Try to match what we found against known event names. */
5404 if (strncmp (arg1_start, "signal", arg1_length) == 0)
5405 {
5406 error ("Catch of signal not yet implemented");
5407 }
5408 else if (strncmp (arg1_start, "catch", arg1_length) == 0)
5409 {
c5aa993b 5410 catch_exception_command_1 (EX_EVENT_CATCH, arg1_end + 1, tempflag, from_tty);
c906108c
SS
5411 }
5412 else if (strncmp (arg1_start, "throw", arg1_length) == 0)
5413 {
c5aa993b 5414 catch_exception_command_1 (EX_EVENT_THROW, arg1_end + 1, tempflag, from_tty);
c906108c
SS
5415 }
5416 else if (strncmp (arg1_start, "thread_start", arg1_length) == 0)
5417 {
5418 error ("Catch of thread_start not yet implemented");
5419 }
5420 else if (strncmp (arg1_start, "thread_exit", arg1_length) == 0)
5421 {
5422 error ("Catch of thread_exit not yet implemented");
5423 }
5424 else if (strncmp (arg1_start, "thread_join", arg1_length) == 0)
5425 {
5426 error ("Catch of thread_join not yet implemented");
5427 }
5428 else if (strncmp (arg1_start, "start", arg1_length) == 0)
5429 {
5430 error ("Catch of start not yet implemented");
5431 }
5432 else if (strncmp (arg1_start, "exit", arg1_length) == 0)
5433 {
5434 error ("Catch of exit not yet implemented");
5435 }
5436 else if (strncmp (arg1_start, "fork", arg1_length) == 0)
5437 {
5438#if defined(CHILD_INSERT_FORK_CATCHPOINT)
c5aa993b 5439 catch_fork_command_1 (catch_fork, arg1_end + 1, tempflag, from_tty);
c906108c
SS
5440#else
5441 error ("Catch of fork not yet implemented");
5442#endif
5443 }
5444 else if (strncmp (arg1_start, "vfork", arg1_length) == 0)
5445 {
5446#if defined(CHILD_INSERT_VFORK_CATCHPOINT)
c5aa993b 5447 catch_fork_command_1 (catch_vfork, arg1_end + 1, tempflag, from_tty);
c906108c
SS
5448#else
5449 error ("Catch of vfork not yet implemented");
5450#endif
5451 }
5452 else if (strncmp (arg1_start, "exec", arg1_length) == 0)
5453 {
5454#if defined(CHILD_INSERT_EXEC_CATCHPOINT)
c5aa993b 5455 catch_exec_command_1 (arg1_end + 1, tempflag, from_tty);
c906108c
SS
5456#else
5457 error ("Catch of exec not yet implemented");
5458#endif
5459 }
5460 else if (strncmp (arg1_start, "load", arg1_length) == 0)
5461 {
5462#if defined(SOLIB_ADD)
c5aa993b 5463 catch_load_command_1 (arg1_end + 1, tempflag, from_tty);
c906108c
SS
5464#else
5465 error ("Catch of load not implemented");
5466#endif
5467 }
5468 else if (strncmp (arg1_start, "unload", arg1_length) == 0)
5469 {
5470#if defined(SOLIB_ADD)
c5aa993b 5471 catch_unload_command_1 (arg1_end + 1, tempflag, from_tty);
c906108c
SS
5472#else
5473 error ("Catch of load not implemented");
5474#endif
5475 }
5476 else if (strncmp (arg1_start, "stop", arg1_length) == 0)
5477 {
5478 error ("Catch of stop not yet implemented");
5479 }
c5aa993b 5480
c906108c
SS
5481 /* This doesn't appear to be an event name */
5482
5483 else
5484 {
5485 /* Pre-v.4.16 behaviour was to treat the argument
c5aa993b 5486 as the name of an exception */
c906108c 5487 /* catch_throw_command_1 (arg1_start, tempflag, from_tty); */
c5aa993b 5488 /* Now this is not allowed */
c906108c
SS
5489 error ("Unknown event kind specified for catch");
5490
5491 }
5492}
5493
5494/* Used by the gui, could be made a worker for other things. */
5495
5496struct breakpoint *
5497set_breakpoint_sal (sal)
5498 struct symtab_and_line sal;
5499{
5500 struct breakpoint *b;
5501 b = set_raw_breakpoint (sal);
5502 set_breakpoint_count (breakpoint_count + 1);
5503 b->number = breakpoint_count;
5504 b->type = bp_breakpoint;
5505 b->cond = 0;
5506 b->thread = -1;
5507 return b;
5508}
5509
5510#if 0
5511/* These aren't used; I don't know what they were for. */
5512/* Disable breakpoints on all catch clauses described in ARGS. */
5513static void
5514disable_catch (args)
5515 char *args;
5516{
5517 /* Map the disable command to catch clauses described in ARGS. */
5518}
5519
5520/* Enable breakpoints on all catch clauses described in ARGS. */
5521static void
5522enable_catch (args)
5523 char *args;
5524{
5525 /* Map the disable command to catch clauses described in ARGS. */
5526}
5527
5528/* Delete breakpoints on all catch clauses in the active scope. */
5529static void
5530delete_catch (args)
5531 char *args;
5532{
5533 /* Map the delete command to catch clauses described in ARGS. */
5534}
5535#endif /* 0 */
5536
5537static void
5538catch_command (arg, from_tty)
5539 char *arg;
5540 int from_tty;
5541{
5542 catch_command_1 (arg, 0, from_tty);
5543}
5544\f
5545
5546static void
5547tcatch_command (arg, from_tty)
5548 char *arg;
5549 int from_tty;
5550{
5551 catch_command_1 (arg, 1, from_tty);
5552}
5553
5554
5555static void
5556clear_command (arg, from_tty)
5557 char *arg;
5558 int from_tty;
5559{
5560 register struct breakpoint *b, *b1;
5561 int default_match;
5562 struct symtabs_and_lines sals;
5563 struct symtab_and_line sal;
5564 register struct breakpoint *found;
5565 int i;
5566
5567 if (arg)
5568 {
5569 sals = decode_line_spec (arg, 1);
5570 default_match = 0;
5571 }
5572 else
5573 {
c5aa993b 5574 sals.sals = (struct symtab_and_line *)
c906108c 5575 xmalloc (sizeof (struct symtab_and_line));
c5aa993b 5576 INIT_SAL (&sal); /* initialize to zeroes */
c906108c
SS
5577 sal.line = default_breakpoint_line;
5578 sal.symtab = default_breakpoint_symtab;
5579 sal.pc = default_breakpoint_address;
5580 if (sal.symtab == 0)
5581 error ("No source file specified.");
5582
5583 sals.sals[0] = sal;
5584 sals.nelts = 1;
5585
5586 default_match = 1;
5587 }
5588
5589 /* For each line spec given, delete bps which correspond
5590 to it. We do this in two loops: the first loop looks at
5591 the initial bp(s) in the chain which should be deleted,
5592 the second goes down the rest of the chain looking ahead
5593 one so it can take those bps off the chain without messing
5594 up the chain. */
5595
5596
5597 for (i = 0; i < sals.nelts; i++)
5598 {
5599 /* If exact pc given, clear bpts at that pc.
c5aa993b
JM
5600 If line given (pc == 0), clear all bpts on specified line.
5601 If defaulting, clear all bpts on default line
c906108c 5602 or at default pc.
c5aa993b
JM
5603
5604 defaulting sal.pc != 0 tests to do
5605
5606 0 1 pc
5607 1 1 pc _and_ line
5608 0 0 line
5609 1 0 <can't happen> */
c906108c
SS
5610
5611 sal = sals.sals[i];
5612 found = (struct breakpoint *) 0;
5613
5614
5615 while (breakpoint_chain
c5aa993b
JM
5616 /* Why don't we check here that this is not
5617 a watchpoint, etc., as we do below?
5618 I can't make it fail, but don't know
5619 what's stopping the failure: a watchpoint
5620 of the same address as "sal.pc" should
5621 wind up being deleted. */
5622
5623 && (((sal.pc && (breakpoint_chain->address == sal.pc)) &&
5624 (overlay_debugging == 0 ||
5625 breakpoint_chain->section == sal.section))
5626 || ((default_match || (0 == sal.pc))
5627 && breakpoint_chain->source_file != NULL
5628 && sal.symtab != NULL
5629 && STREQ (breakpoint_chain->source_file, sal.symtab->filename)
5630 && breakpoint_chain->line_number == sal.line)))
c906108c
SS
5631
5632 {
5633 b1 = breakpoint_chain;
5634 breakpoint_chain = b1->next;
5635 b1->next = found;
5636 found = b1;
5637 }
5638
5639 ALL_BREAKPOINTS (b)
5640
c5aa993b
JM
5641 while (b->next
5642 && b->next->type != bp_none
5643 && b->next->type != bp_watchpoint
5644 && b->next->type != bp_hardware_watchpoint
5645 && b->next->type != bp_read_watchpoint
5646 && b->next->type != bp_access_watchpoint
5647 && (((sal.pc && (b->next->address == sal.pc)) &&
5648 (overlay_debugging == 0 ||
5649 b->next->section == sal.section))
5650 || ((default_match || (0 == sal.pc))
5651 && b->next->source_file != NULL
5652 && sal.symtab != NULL
5653 && STREQ (b->next->source_file, sal.symtab->filename)
5654 && b->next->line_number == sal.line)))
c906108c
SS
5655
5656
c5aa993b
JM
5657 {
5658 b1 = b->next;
5659 b->next = b1->next;
5660 b1->next = found;
5661 found = b1;
5662 }
c906108c
SS
5663
5664 if (found == 0)
5665 {
5666 if (arg)
5667 error ("No breakpoint at %s.", arg);
5668 else
5669 error ("No breakpoint at this line.");
5670 }
5671
c5aa993b
JM
5672 if (found->next)
5673 from_tty = 1; /* Always report if deleted more than one */
5674 if (from_tty)
5675 printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
c906108c
SS
5676 breakpoints_changed ();
5677 while (found)
5678 {
c5aa993b
JM
5679 if (from_tty)
5680 printf_unfiltered ("%d ", found->number);
c906108c
SS
5681 b1 = found->next;
5682 delete_breakpoint (found);
5683 found = b1;
5684 }
c5aa993b
JM
5685 if (from_tty)
5686 putchar_unfiltered ('\n');
c906108c 5687 }
c5aa993b 5688 free ((PTR) sals.sals);
c906108c
SS
5689}
5690\f
5691/* Delete breakpoint in BS if they are `delete' breakpoints and
5692 all breakpoints that are marked for deletion, whether hit or not.
5693 This is called after any breakpoint is hit, or after errors. */
5694
5695void
5696breakpoint_auto_delete (bs)
5697 bpstat bs;
5698{
5699 struct breakpoint *b, *temp;
5700
5701 for (; bs; bs = bs->next)
c5aa993b 5702 if (bs->breakpoint_at && bs->breakpoint_at->disposition == del
c906108c
SS
5703 && bs->stop)
5704 delete_breakpoint (bs->breakpoint_at);
5705
5706 ALL_BREAKPOINTS_SAFE (b, temp)
c5aa993b
JM
5707 {
5708 if (b->disposition == del_at_next_stop)
5709 delete_breakpoint (b);
5710 }
c906108c
SS
5711}
5712
5713/* Delete a breakpoint and clean up all traces of it in the data structures. */
5714
5715void
5716delete_breakpoint (bpt)
5717 struct breakpoint *bpt;
5718{
5719 register struct breakpoint *b;
5720 register bpstat bs;
5721
5722 if (bpt == NULL)
5723 error ("Internal error (attempted to delete a NULL breakpoint)");
5724
5725
5726 /* Has this bp already been deleted? This can happen because multiple
5727 lists can hold pointers to bp's. bpstat lists are especial culprits.
5728
5729 One example of this happening is a watchpoint's scope bp. When the
5730 scope bp triggers, we notice that the watchpoint is out of scope, and
5731 delete it. We also delete its scope bp. But the scope bp is marked
5732 "auto-deleting", and is already on a bpstat. That bpstat is then
5733 checked for auto-deleting bp's, which are deleted.
5734
5735 A real solution to this problem might involve reference counts in bp's,
5736 and/or giving them pointers back to their referencing bpstat's, and
5737 teaching delete_breakpoint to only free a bp's storage when no more
5738 references were extent. A cheaper bandaid was chosen. */
5739 if (bpt->type == bp_none)
5740 return;
5741
5742 if (delete_breakpoint_hook)
5743 delete_breakpoint_hook (bpt);
5744
5745 if (bpt->inserted)
5746 remove_breakpoint (bpt, mark_uninserted);
c5aa993b 5747
c906108c
SS
5748 if (breakpoint_chain == bpt)
5749 breakpoint_chain = bpt->next;
5750
5751 /* If we have callback-style exception catchpoints, don't go through
5752 the adjustments to the C++ runtime library etc. if the inferior
5753 isn't actually running. target_enable_exception_callback for a
5754 null target ops vector gives an undesirable error message, so we
5755 check here and avoid it. Since currently (1997-09-17) only HP-UX aCC's
c5aa993b 5756 exceptions are supported in this way, it's OK for now. FIXME */
c906108c
SS
5757 if (ep_is_exception_catchpoint (bpt) && target_has_execution)
5758 {
5759 static char message1[] = "Error in deleting catchpoint %d:\n";
5760 static char message[sizeof (message1) + 30];
5761 args_for_catchpoint_enable args;
5762
c5aa993b 5763 sprintf (message, message1, bpt->number); /* Format possible error msg */
c906108c
SS
5764 args.kind = bpt->type == bp_catch_catch ? EX_EVENT_CATCH : EX_EVENT_THROW;
5765 args.enable = 0;
5766 catch_errors (cover_target_enable_exception_callback, &args,
5767 message, RETURN_MASK_ALL);
5768 }
5769
5770
5771 ALL_BREAKPOINTS (b)
5772 if (b->next == bpt)
c5aa993b
JM
5773 {
5774 b->next = bpt->next;
5775 break;
5776 }
c906108c
SS
5777
5778 /* Before turning off the visuals for the bp, check to see that
5779 there are no other bps at the same address. */
5780 if (tui_version)
5781 {
5782 int clearIt;
5783
5784 ALL_BREAKPOINTS (b)
c5aa993b
JM
5785 {
5786 clearIt = (b->address != bpt->address);
5787 if (!clearIt)
5788 break;
5789 }
c906108c
SS
5790
5791 if (clearIt)
c5aa993b
JM
5792 {
5793 TUIDO (((TuiOpaqueFuncPtr) tui_vAllSetHasBreakAt, bpt, 0));
5794 TUIDO (((TuiOpaqueFuncPtr) tuiUpdateAllExecInfos));
5795 }
c906108c
SS
5796 }
5797
5798 check_duplicates (bpt->address, bpt->section);
5799 /* If this breakpoint was inserted, and there is another breakpoint
5800 at the same address, we need to insert the other breakpoint. */
5801 if (bpt->inserted
5802 && bpt->type != bp_hardware_watchpoint
5803 && bpt->type != bp_read_watchpoint
5804 && bpt->type != bp_access_watchpoint
5805 && bpt->type != bp_catch_fork
5806 && bpt->type != bp_catch_vfork
5807 && bpt->type != bp_catch_exec)
5808 {
5809 ALL_BREAKPOINTS (b)
5810 if (b->address == bpt->address
5811 && b->section == bpt->section
5812 && !b->duplicate
5813 && b->enable != disabled
5814 && b->enable != shlib_disabled
5815 && b->enable != call_disabled)
c5aa993b
JM
5816 {
5817 int val;
5818 val = target_insert_breakpoint (b->address, b->shadow_contents);
5819 if (val != 0)
5820 {
5821 target_terminal_ours_for_output ();
5822 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
5823 memory_error (val, b->address); /* which bombs us out */
5824 }
5825 else
5826 b->inserted = 1;
5827 }
c906108c
SS
5828 }
5829
5830 free_command_lines (&bpt->commands);
5831 if (bpt->cond)
5832 free (bpt->cond);
5833 if (bpt->cond_string != NULL)
5834 free (bpt->cond_string);
5835 if (bpt->addr_string != NULL)
5836 free (bpt->addr_string);
5837 if (bpt->exp != NULL)
5838 free (bpt->exp);
5839 if (bpt->exp_string != NULL)
5840 free (bpt->exp_string);
5841 if (bpt->val != NULL)
5842 value_free (bpt->val);
5843 if (bpt->source_file != NULL)
5844 free (bpt->source_file);
5845 if (bpt->dll_pathname != NULL)
5846 free (bpt->dll_pathname);
5847 if (bpt->triggered_dll_pathname != NULL)
5848 free (bpt->triggered_dll_pathname);
5849 if (bpt->exec_pathname != NULL)
5850 free (bpt->exec_pathname);
5851
5852 /* Be sure no bpstat's are pointing at it after it's been freed. */
5853 /* FIXME, how can we find all bpstat's?
5854 We just check stop_bpstat for now. */
5855 for (bs = stop_bpstat; bs; bs = bs->next)
5856 if (bs->breakpoint_at == bpt)
5857 {
5858 bs->breakpoint_at = NULL;
5859
5860 /* we'd call bpstat_clear_actions, but that free's stuff and due
5861 to the multiple pointers pointing to one item with no
5862 reference counts found anywhere through out the bpstat's (how
5863 do you spell fragile?), we don't want to free things twice --
5864 better a memory leak than a corrupt malloc pool! */
5865 bs->commands = NULL;
5866 bs->old_val = NULL;
5867 }
5868 /* On the chance that someone will soon try again to delete this same
5869 bp, we mark it as deleted before freeing its storage. */
5870 bpt->type = bp_none;
5871
c5aa993b 5872 free ((PTR) bpt);
c906108c
SS
5873}
5874
5875void
5876delete_command (arg, from_tty)
5877 char *arg;
5878 int from_tty;
5879{
5880 struct breakpoint *b, *temp;
5881
5882 if (arg == 0)
5883 {
5884 int breaks_to_delete = 0;
5885
5886 /* Delete all breakpoints if no argument.
c5aa993b
JM
5887 Do not delete internal or call-dummy breakpoints, these
5888 have to be deleted with an explicit breakpoint number argument. */
5889 ALL_BREAKPOINTS (b)
5890 {
5891 if (b->type != bp_call_dummy &&
5892 b->type != bp_shlib_event &&
5893 b->number >= 0)
5894 breaks_to_delete = 1;
5895 }
c906108c
SS
5896
5897 /* Ask user only if there are some breakpoints to delete. */
5898 if (!from_tty
5899 || (breaks_to_delete && query ("Delete all breakpoints? ")))
5900 {
c5aa993b
JM
5901 ALL_BREAKPOINTS_SAFE (b, temp)
5902 {
5903 if (b->type != bp_call_dummy &&
5904 b->type != bp_shlib_event &&
5905 b->number >= 0)
5906 delete_breakpoint (b);
5907 }
c906108c
SS
5908 }
5909 }
5910 else
5911 map_breakpoint_numbers (arg, delete_breakpoint);
5912}
5913
5914/* Reset a breakpoint given it's struct breakpoint * BINT.
5915 The value we return ends up being the return value from catch_errors.
5916 Unused in this case. */
5917
5918static int
5919breakpoint_re_set_one (bint)
5920 PTR bint;
5921{
c5aa993b 5922 struct breakpoint *b = (struct breakpoint *) bint; /* get past catch_errs */
c906108c
SS
5923 struct value *mark;
5924 int i;
5925 struct symtabs_and_lines sals;
5926 char *s;
5927 enum enable save_enable;
5928
5929 switch (b->type)
5930 {
5931 case bp_none:
5932 warning ("attempted to reset apparently deleted breakpoint #%d?\n", b->number);
5933 return 0;
5934 case bp_breakpoint:
5935 case bp_hardware_breakpoint:
5936 case bp_catch_load:
5937 case bp_catch_unload:
5938 if (b->addr_string == NULL)
5939 {
5940 /* Anything without a string can't be re-set. */
5941 delete_breakpoint (b);
5942 return 0;
5943 }
5944 /* In case we have a problem, disable this breakpoint. We'll restore
c5aa993b 5945 its status if we succeed. */
c906108c
SS
5946 save_enable = b->enable;
5947 b->enable = disabled;
5948
5949 set_language (b->language);
5950 input_radix = b->input_radix;
5951 s = b->addr_string;
c5aa993b 5952 sals = decode_line_1 (&s, 1, (struct symtab *) NULL, 0, (char ***) NULL);
c906108c
SS
5953 for (i = 0; i < sals.nelts; i++)
5954 {
5955 resolve_sal_pc (&sals.sals[i]);
5956
5957 /* Reparse conditions, they might contain references to the
5958 old symtab. */
5959 if (b->cond_string != NULL)
5960 {
5961 s = b->cond_string;
5962 if (b->cond)
c5aa993b 5963 free ((PTR) b->cond);
c906108c
SS
5964 b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
5965 }
5966
c5aa993b 5967 /* We need to re-set the breakpoint if the address changes... */
c906108c 5968 if (b->address != sals.sals[i].pc
c5aa993b
JM
5969 /* ...or new and old breakpoints both have source files, and
5970 the source file name or the line number changes... */
c906108c
SS
5971 || (b->source_file != NULL
5972 && sals.sals[i].symtab != NULL
5973 && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
5974 || b->line_number != sals.sals[i].line)
c906108c 5975 )
c5aa993b
JM
5976 /* ...or we switch between having a source file and not having
5977 one. */
5978 || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
5979 )
c906108c
SS
5980 {
5981 if (b->source_file != NULL)
5982 free (b->source_file);
5983 if (sals.sals[i].symtab == NULL)
5984 b->source_file = NULL;
5985 else
5986 b->source_file =
5987 savestring (sals.sals[i].symtab->filename,
5988 strlen (sals.sals[i].symtab->filename));
5989 b->line_number = sals.sals[i].line;
5990 b->address = sals.sals[i].pc;
5991
c5aa993b
JM
5992 /* Used to check for duplicates here, but that can
5993 cause trouble, as it doesn't check for disable
5994 breakpoints. */
c906108c
SS
5995
5996 mention (b);
5997
5998 /* Might be better to do this just once per breakpoint_re_set,
c5aa993b 5999 rather than once for every breakpoint. */
c906108c
SS
6000 breakpoints_changed ();
6001 }
6002 b->section = sals.sals[i].section;
6003 b->enable = save_enable; /* Restore it, this worked. */
6004
6005
c5aa993b 6006 /* Now that this is re-enabled, check_duplicates
c906108c 6007 can be used. */
c5aa993b 6008 check_duplicates (b->address, b->section);
c906108c
SS
6009
6010 }
c5aa993b 6011 free ((PTR) sals.sals);
c906108c
SS
6012 break;
6013
6014 case bp_watchpoint:
6015 case bp_hardware_watchpoint:
6016 case bp_read_watchpoint:
6017 case bp_access_watchpoint:
6018 innermost_block = NULL;
6019 /* The issue arises of what context to evaluate this in. The same
c5aa993b
JM
6020 one as when it was set, but what does that mean when symbols have
6021 been re-read? We could save the filename and functionname, but
6022 if the context is more local than that, the best we could do would
6023 be something like how many levels deep and which index at that
6024 particular level, but that's going to be less stable than filenames
6025 or functionnames. */
c906108c
SS
6026 /* So for now, just use a global context. */
6027 if (b->exp)
c5aa993b 6028 free ((PTR) b->exp);
c906108c
SS
6029 b->exp = parse_expression (b->exp_string);
6030 b->exp_valid_block = innermost_block;
6031 mark = value_mark ();
6032 if (b->val)
6033 value_free (b->val);
6034 b->val = evaluate_expression (b->exp);
6035 release_value (b->val);
6036 if (VALUE_LAZY (b->val))
6037 value_fetch_lazy (b->val);
6038
6039 if (b->cond_string != NULL)
6040 {
6041 s = b->cond_string;
6042 if (b->cond)
c5aa993b
JM
6043 free ((PTR) b->cond);
6044 b->cond = parse_exp_1 (&s, (struct block *) 0, 0);
c906108c
SS
6045 }
6046 if (b->enable == enabled)
6047 mention (b);
6048 value_free_to_mark (mark);
6049 break;
c5aa993b
JM
6050 case bp_catch_catch:
6051 case bp_catch_throw:
c906108c 6052 break;
c5aa993b
JM
6053 /* We needn't really do anything to reset these, since the mask
6054 that requests them is unaffected by e.g., new libraries being
6055 loaded. */
c906108c
SS
6056 case bp_catch_fork:
6057 case bp_catch_vfork:
6058 case bp_catch_exec:
6059 break;
c5aa993b 6060
c906108c
SS
6061 default:
6062 printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
6063 /* fall through */
c5aa993b
JM
6064 /* Delete longjmp breakpoints, they will be reset later by
6065 breakpoint_re_set. */
c906108c
SS
6066 case bp_longjmp:
6067 case bp_longjmp_resume:
6068 delete_breakpoint (b);
6069 break;
6070
c5aa993b
JM
6071 /* This breakpoint is special, it's set up when the inferior
6072 starts and we really don't want to touch it. */
c906108c
SS
6073 case bp_shlib_event:
6074
c5aa993b
JM
6075 /* Keep temporary breakpoints, which can be encountered when we step
6076 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
6077 Otherwise these should have been blown away via the cleanup chain
6078 or by breakpoint_init_inferior when we rerun the executable. */
c906108c
SS
6079 case bp_until:
6080 case bp_finish:
6081 case bp_watchpoint_scope:
6082 case bp_call_dummy:
6083 case bp_step_resume:
6084 break;
6085 }
6086
6087 return 0;
6088}
6089
6090/* Re-set all breakpoints after symbols have been re-loaded. */
6091void
6092breakpoint_re_set ()
6093{
6094 struct breakpoint *b, *temp;
6095 enum language save_language;
6096 int save_input_radix;
6097 static char message1[] = "Error in re-setting breakpoint %d:\n";
c5aa993b
JM
6098 char message[sizeof (message1) + 30 /* slop */ ];
6099
c906108c
SS
6100 save_language = current_language->la_language;
6101 save_input_radix = input_radix;
6102 ALL_BREAKPOINTS_SAFE (b, temp)
c5aa993b
JM
6103 {
6104 sprintf (message, message1, b->number); /* Format possible error msg */
6105 catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
6106 }
c906108c
SS
6107 set_language (save_language);
6108 input_radix = save_input_radix;
6109
6110#ifdef GET_LONGJMP_TARGET
6111 create_longjmp_breakpoint ("longjmp");
6112 create_longjmp_breakpoint ("_longjmp");
6113 create_longjmp_breakpoint ("siglongjmp");
6114 create_longjmp_breakpoint ("_siglongjmp");
6115 create_longjmp_breakpoint (NULL);
6116#endif
6117
6118#if 0
6119 /* Took this out (temporarily at least), since it produces an extra
6120 blank line at startup. This messes up the gdbtests. -PB */
6121 /* Blank line to finish off all those mention() messages we just printed. */
6122 printf_filtered ("\n");
6123#endif
6124}
6125\f
6126/* Set ignore-count of breakpoint number BPTNUM to COUNT.
6127 If from_tty is nonzero, it prints a message to that effect,
6128 which ends with a period (no newline). */
6129
6130/* Reset the thread number of this breakpoint:
6131
6132 - If the breakpoint is for all threads, leave it as-is.
6133 - Else, reset it to the current thread for inferior_pid. */
6134void
6135breakpoint_re_set_thread (b)
c5aa993b 6136 struct breakpoint *b;
c906108c
SS
6137{
6138 if (b->thread != -1)
6139 {
6140 if (in_thread_list (inferior_pid))
c5aa993b 6141 b->thread = pid_to_thread_id (inferior_pid);
c906108c
SS
6142 }
6143}
6144
6145void
6146set_ignore_count (bptnum, count, from_tty)
6147 int bptnum, count, from_tty;
6148{
6149 register struct breakpoint *b;
6150
6151 if (count < 0)
6152 count = 0;
6153
6154 ALL_BREAKPOINTS (b)
6155 if (b->number == bptnum)
c5aa993b
JM
6156 {
6157 b->ignore_count = count;
6158 if (!from_tty)
c906108c 6159 return;
c5aa993b
JM
6160 else if (count == 0)
6161 printf_filtered ("Will stop next time breakpoint %d is reached.",
6162 bptnum);
6163 else if (count == 1)
6164 printf_filtered ("Will ignore next crossing of breakpoint %d.",
6165 bptnum);
6166 else
6167 printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
6168 count, bptnum);
6169 breakpoints_changed ();
6170 return;
6171 }
c906108c
SS
6172
6173 error ("No breakpoint number %d.", bptnum);
6174}
6175
6176/* Clear the ignore counts of all breakpoints. */
6177void
6178breakpoint_clear_ignore_counts ()
6179{
6180 struct breakpoint *b;
6181
6182 ALL_BREAKPOINTS (b)
6183 b->ignore_count = 0;
6184}
6185
6186/* Command to set ignore-count of breakpoint N to COUNT. */
6187
6188static void
6189ignore_command (args, from_tty)
6190 char *args;
6191 int from_tty;
6192{
6193 char *p = args;
6194 register int num;
6195
6196 if (p == 0)
6197 error_no_arg ("a breakpoint number");
c5aa993b 6198
c906108c
SS
6199 num = get_number (&p);
6200
6201 if (*p == 0)
6202 error ("Second argument (specified ignore-count) is missing.");
6203
6204 set_ignore_count (num,
6205 longest_to_int (value_as_long (parse_and_eval (p))),
6206 from_tty);
6207 printf_filtered ("\n");
6208 breakpoints_changed ();
6209}
6210\f
6211/* Call FUNCTION on each of the breakpoints
6212 whose numbers are given in ARGS. */
6213
6214static void
6215map_breakpoint_numbers (args, function)
6216 char *args;
6217 void (*function) PARAMS ((struct breakpoint *));
6218{
6219 register char *p = args;
6220 char *p1;
6221 register int num;
6222 register struct breakpoint *b;
6223
6224 if (p == 0)
6225 error_no_arg ("one or more breakpoint numbers");
6226
6227 while (*p)
6228 {
6229 p1 = p;
c5aa993b 6230
c906108c
SS
6231 num = get_number (&p1);
6232
6233 ALL_BREAKPOINTS (b)
6234 if (b->number == num)
c5aa993b
JM
6235 {
6236 struct breakpoint *related_breakpoint = b->related_breakpoint;
6237 function (b);
6238 if (related_breakpoint)
6239 function (related_breakpoint);
6240 goto win;
6241 }
c906108c
SS
6242 printf_unfiltered ("No breakpoint number %d.\n", num);
6243 win:
6244 p = p1;
6245 }
6246}
6247
6248void
6249disable_breakpoint (bpt)
6250 struct breakpoint *bpt;
6251{
6252 /* Never disable a watchpoint scope breakpoint; we want to
6253 hit them when we leave scope so we can delete both the
6254 watchpoint and its scope breakpoint at that time. */
6255 if (bpt->type == bp_watchpoint_scope)
6256 return;
6257
6258 bpt->enable = disabled;
6259
6260 check_duplicates (bpt->address, bpt->section);
6261
6262 if (modify_breakpoint_hook)
6263 modify_breakpoint_hook (bpt);
6264}
6265
6266/* ARGSUSED */
6267static void
6268disable_command (args, from_tty)
6269 char *args;
6270 int from_tty;
6271{
6272 register struct breakpoint *bpt;
6273 if (args == 0)
6274 ALL_BREAKPOINTS (bpt)
6275 switch (bpt->type)
c5aa993b
JM
6276 {
6277 case bp_none:
6278 warning ("attempted to disable apparently deleted breakpoint #%d?\n", bpt->number);
6279 continue;
6280 case bp_breakpoint:
6281 case bp_catch_load:
6282 case bp_catch_unload:
6283 case bp_catch_fork:
6284 case bp_catch_vfork:
6285 case bp_catch_exec:
6286 case bp_catch_catch:
6287 case bp_catch_throw:
6288 case bp_hardware_breakpoint:
6289 case bp_watchpoint:
6290 case bp_hardware_watchpoint:
6291 case bp_read_watchpoint:
6292 case bp_access_watchpoint:
6293 disable_breakpoint (bpt);
6294 default:
6295 continue;
6296 }
c906108c
SS
6297 else
6298 map_breakpoint_numbers (args, disable_breakpoint);
6299}
6300
6301static void
6302do_enable_breakpoint (bpt, disposition)
6303 struct breakpoint *bpt;
6304 enum bpdisp disposition;
6305{
6306 struct frame_info *save_selected_frame = NULL;
6307 int save_selected_frame_level = -1;
6308 int target_resources_ok, other_type_used;
6309 struct value *mark;
6310
6311 if (bpt->type == bp_hardware_breakpoint)
6312 {
6313 int i;
c5aa993b
JM
6314 i = hw_breakpoint_used_count ();
6315 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
6316 bp_hardware_breakpoint, i + 1, 0);
c906108c 6317 if (target_resources_ok == 0)
c5aa993b 6318 error ("No hardware breakpoint support in the target.");
c906108c 6319 else if (target_resources_ok < 0)
c5aa993b 6320 error ("Hardware breakpoints used exceeds limit.");
c906108c
SS
6321 }
6322
6323 bpt->enable = enabled;
6324 bpt->disposition = disposition;
6325 check_duplicates (bpt->address, bpt->section);
6326 breakpoints_changed ();
6327
6328 if (bpt->type == bp_watchpoint || bpt->type == bp_hardware_watchpoint ||
6329 bpt->type == bp_read_watchpoint || bpt->type == bp_access_watchpoint)
6330 {
6331 if (bpt->exp_valid_block != NULL)
6332 {
6333 struct frame_info *fr =
6334
c5aa993b
JM
6335 /* Ensure that we have the current frame. Else, this
6336 next query may pessimistically be answered as, "No,
6337 not within current scope". */
6338 get_current_frame ();
6339 fr = find_frame_addr_in_frame_chain (bpt->watchpoint_frame);
c906108c
SS
6340 if (fr == NULL)
6341 {
6342 printf_filtered ("\
6343Cannot enable watchpoint %d because the block in which its expression\n\
6344is valid is not currently in scope.\n", bpt->number);
6345 bpt->enable = disabled;
6346 return;
6347 }
6348
6349 save_selected_frame = selected_frame;
6350 save_selected_frame_level = selected_frame_level;
6351 select_frame (fr, -1);
6352 }
6353
6354 value_free (bpt->val);
6355 mark = value_mark ();
6356 bpt->val = evaluate_expression (bpt->exp);
6357 release_value (bpt->val);
6358 if (VALUE_LAZY (bpt->val))
6359 value_fetch_lazy (bpt->val);
6360
6361 if (bpt->type == bp_hardware_watchpoint ||
c5aa993b
JM
6362 bpt->type == bp_read_watchpoint ||
6363 bpt->type == bp_access_watchpoint)
6364 {
6365 int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
6366 int mem_cnt = can_use_hardware_watchpoint (bpt->val);
6367
6368 /* Hack around 'unused var' error for some targets here */
6369 (void) mem_cnt, i;
6370 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
6371 bpt->type, i + mem_cnt, other_type_used);
6372 /* we can consider of type is bp_hardware_watchpoint, convert to
6373 bp_watchpoint in the following condition */
6374 if (target_resources_ok < 0)
6375 {
6376 printf_filtered ("\
c906108c
SS
6377Cannot enable watchpoint %d because target watch resources\n\
6378have been allocated for other watchpoints.\n", bpt->number);
c5aa993b
JM
6379 bpt->enable = disabled;
6380 value_free_to_mark (mark);
6381 return;
6382 }
6383 }
c906108c
SS
6384
6385 if (save_selected_frame_level >= 0)
6386 select_and_print_frame (save_selected_frame, save_selected_frame_level);
6387 value_free_to_mark (mark);
6388 }
6389 if (modify_breakpoint_hook)
6390 modify_breakpoint_hook (bpt);
6391}
6392
6393void
6394enable_breakpoint (bpt)
6395 struct breakpoint *bpt;
6396{
6397 do_enable_breakpoint (bpt, bpt->disposition);
6398}
6399
6400/* The enable command enables the specified breakpoints (or all defined
6401 breakpoints) so they once again become (or continue to be) effective
6402 in stopping the inferior. */
6403
6404/* ARGSUSED */
6405static void
6406enable_command (args, from_tty)
6407 char *args;
6408 int from_tty;
6409{
6410 register struct breakpoint *bpt;
6411 if (args == 0)
6412 ALL_BREAKPOINTS (bpt)
6413 switch (bpt->type)
c5aa993b
JM
6414 {
6415 case bp_none:
6416 warning ("attempted to enable apparently deleted breakpoint #%d?\n", bpt->number);
6417 continue;
6418 case bp_breakpoint:
6419 case bp_catch_load:
6420 case bp_catch_unload:
6421 case bp_catch_fork:
6422 case bp_catch_vfork:
6423 case bp_catch_exec:
6424 case bp_catch_catch:
6425 case bp_catch_throw:
6426 case bp_hardware_breakpoint:
6427 case bp_watchpoint:
6428 case bp_hardware_watchpoint:
6429 case bp_read_watchpoint:
6430 case bp_access_watchpoint:
6431 enable_breakpoint (bpt);
6432 default:
6433 continue;
6434 }
c906108c
SS
6435 else
6436 map_breakpoint_numbers (args, enable_breakpoint);
6437}
6438
6439static void
6440enable_once_breakpoint (bpt)
6441 struct breakpoint *bpt;
6442{
6443 do_enable_breakpoint (bpt, disable);
6444}
6445
6446/* ARGSUSED */
6447static void
6448enable_once_command (args, from_tty)
6449 char *args;
6450 int from_tty;
6451{
6452 map_breakpoint_numbers (args, enable_once_breakpoint);
6453}
6454
6455static void
6456enable_delete_breakpoint (bpt)
6457 struct breakpoint *bpt;
6458{
6459 do_enable_breakpoint (bpt, del);
6460}
6461
6462/* ARGSUSED */
6463static void
6464enable_delete_command (args, from_tty)
6465 char *args;
6466 int from_tty;
6467{
6468 map_breakpoint_numbers (args, enable_delete_breakpoint);
6469}
6470\f
6471/* Use default_breakpoint_'s, or nothing if they aren't valid. */
6472
6473struct symtabs_and_lines
6474decode_line_spec_1 (string, funfirstline)
6475 char *string;
6476 int funfirstline;
6477{
6478 struct symtabs_and_lines sals;
6479 if (string == 0)
6480 error ("Empty line specification.");
6481 if (default_breakpoint_valid)
6482 sals = decode_line_1 (&string, funfirstline,
6483 default_breakpoint_symtab, default_breakpoint_line,
c5aa993b 6484 (char ***) NULL);
c906108c
SS
6485 else
6486 sals = decode_line_1 (&string, funfirstline,
c5aa993b 6487 (struct symtab *) NULL, 0, (char ***) NULL);
c906108c
SS
6488 if (*string)
6489 error ("Junk at end of line specification: %s", string);
6490 return sals;
6491}
6492\f
6493void
6494_initialize_breakpoint ()
6495{
6496 struct cmd_list_element *c;
6497
6498 breakpoint_chain = 0;
6499 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
6500 before a breakpoint is set. */
6501 breakpoint_count = 0;
6502
6503 add_com ("ignore", class_breakpoint, ignore_command,
6504 "Set ignore-count of breakpoint number N to COUNT.\n\
6505Usage is `ignore N COUNT'.");
6506 if (xdb_commands)
c5aa993b 6507 add_com_alias ("bc", "ignore", class_breakpoint, 1);
c906108c
SS
6508
6509 add_com ("commands", class_breakpoint, commands_command,
6510 "Set commands to be executed when a breakpoint is hit.\n\
6511Give breakpoint number as argument after \"commands\".\n\
6512With no argument, the targeted breakpoint is the last one set.\n\
6513The commands themselves follow starting on the next line.\n\
6514Type a line containing \"end\" to indicate the end of them.\n\
6515Give \"silent\" as the first line to make the breakpoint silent;\n\
6516then no output is printed when it is hit, except what the commands print.");
6517
6518 add_com ("condition", class_breakpoint, condition_command,
6519 "Specify breakpoint number N to break only if COND is true.\n\
6520Usage is `condition N COND', where N is an integer and COND is an\n\
6521expression to be evaluated whenever breakpoint N is reached. ");
6522
6523 add_com ("tbreak", class_breakpoint, tbreak_command,
6524 "Set a temporary breakpoint. Args like \"break\" command.\n\
6525Like \"break\" except the breakpoint is only temporary,\n\
6526so it will be deleted when hit. Equivalent to \"break\" followed\n\
6527by using \"enable delete\" on the breakpoint number.");
c5aa993b
JM
6528 add_com ("txbreak", class_breakpoint, tbreak_at_finish_command,
6529 "Set temporary breakpoint at procedure exit. Either there should\n\
c906108c
SS
6530be no argument or the argument must be a depth.\n");
6531
6532 add_com ("hbreak", class_breakpoint, hbreak_command,
6533 "Set a hardware assisted breakpoint. Args like \"break\" command.\n\
6534Like \"break\" except the breakpoint requires hardware support,\n\
6535some target hardware may not have this support.");
6536
6537 add_com ("thbreak", class_breakpoint, thbreak_command,
6538 "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
6539Like \"hbreak\" except the breakpoint is only temporary,\n\
6540so it will be deleted when hit.");
6541
6542 add_prefix_cmd ("enable", class_breakpoint, enable_command,
6543 "Enable some breakpoints.\n\
6544Give breakpoint numbers (separated by spaces) as arguments.\n\
6545With no subcommand, breakpoints are enabled until you command otherwise.\n\
6546This is used to cancel the effect of the \"disable\" command.\n\
6547With a subcommand you can enable temporarily.",
6548 &enablelist, "enable ", 1, &cmdlist);
6549 if (xdb_commands)
c5aa993b
JM
6550 add_com ("ab", class_breakpoint, enable_command,
6551 "Enable some breakpoints.\n\
c906108c
SS
6552Give breakpoint numbers (separated by spaces) as arguments.\n\
6553With no subcommand, breakpoints are enabled until you command otherwise.\n\
6554This is used to cancel the effect of the \"disable\" command.\n\
6555With a subcommand you can enable temporarily.");
6556
6557 add_com_alias ("en", "enable", class_breakpoint, 1);
6558
6559 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
c5aa993b 6560 "Enable some breakpoints.\n\
c906108c
SS
6561Give breakpoint numbers (separated by spaces) as arguments.\n\
6562This is used to cancel the effect of the \"disable\" command.\n\
6563May be abbreviated to simply \"enable\".\n",
c5aa993b 6564 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
c906108c
SS
6565
6566 add_cmd ("once", no_class, enable_once_command,
6567 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
6568If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
6569 &enablebreaklist);
6570
6571 add_cmd ("delete", no_class, enable_delete_command,
6572 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
6573If a breakpoint is hit while enabled in this fashion, it is deleted.",
6574 &enablebreaklist);
6575
6576 add_cmd ("delete", no_class, enable_delete_command,
6577 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
6578If a breakpoint is hit while enabled in this fashion, it is deleted.",
6579 &enablelist);
6580
6581 add_cmd ("once", no_class, enable_once_command,
6582 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
6583If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
6584 &enablelist);
6585
6586 add_prefix_cmd ("disable", class_breakpoint, disable_command,
c5aa993b 6587 "Disable some breakpoints.\n\
c906108c
SS
6588Arguments are breakpoint numbers with spaces in between.\n\
6589To disable all breakpoints, give no argument.\n\
6590A disabled breakpoint is not forgotten, but has no effect until reenabled.",
6591 &disablelist, "disable ", 1, &cmdlist);
6592 add_com_alias ("dis", "disable", class_breakpoint, 1);
6593 add_com_alias ("disa", "disable", class_breakpoint, 1);
6594 if (xdb_commands)
c5aa993b
JM
6595 add_com ("sb", class_breakpoint, disable_command,
6596 "Disable some breakpoints.\n\
c906108c
SS
6597Arguments are breakpoint numbers with spaces in between.\n\
6598To disable all breakpoints, give no argument.\n\
6599A disabled breakpoint is not forgotten, but has no effect until reenabled.");
6600
6601 add_cmd ("breakpoints", class_alias, disable_command,
6602 "Disable some breakpoints.\n\
6603Arguments are breakpoint numbers with spaces in between.\n\
6604To disable all breakpoints, give no argument.\n\
6605A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
6606This command may be abbreviated \"disable\".",
6607 &disablelist);
6608
6609 add_prefix_cmd ("delete", class_breakpoint, delete_command,
c5aa993b 6610 "Delete some breakpoints or auto-display expressions.\n\
c906108c
SS
6611Arguments are breakpoint numbers with spaces in between.\n\
6612To delete all breakpoints, give no argument.\n\
6613\n\
6614Also a prefix command for deletion of other GDB objects.\n\
6615The \"unset\" command is also an alias for \"delete\".",
6616 &deletelist, "delete ", 1, &cmdlist);
6617 add_com_alias ("d", "delete", class_breakpoint, 1);
6618 if (xdb_commands)
6619 add_com ("db", class_breakpoint, delete_command,
c5aa993b 6620 "Delete some breakpoints.\n\
c906108c
SS
6621Arguments are breakpoint numbers with spaces in between.\n\
6622To delete all breakpoints, give no argument.\n");
6623
6624 add_cmd ("breakpoints", class_alias, delete_command,
6625 "Delete some breakpoints or auto-display expressions.\n\
6626Arguments are breakpoint numbers with spaces in between.\n\
6627To delete all breakpoints, give no argument.\n\
6628This command may be abbreviated \"delete\".",
6629 &deletelist);
6630
6631 add_com ("clear", class_breakpoint, clear_command,
6632 concat ("Clear breakpoint at specified line or function.\n\
6633Argument may be line number, function name, or \"*\" and an address.\n\
6634If line number is specified, all breakpoints in that line are cleared.\n\
6635If function is specified, breakpoints at beginning of function are cleared.\n\
6636If an address is specified, breakpoints at that address are cleared.\n\n",
c5aa993b 6637 "With no argument, clears all breakpoints in the line that the selected frame\n\
c906108c
SS
6638is executing in.\n\
6639\n\
6640See also the \"delete\" command which clears breakpoints by number.", NULL));
6641
6642 add_com ("break", class_breakpoint, break_command,
6643 concat ("Set breakpoint at specified line or function.\n\
6644Argument may be line number, function name, or \"*\" and an address.\n\
6645If line number is specified, break at start of code for that line.\n\
6646If function is specified, break at start of code for that function.\n\
6647If an address is specified, break at that exact address.\n",
c5aa993b 6648 "With no arg, uses current execution address of selected stack frame.\n\
c906108c
SS
6649This is useful for breaking on return to a stack frame.\n\
6650\n\
6651Multiple breakpoints at one place are permitted, and useful if conditional.\n\
6652\n\
6653Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
6654 add_com_alias ("b", "break", class_run, 1);
6655 add_com_alias ("br", "break", class_run, 1);
6656 add_com_alias ("bre", "break", class_run, 1);
6657 add_com_alias ("brea", "break", class_run, 1);
6658
c5aa993b
JM
6659 add_com ("xbreak", class_breakpoint, break_at_finish_command,
6660 concat ("Set breakpoint at procedure exit. \n\
c906108c
SS
6661Argument may be function name, or \"*\" and an address.\n\
6662If function is specified, break at end of code for that function.\n\
6663If an address is specified, break at the end of the function that contains \n\
6664that exact address.\n",
c5aa993b 6665 "With no arg, uses current execution address of selected stack frame.\n\
c906108c
SS
6666This is useful for breaking on return to a stack frame.\n\
6667\n\
6668Multiple breakpoints at one place are permitted, and useful if conditional.\n\
6669\n\
6670Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
6671 add_com_alias ("xb", "xbreak", class_breakpoint, 1);
6672 add_com_alias ("xbr", "xbreak", class_breakpoint, 1);
6673 add_com_alias ("xbre", "xbreak", class_breakpoint, 1);
6674 add_com_alias ("xbrea", "xbreak", class_breakpoint, 1);
6675
6676 if (xdb_commands)
6677 {
6678 add_com_alias ("ba", "break", class_breakpoint, 1);
6679 add_com_alias ("bu", "ubreak", class_breakpoint, 1);
6680 add_com ("bx", class_breakpoint, break_at_finish_at_depth_command,
c5aa993b 6681 "Set breakpoint at procedure exit. Either there should\n\
c906108c
SS
6682be no argument or the argument must be a depth.\n");
6683 }
6684
6685 if (dbx_commands)
6686 {
c5aa993b
JM
6687 add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command,
6688 "Break in function/address or break at a line in the current file.",
6689 &stoplist, "stop ", 1, &cmdlist);
6690 add_cmd ("in", class_breakpoint, stopin_command,
6691 "Break in function or address.\n", &stoplist);
6692 add_cmd ("at", class_breakpoint, stopat_command,
6693 "Break at a line in the current file.\n", &stoplist);
6694 add_com ("status", class_info, breakpoints_info,
6695 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
6696The \"Type\" column indicates one of:\n\
6697\tbreakpoint - normal breakpoint\n\
6698\twatchpoint - watchpoint\n\
6699The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6700the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
6701breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
6702address and file/line number respectively.\n\n",
c5aa993b 6703 "Convenience variable \"$_\" and default examine address for \"x\"\n\
c906108c
SS
6704are set to the address of the last breakpoint listed.\n\n\
6705Convenience variable \"$bpnum\" contains the number of the last\n\
6706breakpoint set.", NULL));
6707 }
6708
6709 add_info ("breakpoints", breakpoints_info,
6710 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
6711The \"Type\" column indicates one of:\n\
6712\tbreakpoint - normal breakpoint\n\
6713\twatchpoint - watchpoint\n\
6714The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6715the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
6716breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
6717address and file/line number respectively.\n\n",
c5aa993b 6718 "Convenience variable \"$_\" and default examine address for \"x\"\n\
c906108c
SS
6719are set to the address of the last breakpoint listed.\n\n\
6720Convenience variable \"$bpnum\" contains the number of the last\n\
6721breakpoint set.", NULL));
6722
6723 if (xdb_commands)
c5aa993b
JM
6724 add_com ("lb", class_breakpoint, breakpoints_info,
6725 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
6726The \"Type\" column indicates one of:\n\
6727\tbreakpoint - normal breakpoint\n\
6728\twatchpoint - watchpoint\n\
6729The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
6730the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
6731breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
6732address and file/line number respectively.\n\n",
c5aa993b 6733 "Convenience variable \"$_\" and default examine address for \"x\"\n\
c906108c
SS
6734are set to the address of the last breakpoint listed.\n\n\
6735Convenience variable \"$bpnum\" contains the number of the last\n\
6736breakpoint set.", NULL));
6737
c906108c 6738 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
c5aa993b 6739 concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
6740The \"Type\" column indicates one of:\n\
6741\tbreakpoint - normal breakpoint\n\
6742\twatchpoint - watchpoint\n\
6743\tlongjmp - internal breakpoint used to step through longjmp()\n\
6744\tlongjmp resume - internal breakpoint at the target of longjmp()\n\
6745\tuntil - internal breakpoint used by the \"until\" command\n\
6746\tfinish - internal breakpoint used by the \"finish\" command\n",
c5aa993b 6747 "The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
c906108c
SS
6748the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
6749breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
6750address and file/line number respectively.\n\n",
c5aa993b 6751 "Convenience variable \"$_\" and default examine address for \"x\"\n\
c906108c
SS
6752are set to the address of the last breakpoint listed.\n\n\
6753Convenience variable \"$bpnum\" contains the number of the last\n\
6754breakpoint set.", NULL),
6755 &maintenanceinfolist);
6756
c906108c 6757 add_com ("catch", class_breakpoint, catch_command,
c5aa993b 6758 "Set catchpoints to catch events.\n\
c906108c
SS
6759Raised signals may be caught:\n\
6760\tcatch signal - all signals\n\
6761\tcatch signal <signame> - a particular signal\n\
6762Raised exceptions may be caught:\n\
6763\tcatch throw - all exceptions, when thrown\n\
6764\tcatch throw <exceptname> - a particular exception, when thrown\n\
6765\tcatch catch - all exceptions, when caught\n\
6766\tcatch catch <exceptname> - a particular exception, when caught\n\
6767Thread or process events may be caught:\n\
6768\tcatch thread_start - any threads, just after creation\n\
6769\tcatch thread_exit - any threads, just before expiration\n\
6770\tcatch thread_join - any threads, just after joins\n\
6771Process events may be caught:\n\
6772\tcatch start - any processes, just after creation\n\
6773\tcatch exit - any processes, just before expiration\n\
6774\tcatch fork - calls to fork()\n\
6775\tcatch vfork - calls to vfork()\n\
6776\tcatch exec - calls to exec()\n\
6777Dynamically-linked library events may be caught:\n\
6778\tcatch load - loads of any library\n\
6779\tcatch load <libname> - loads of a particular library\n\
6780\tcatch unload - unloads of any library\n\
6781\tcatch unload <libname> - unloads of a particular library\n\
6782The act of your program's execution stopping may also be caught:\n\
6783\tcatch stop\n\n\
6784C++ exceptions may be caught:\n\
6785\tcatch throw - all exceptions, when thrown\n\
6786\tcatch catch - all exceptions, when caught\n\
6787\n\
6788Do \"help set follow-fork-mode\" for info on debugging your program\n\
6789after a fork or vfork is caught.\n\n\
6790Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
c5aa993b 6791
c906108c 6792 add_com ("tcatch", class_breakpoint, tcatch_command,
c5aa993b 6793 "Set temporary catchpoints to catch events.\n\
c906108c
SS
6794Args like \"catch\" command.\n\
6795Like \"catch\" except the catchpoint is only temporary,\n\
6796so it will be deleted when hit. Equivalent to \"catch\" followed\n\
6797by using \"enable delete\" on the catchpoint number.");
c5aa993b
JM
6798
6799 add_com ("watch", class_breakpoint, watch_command,
c906108c
SS
6800
6801 "Set a watchpoint for an expression.\n\
6802A watchpoint stops execution of your program whenever the value of\n\
6803an expression changes.");
6804
6805 add_com ("rwatch", class_breakpoint, rwatch_command,
6806 "Set a read watchpoint for an expression.\n\
6807A watchpoint stops execution of your program whenever the value of\n\
6808an expression is read.");
6809
6810 add_com ("awatch", class_breakpoint, awatch_command,
6811 "Set a watchpoint for an expression.\n\
6812A watchpoint stops execution of your program whenever the value of\n\
6813an expression is either read or written.");
6814
6815 add_info ("watchpoints", breakpoints_info,
6816 "Synonym for ``info breakpoints''.");
6817
6818
6819 c = add_set_cmd ("can-use-hw-watchpoints", class_support, var_zinteger,
c5aa993b
JM
6820 (char *) &can_use_hw_watchpoints,
6821 "Set debugger's willingness to use watchpoint hardware.\n\
c906108c
SS
6822If zero, gdb will not use hardware for new watchpoints, even if\n\
6823such is available. (However, any hardware watchpoints that were\n\
6824created before setting this to nonzero, will continue to use watchpoint\n\
6825hardware.)",
c5aa993b 6826 &setlist);
c906108c
SS
6827 add_show_from_set (c, &showlist);
6828
6829 can_use_hw_watchpoints = 1;
6830}
This page took 0.354721 seconds and 4 git commands to generate.