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