Replacing a bogus file with possibly an initial version of the same.
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
CommitLineData
bd5635a1 1/* Everything about breakpoints, for GDB.
895cc8ab 2 Copyright 1986, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 1998
9f577285 3 Free Software Foundation, Inc.
bd5635a1
RP
4
5This file is part of GDB.
6
bdbd5f50 7This program is free software; you can redistribute it and/or modify
bd5635a1 8it under the terms of the GNU General Public License as published by
bdbd5f50
JG
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
bd5635a1 11
bdbd5f50 12This program is distributed in the hope that it will be useful,
bd5635a1
RP
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
bdbd5f50 18along with this program; if not, write to the Free Software
cd10c7e3 19Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
bd5635a1 20
bd5635a1 21#include "defs.h"
1eeba686 22#include <ctype.h>
bd5635a1
RP
23#include "symtab.h"
24#include "frame.h"
25#include "breakpoint.h"
30875e1c 26#include "gdbtypes.h"
bd5635a1
RP
27#include "expression.h"
28#include "gdbcore.h"
29#include "gdbcmd.h"
30#include "value.h"
bd5635a1
RP
31#include "command.h"
32#include "inferior.h"
fdfa3315 33#include "gdbthread.h"
bd5635a1 34#include "target.h"
d3b9c0df 35#include "language.h"
2b576293 36#include "gdb_string.h"
423e9664 37#include "demangle.h"
9f577285 38#include "annotate.h"
6b038bd9
DT
39#include "symfile.h"
40#include "objfiles.h"
bd5635a1 41
30875e1c
SG
42/* local function prototypes */
43
44static void
45catch_command_1 PARAMS ((char *, int, int));
46
47static void
48enable_delete_command PARAMS ((char *, int));
49
50static void
51enable_delete_breakpoint PARAMS ((struct breakpoint *));
52
53static void
54enable_once_command PARAMS ((char *, int));
55
56static void
57enable_once_breakpoint PARAMS ((struct breakpoint *));
58
59static void
60disable_command PARAMS ((char *, int));
61
30875e1c
SG
62static void
63enable_command PARAMS ((char *, int));
64
30875e1c
SG
65static void
66map_breakpoint_numbers PARAMS ((char *, void (*)(struct breakpoint *)));
67
68static void
69ignore_command PARAMS ((char *, int));
70
71static int
72breakpoint_re_set_one PARAMS ((char *));
73
895cc8ab 74void
30875e1c
SG
75delete_command PARAMS ((char *, int));
76
77static void
78clear_command PARAMS ((char *, int));
79
80static void
81catch_command PARAMS ((char *, int));
82
83static struct symtabs_and_lines
84get_catch_sals PARAMS ((int));
85
86static void
87watch_command PARAMS ((char *, int));
88
999dd04b 89static int
11054881 90can_use_hardware_watchpoint PARAMS ((struct value *));
999dd04b 91
30875e1c
SG
92static void
93tbreak_command PARAMS ((char *, int));
94
95static void
96break_command_1 PARAMS ((char *, int, int));
97
98static void
99mention PARAMS ((struct breakpoint *));
100
895cc8ab 101struct breakpoint *
30875e1c
SG
102set_raw_breakpoint PARAMS ((struct symtab_and_line));
103
104static void
6b038bd9 105check_duplicates PARAMS ((CORE_ADDR, asection *));
30875e1c
SG
106
107static void
6b038bd9 108describe_other_breakpoints PARAMS ((CORE_ADDR, asection *));
30875e1c 109
30875e1c
SG
110static void
111breakpoints_info PARAMS ((char *, int));
112
113static void
423e9664 114breakpoint_1 PARAMS ((int, int));
30875e1c
SG
115
116static bpstat
117bpstat_alloc PARAMS ((struct breakpoint *, bpstat));
118
119static int
120breakpoint_cond_eval PARAMS ((char *));
121
122static void
b607efe7 123cleanup_executing_breakpoints PARAMS ((PTR));
30875e1c
SG
124
125static void
126commands_command PARAMS ((char *, int));
127
128static void
129condition_command PARAMS ((char *, int));
130
131static int
132get_number PARAMS ((char **));
133
895cc8ab 134void
30875e1c
SG
135set_breakpoint_count PARAMS ((int));
136
999dd04b
JL
137static int
138remove_breakpoint PARAMS ((struct breakpoint *));
30875e1c 139
b607efe7
FF
140static int
141print_it_normal PARAMS ((bpstat));
142
143static int
144watchpoint_check PARAMS ((char *));
145
146static int
147print_it_done PARAMS ((bpstat));
148
149static int
150print_it_noop PARAMS ((bpstat));
151
152static void
153maintenance_info_breakpoints PARAMS ((char *, int));
154
155#ifdef GET_LONGJMP_TARGET
156static void
157create_longjmp_breakpoint PARAMS ((char *));
158#endif
159
160static int
161hw_breakpoint_used_count PARAMS ((void));
162
163static int
164hw_watchpoint_used_count PARAMS ((enum bptype, int *));
165
166static void
167hbreak_command PARAMS ((char *, int));
168
169static void
170thbreak_command PARAMS ((char *, int));
171
172static void
173watch_command_1 PARAMS ((char *, int, int));
174
175static void
176rwatch_command PARAMS ((char *, int));
177
178static void
179awatch_command PARAMS ((char *, int));
180
181static void
182do_enable_breakpoint PARAMS ((struct breakpoint *, enum bpdisp));
183
bd5635a1 184extern int addressprint; /* Print machine addresses? */
bd5635a1 185
6b038bd9
DT
186#if defined (GET_LONGJMP_TARGET) || defined (SOLIB_ADD)
187static int internal_breakpoint_number = -1;
188#endif
189
bd5635a1
RP
190/* Are we executing breakpoint commands? */
191static int executing_breakpoint_commands;
192
cba0d141
JG
193/* Walk the following statement or block through all breakpoints.
194 ALL_BREAKPOINTS_SAFE does so even if the statment deletes the current
195 breakpoint. */
196
bd5635a1
RP
197#define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
198
cba0d141
JG
199#define ALL_BREAKPOINTS_SAFE(b,tmp) \
200 for (b = breakpoint_chain; \
201 b? (tmp=b->next, 1): 0; \
202 b = tmp)
203
6b038bd9
DT
204/* True if SHIFT_INST_REGS defined, false otherwise. */
205
206int must_shift_inst_regs =
207#if defined(SHIFT_INST_REGS)
2081
209#else
2100
211#endif
212;
213
9f577285
SS
214/* True if breakpoint hit counts should be displayed in breakpoint info. */
215
216int show_breakpoint_hit_counts = 1;
217
bd5635a1
RP
218/* Chain of all breakpoints defined. */
219
e8bf33c4 220struct breakpoint *breakpoint_chain;
bd5635a1
RP
221
222/* Number of last breakpoint made. */
223
895cc8ab 224int breakpoint_count;
bd5635a1
RP
225
226/* Set breakpoint count to NUM. */
9f577285 227
895cc8ab 228void
bd5635a1
RP
229set_breakpoint_count (num)
230 int num;
231{
232 breakpoint_count = num;
233 set_internalvar (lookup_internalvar ("bpnum"),
06b6c733 234 value_from_longest (builtin_type_int, (LONGEST) num));
bd5635a1
RP
235}
236
9f577285
SS
237/* Used in run_command to zero the hit count when a new run starts. */
238
239void
240clear_breakpoint_hit_counts ()
241{
242 struct breakpoint *b;
243
244 ALL_BREAKPOINTS (b)
245 b->hit_count = 0;
246}
247
bd5635a1
RP
248/* Default address, symtab and line to put a breakpoint at
249 for "break" command with no arg.
250 if default_breakpoint_valid is zero, the other three are
251 not valid, and "break" with no arg is an error.
252
253 This set by print_stack_frame, which calls set_default_breakpoint. */
254
255int default_breakpoint_valid;
256CORE_ADDR default_breakpoint_address;
257struct symtab *default_breakpoint_symtab;
258int default_breakpoint_line;
bd5635a1
RP
259\f
260/* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
261 Advance *PP after the string and any trailing whitespace.
262
263 Currently the string can either be a number or "$" followed by the name
264 of a convenience variable. Making it an expression wouldn't work well
265 for map_breakpoint_numbers (e.g. "4 + 5 + 6"). */
266static int
267get_number (pp)
268 char **pp;
269{
270 int retval;
271 char *p = *pp;
272
273 if (p == NULL)
274 /* Empty line means refer to the last breakpoint. */
275 return breakpoint_count;
276 else if (*p == '$')
277 {
278 /* Make a copy of the name, so we can null-terminate it
279 to pass to lookup_internalvar(). */
280 char *varname;
281 char *start = ++p;
82a2edfb 282 value_ptr val;
bd5635a1
RP
283
284 while (isalnum (*p) || *p == '_')
285 p++;
286 varname = (char *) alloca (p - start + 1);
287 strncpy (varname, start, p - start);
288 varname[p - start] = '\0';
289 val = value_of_internalvar (lookup_internalvar (varname));
290 if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
291 error (
292"Convenience variables used to specify breakpoints must have integer values."
293 );
294 retval = (int) value_as_long (val);
295 }
296 else
297 {
80ba48f5
SG
298 if (*p == '-')
299 ++p;
bd5635a1
RP
300 while (*p >= '0' && *p <= '9')
301 ++p;
302 if (p == *pp)
303 /* There is no number here. (e.g. "cond a == b"). */
304 error_no_arg ("breakpoint number");
305 retval = atoi (*pp);
306 }
307 if (!(isspace (*p) || *p == '\0'))
308 error ("breakpoint number expected");
309 while (isspace (*p))
310 p++;
311 *pp = p;
312 return retval;
313}
314\f
315/* condition N EXP -- set break condition of breakpoint N to EXP. */
316
317static void
318condition_command (arg, from_tty)
319 char *arg;
320 int from_tty;
321{
322 register struct breakpoint *b;
323 char *p;
324 register int bnum;
325
326 if (arg == 0)
327 error_no_arg ("breakpoint number");
328
329 p = arg;
330 bnum = get_number (&p);
331
332 ALL_BREAKPOINTS (b)
333 if (b->number == bnum)
334 {
335 if (b->cond)
336 {
c8950965 337 free ((PTR)b->cond);
bd5635a1
RP
338 b->cond = 0;
339 }
340 if (b->cond_string != NULL)
c8950965 341 free ((PTR)b->cond_string);
bd5635a1
RP
342
343 if (*p == 0)
344 {
345 b->cond = 0;
346 b->cond_string = NULL;
347 if (from_tty)
423e9664 348 printf_filtered ("Breakpoint %d now unconditional.\n", bnum);
bd5635a1
RP
349 }
350 else
351 {
352 arg = p;
353 /* I don't know if it matters whether this is the string the user
354 typed in or the decompiled expression. */
355 b->cond_string = savestring (arg, strlen (arg));
d3b9c0df 356 b->cond = parse_exp_1 (&arg, block_for_pc (b->address), 0);
bd5635a1
RP
357 if (*arg)
358 error ("Junk at end of expression");
359 }
16726dd1 360 breakpoints_changed ();
bd5635a1
RP
361 return;
362 }
363
364 error ("No breakpoint number %d.", bnum);
365}
366
bdbd5f50 367/* ARGSUSED */
bd5635a1
RP
368static void
369commands_command (arg, from_tty)
370 char *arg;
371 int from_tty;
372{
373 register struct breakpoint *b;
374 char *p;
375 register int bnum;
376 struct command_line *l;
377
378 /* If we allowed this, we would have problems with when to
379 free the storage, if we change the commands currently
380 being read from. */
381
382 if (executing_breakpoint_commands)
383 error ("Can't use the \"commands\" command among a breakpoint's commands.");
384
385 p = arg;
386 bnum = get_number (&p);
387 if (p && *p)
388 error ("Unexpected extra arguments following breakpoint number.");
389
390 ALL_BREAKPOINTS (b)
391 if (b->number == bnum)
392 {
41756e56
FF
393 char tmpbuf[128];
394 sprintf (tmpbuf, "Type commands for when breakpoint %d is hit, one per line.", bnum);
395 l = read_command_lines (tmpbuf, from_tty);
bd5635a1
RP
396 free_command_lines (&b->commands);
397 b->commands = l;
6c803036 398 breakpoints_changed ();
bd5635a1
RP
399 return;
400 }
401 error ("No breakpoint number %d.", bnum);
402}
403\f
31ef19fc
JK
404extern int memory_breakpoint_size; /* from mem-break.c */
405
406/* Like target_read_memory() but if breakpoints are inserted, return
30875e1c
SG
407 the shadow contents instead of the breakpoints themselves.
408
409 Read "memory data" from whatever target or inferior we have.
410 Returns zero if successful, errno value if not. EIO is used
411 for address out of bounds. If breakpoints are inserted, returns
412 shadow contents, not the breakpoints themselves. From breakpoint.c. */
413
31ef19fc
JK
414int
415read_memory_nobpt (memaddr, myaddr, len)
416 CORE_ADDR memaddr;
417 char *myaddr;
418 unsigned len;
419{
420 int status;
421 struct breakpoint *b;
422
423 if (memory_breakpoint_size < 0)
5af4f5f6
JK
424 /* No breakpoints on this machine. FIXME: This should be
425 dependent on the debugging target. Probably want
426 target_insert_breakpoint to return a size, saying how many
427 bytes of the shadow contents are used, or perhaps have
428 something like target_xfer_shadow. */
31ef19fc
JK
429 return target_read_memory (memaddr, myaddr, len);
430
431 ALL_BREAKPOINTS (b)
432 {
999dd04b
JL
433 if (b->type == bp_watchpoint
434 || b->type == bp_hardware_watchpoint
11054881
KH
435 || b->type == bp_read_watchpoint
436 || b->type == bp_access_watchpoint
999dd04b 437 || !b->inserted)
31ef19fc
JK
438 continue;
439 else if (b->address + memory_breakpoint_size <= memaddr)
440 /* The breakpoint is entirely before the chunk of memory
441 we are reading. */
442 continue;
443 else if (b->address >= memaddr + len)
444 /* The breakpoint is entirely after the chunk of memory we
445 are reading. */
446 continue;
447 else
448 {
449 /* Copy the breakpoint from the shadow contents, and recurse
450 for the things before and after. */
451
452 /* Addresses and length of the part of the breakpoint that
453 we need to copy. */
454 CORE_ADDR membpt = b->address;
455 unsigned int bptlen = memory_breakpoint_size;
456 /* Offset within shadow_contents. */
457 int bptoffset = 0;
458
459 if (membpt < memaddr)
460 {
461 /* Only copy the second part of the breakpoint. */
462 bptlen -= memaddr - membpt;
463 bptoffset = memaddr - membpt;
464 membpt = memaddr;
465 }
466
467 if (membpt + bptlen > memaddr + len)
468 {
469 /* Only copy the first part of the breakpoint. */
470 bptlen -= (membpt + bptlen) - (memaddr + len);
471 }
472
4ed3a9ea
FF
473 memcpy (myaddr + membpt - memaddr,
474 b->shadow_contents + bptoffset, bptlen);
31ef19fc
JK
475
476 if (membpt > memaddr)
477 {
478 /* Copy the section of memory before the breakpoint. */
479 status = read_memory_nobpt (memaddr, myaddr, membpt - memaddr);
480 if (status != 0)
481 return status;
482 }
483
484 if (membpt + bptlen < memaddr + len)
485 {
486 /* Copy the section of memory after the breakpoint. */
487 status = read_memory_nobpt
488 (membpt + bptlen,
489 myaddr + membpt + bptlen - memaddr,
490 memaddr + len - (membpt + bptlen));
491 if (status != 0)
492 return status;
493 }
494 return 0;
495 }
496 }
497 /* Nothing overlaps. Just call read_memory_noerr. */
498 return target_read_memory (memaddr, myaddr, len);
499}
500\f
bd5635a1
RP
501/* insert_breakpoints is used when starting or continuing the program.
502 remove_breakpoints is used when the program stops.
503 Both return zero if successful,
504 or an `errno' value if could not write the inferior. */
505
506int
507insert_breakpoints ()
508{
fa3764e2 509 register struct breakpoint *b, *temp;
bd5635a1
RP
510 int val = 0;
511 int disabled_breaks = 0;
512
fa3764e2 513 ALL_BREAKPOINTS_SAFE (b, temp)
30875e1c 514 if (b->type != bp_watchpoint
999dd04b 515 && b->type != bp_hardware_watchpoint
11054881
KH
516 && b->type != bp_read_watchpoint
517 && b->type != bp_access_watchpoint
bd5635a1 518 && b->enable != disabled
fa3764e2 519 && b->enable != shlib_disabled
bd5635a1
RP
520 && ! b->inserted
521 && ! b->duplicate)
522 {
11054881
KH
523 if (b->type == bp_hardware_breakpoint)
524 val = target_insert_hw_breakpoint(b->address, b->shadow_contents);
525 else
6b038bd9
DT
526 {
527 /* Check to see if breakpoint is in an overlay section;
528 if so, we should set the breakpoint at the LMA address.
529 Only if the section is currently mapped should we ALSO
530 set a break at the VMA address. */
531 if (overlay_debugging && b->section &&
532 section_is_overlay (b->section))
533 {
534 CORE_ADDR addr;
535
536 addr = overlay_unmapped_address (b->address, b->section);
537 val = target_insert_breakpoint (addr, b->shadow_contents);
538 /* This would be the time to check val, to see if the
539 breakpoint write to the load address succeeded.
540 However, this might be an ordinary occurrance, eg. if
541 the unmapped overlay is in ROM. */
542 val = 0; /* in case unmapped address failed */
543 if (section_is_mapped (b->section))
544 val = target_insert_breakpoint (b->address,
545 b->shadow_contents);
546 }
547 else /* ordinary (non-overlay) address */
548 val = target_insert_breakpoint(b->address, b->shadow_contents);
549 }
bd5635a1
RP
550 if (val)
551 {
552 /* Can't set the breakpoint. */
553#if defined (DISABLE_UNSETTABLE_BREAK)
554 if (DISABLE_UNSETTABLE_BREAK (b->address))
555 {
556 val = 0;
fa3764e2 557 b->enable = shlib_disabled;
bd5635a1
RP
558 if (!disabled_breaks)
559 {
05052b63 560 target_terminal_ours_for_output ();
199b2450 561 fprintf_unfiltered (gdb_stderr,
2d313932 562 "Cannot insert breakpoint %d:\n", b->number);
fa3764e2 563 printf_filtered ("Temporarily disabling shared library breakpoints:\n");
bd5635a1
RP
564 }
565 disabled_breaks = 1;
566 printf_filtered ("%d ", b->number);
567 }
568 else
569#endif
570 {
05052b63 571 target_terminal_ours_for_output ();
199b2450 572 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
d3b9c0df 573#ifdef ONE_PROCESS_WRITETEXT
199b2450 574 fprintf_unfiltered (gdb_stderr,
2d313932 575 "The same program may be running in another process.\n");
d3b9c0df 576#endif
bd5635a1
RP
577 memory_error (val, b->address); /* which bombs us out */
578 }
579 }
580 else
581 b->inserted = 1;
582 }
11054881
KH
583 else if ((b->type == bp_hardware_watchpoint ||
584 b->type == bp_read_watchpoint ||
585 b->type == bp_access_watchpoint)
999dd04b
JL
586 && b->enable == enabled
587 && ! b->inserted
588 && ! b->duplicate)
589 {
706dc3ce 590 struct frame_info *saved_frame;
999dd04b
JL
591 int saved_level, within_current_scope;
592 value_ptr mark = value_mark ();
593 value_ptr v;
594
595 /* Save the current frame and level so we can restore it after
596 evaluating the watchpoint expression on its own frame. */
597 saved_frame = selected_frame;
598 saved_level = selected_frame_level;
599
600 /* Determine if the watchpoint is within scope. */
601 if (b->exp_valid_block == NULL)
602 within_current_scope = 1;
603 else
604 {
6b038bd9
DT
605 struct frame_info *fi;
606
607 /* There might be no current frame at this moment if we are
608 resuming from a step over a breakpoint.
609 Set up current frame before trying to find the watchpoint
610 frame. */
611 get_current_frame ();
612 fi = find_frame_addr_in_frame_chain (b->watchpoint_frame);
706dc3ce 613 within_current_scope = (fi != NULL);
999dd04b 614 if (within_current_scope)
706dc3ce 615 select_frame (fi, -1);
999dd04b
JL
616 }
617
618 if (within_current_scope)
619 {
620 /* Evaluate the expression and cut the chain of values
621 produced off from the value chain. */
622 v = evaluate_expression (b->exp);
623 value_release_to_mark (mark);
624
625 b->val_chain = v;
626 b->inserted = 1;
627
628 /* Look at each value on the value chain. */
629 for ( ; v; v=v->next)
630 {
631 /* If it's a memory location, then we must watch it. */
632 if (v->lval == lval_memory)
633 {
11054881 634 int addr, len, type;
999dd04b
JL
635
636 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
637 len = TYPE_LENGTH (VALUE_TYPE (v));
11054881
KH
638 type = 0;
639 if (b->type == bp_read_watchpoint)
640 type = 1;
641 else if (b->type == bp_access_watchpoint)
642 type = 2;
643
644 val = target_insert_watchpoint (addr, len, type);
999dd04b
JL
645 if (val == -1)
646 {
647 b->inserted = 0;
648 break;
649 }
650 val = 0;
651 }
652 }
653 /* Failure to insert a watchpoint on any memory value in the
654 value chain brings us here. */
655 if (!b->inserted)
656 warning ("Hardware watchpoint %d: Could not insert watchpoint\n",
657 b->number);
658 }
659 else
660 {
661 printf_filtered ("\
662Hardware watchpoint %d deleted because the program has left the block in\n\
663which its expression is valid.\n", b->number);
664 if (b->related_breakpoint)
6b038bd9 665 b->related_breakpoint->disposition = del_at_next_stop;
e51481f9 666 b->disposition = del_at_next_stop;
999dd04b
JL
667 }
668
669 /* Restore the frame and level. */
670 select_frame (saved_frame, saved_level);
671 }
bd5635a1
RP
672 if (disabled_breaks)
673 printf_filtered ("\n");
674 return val;
675}
676
999dd04b 677
bd5635a1
RP
678int
679remove_breakpoints ()
680{
681 register struct breakpoint *b;
682 int val;
683
bd5635a1 684 ALL_BREAKPOINTS (b)
999dd04b
JL
685 {
686 if (b->inserted)
687 {
688 val = remove_breakpoint (b);
689 if (val != 0)
690 return val;
691 }
692 }
693 return 0;
694}
bd5635a1 695
999dd04b
JL
696
697static int
698remove_breakpoint (b)
699 struct breakpoint *b;
700{
701 int val;
702
703 if (b->type != bp_watchpoint
11054881
KH
704 && b->type != bp_hardware_watchpoint
705 && b->type != bp_read_watchpoint
706 && b->type != bp_access_watchpoint)
999dd04b 707 {
11054881
KH
708 if (b->type == bp_hardware_breakpoint)
709 val = target_remove_hw_breakpoint(b->address, b->shadow_contents);
710 else
6b038bd9
DT
711 {
712 /* Check to see if breakpoint is in an overlay section;
713 if so, we should remove the breakpoint at the LMA address.
714 If that is not equal to the raw address, then we should
715 presumable remove the breakpoint there as well. */
716 if (overlay_debugging && b->section &&
717 section_is_overlay (b->section))
718 {
719 CORE_ADDR addr;
720
721 addr = overlay_unmapped_address (b->address, b->section);
722 val = target_remove_breakpoint (addr, b->shadow_contents);
723 /* This would be the time to check val, to see if the
724 shadow breakpoint write to the load address succeeded.
725 However, this might be an ordinary occurrance, eg. if
726 the unmapped overlay is in ROM. */
727 val = 0; /* in case unmapped address failed */
728 if (section_is_mapped (b->section))
729 val = target_remove_breakpoint (b->address,
730 b->shadow_contents);
731 }
732 else /* ordinary (non-overlay) address */
733 val = target_remove_breakpoint(b->address, b->shadow_contents);
734 }
999dd04b
JL
735 if (val)
736 return val;
737 b->inserted = 0;
738 }
11054881
KH
739 else if ((b->type == bp_hardware_watchpoint ||
740 b->type == bp_read_watchpoint ||
741 b->type == bp_access_watchpoint)
999dd04b
JL
742 && b->enable == enabled
743 && ! b->duplicate)
744 {
745 value_ptr v, n;
746
747 b->inserted = 0;
748 /* Walk down the saved value chain. */
749 for (v = b->val_chain; v; v = v->next)
750 {
751 /* For each memory reference remove the watchpoint
752 at that address. */
753 if (v->lval == lval_memory)
754 {
6b038bd9 755 int addr, len, type;
999dd04b
JL
756
757 addr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
758 len = TYPE_LENGTH (VALUE_TYPE (v));
6b038bd9
DT
759 type = 0;
760 if (b->type == bp_read_watchpoint)
761 type = 1;
762 else if (b->type == bp_access_watchpoint)
763 type = 2;
764
765 val = target_remove_watchpoint (addr, len, type);
999dd04b
JL
766 if (val == -1)
767 b->inserted = 1;
768 val = 0;
769 }
770 }
771 /* Failure to remove any of the hardware watchpoints comes here. */
772 if (b->inserted)
0fe1522a
SG
773 warning ("Hardware watchpoint %d: Could not remove watchpoint\n",
774 b->number);
999dd04b
JL
775
776 /* Free the saved value chain. We will construct a new one
777 the next time the watchpoint is inserted. */
778 for (v = b->val_chain; v; v = n)
779 {
780 n = v->next;
781 value_free (v);
782 }
783 b->val_chain = NULL;
784 }
bd5635a1
RP
785 return 0;
786}
787
cf3e377e 788/* Clear the "inserted" flag in all breakpoints. */
bd5635a1
RP
789
790void
791mark_breakpoints_out ()
792{
793 register struct breakpoint *b;
794
795 ALL_BREAKPOINTS (b)
796 b->inserted = 0;
797}
798
cf3e377e
JK
799/* Clear the "inserted" flag in all breakpoints and delete any breakpoints
800 which should go away between runs of the program. */
801
802void
803breakpoint_init_inferior ()
804{
805 register struct breakpoint *b, *temp;
806
807 ALL_BREAKPOINTS_SAFE (b, temp)
808 {
809 b->inserted = 0;
810
e51481f9
JL
811 switch (b->type)
812 {
813 case bp_call_dummy:
814 case bp_watchpoint_scope:
999dd04b 815
e51481f9
JL
816 /* If the call dummy breakpoint is at the entry point it will
817 cause problems when the inferior is rerun, so we better
818 get rid of it.
999dd04b 819
e51481f9
JL
820 Also get rid of scope breakpoints. */
821 delete_breakpoint (b);
822 break;
823
824 case bp_watchpoint:
825 case bp_hardware_watchpoint:
826 case bp_read_watchpoint:
827 case bp_access_watchpoint:
828
829 /* Likewise for watchpoints on local expressions. */
830 if (b->exp_valid_block != NULL)
831 delete_breakpoint (b);
832 break;
833
834 default:
835 break;
836 }
cf3e377e
JK
837 }
838}
839
bd5635a1
RP
840/* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
841 When continuing from a location with a breakpoint,
842 we actually single step once before calling insert_breakpoints. */
843
844int
845breakpoint_here_p (pc)
846 CORE_ADDR pc;
847{
848 register struct breakpoint *b;
849
850 ALL_BREAKPOINTS (b)
6b038bd9
DT
851 if (b->enable == enabled
852 && b->address == pc) /* bp is enabled and matches pc */
ad3b8c4a
JM
853 {
854 if (overlay_debugging &&
855 section_is_overlay (b->section) &&
856 !section_is_mapped (b->section))
857 continue; /* unmapped overlay -- can't be a match */
858 else
859 return 1;
860 }
6b038bd9
DT
861
862 return 0;
863}
864
865/* breakpoint_inserted_here_p (PC) is just like breakpoint_here_p(), but it
866 only returns true if there is actually a breakpoint inserted at PC. */
867
868int
869breakpoint_inserted_here_p (pc)
870 CORE_ADDR pc;
871{
872 register struct breakpoint *b;
873
874 ALL_BREAKPOINTS (b)
875 if (b->inserted
876 && b->address == pc) /* bp is inserted and matches pc */
ad3b8c4a
JM
877 {
878 if (overlay_debugging &&
879 section_is_overlay (b->section) &&
880 !section_is_mapped (b->section))
881 continue; /* unmapped overlay -- can't be a match */
882 else
883 return 1;
884 }
bd5635a1
RP
885
886 return 0;
887}
199b2450 888
05052b63
JK
889/* Return nonzero if FRAME is a dummy frame. We can't use PC_IN_CALL_DUMMY
890 because figuring out the saved SP would take too much time, at least using
891 get_saved_register on the 68k. This means that for this function to
892 work right a port must use the bp_call_dummy breakpoint. */
893
894int
895frame_in_dummy (frame)
706dc3ce 896 struct frame_info *frame;
05052b63 897{
6b038bd9
DT
898#ifdef CALL_DUMMY
899#ifdef USE_GENERIC_DUMMY_FRAMES
900 return generic_pc_in_call_dummy (frame->pc, frame->frame);
901#else
05052b63
JK
902 struct breakpoint *b;
903
904 ALL_BREAKPOINTS (b)
905 {
6b038bd9 906 static ULONGEST dummy[] = CALL_DUMMY;
d7e7e851 907
05052b63 908 if (b->type == bp_call_dummy
d7e7e851
JK
909 && b->frame == frame->frame
910
911 /* We need to check the PC as well as the frame on the sparc,
912 for signals.exp in the testsuite. */
913 && (frame->pc
914 >= (b->address
915 - sizeof (dummy) / sizeof (LONGEST) * REGISTER_SIZE))
916 && frame->pc <= b->address)
05052b63
JK
917 return 1;
918 }
6b038bd9 919#endif /* GENERIC_DUMMY_FRAMES */
d7e7e851 920#endif /* CALL_DUMMY */
05052b63
JK
921 return 0;
922}
923
199b2450
TL
924/* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
925 is valid for process/thread PID. */
926
927int
928breakpoint_thread_match (pc, pid)
929 CORE_ADDR pc;
930 int pid;
931{
932 struct breakpoint *b;
933 int thread;
934
935 thread = pid_to_thread_id (pid);
936
937 ALL_BREAKPOINTS (b)
938 if (b->enable != disabled
fa3764e2 939 && b->enable != shlib_disabled
199b2450
TL
940 && b->address == pc
941 && (b->thread == -1 || b->thread == thread))
ad3b8c4a
JM
942 {
943 if (overlay_debugging &&
944 section_is_overlay (b->section) &&
945 !section_is_mapped (b->section))
946 continue; /* unmapped overlay -- can't be a match */
947 else
948 return 1;
949 }
199b2450
TL
950
951 return 0;
952}
953
bd5635a1
RP
954\f
955/* bpstat stuff. External routines' interfaces are documented
956 in breakpoint.h. */
30875e1c
SG
957
958/* Clear a bpstat so that it says we are not at any breakpoint.
959 Also free any storage that is part of a bpstat. */
960
bd5635a1
RP
961void
962bpstat_clear (bsp)
963 bpstat *bsp;
964{
965 bpstat p;
966 bpstat q;
967
968 if (bsp == 0)
969 return;
970 p = *bsp;
971 while (p != NULL)
972 {
973 q = p->next;
974 if (p->old_val != NULL)
975 value_free (p->old_val);
c8950965 976 free ((PTR)p);
bd5635a1
RP
977 p = q;
978 }
979 *bsp = NULL;
980}
981
30875e1c
SG
982/* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
983 is part of the bpstat is copied as well. */
984
bd5635a1
RP
985bpstat
986bpstat_copy (bs)
987 bpstat bs;
988{
989 bpstat p = NULL;
990 bpstat tmp;
fee933f1 991 bpstat retval = NULL;
bd5635a1
RP
992
993 if (bs == NULL)
994 return bs;
995
996 for (; bs != NULL; bs = bs->next)
997 {
998 tmp = (bpstat) xmalloc (sizeof (*tmp));
4ed3a9ea 999 memcpy (tmp, bs, sizeof (*tmp));
bd5635a1
RP
1000 if (p == NULL)
1001 /* This is the first thing in the chain. */
1002 retval = tmp;
1003 else
1004 p->next = tmp;
1005 p = tmp;
1006 }
1007 p->next = NULL;
1008 return retval;
1009}
1010
30875e1c
SG
1011/* Find the bpstat associated with this breakpoint */
1012
1013bpstat
1014bpstat_find_breakpoint(bsp, breakpoint)
1015 bpstat bsp;
1016 struct breakpoint *breakpoint;
1017{
1018 if (bsp == NULL) return NULL;
1019
1020 for (;bsp != NULL; bsp = bsp->next) {
1021 if (bsp->breakpoint_at == breakpoint) return bsp;
1022 }
1023 return NULL;
1024}
1025
1026/* Return the breakpoint number of the first breakpoint we are stopped
1027 at. *BSP upon return is a bpstat which points to the remaining
1028 breakpoints stopped at (but which is not guaranteed to be good for
1029 anything but further calls to bpstat_num).
1030 Return 0 if passed a bpstat which does not indicate any breakpoints. */
1031
bd5635a1
RP
1032int
1033bpstat_num (bsp)
1034 bpstat *bsp;
1035{
1036 struct breakpoint *b;
1037
1038 if ((*bsp) == NULL)
1039 return 0; /* No more breakpoint values */
1040 else
1041 {
1042 b = (*bsp)->breakpoint_at;
1043 *bsp = (*bsp)->next;
1044 if (b == NULL)
1045 return -1; /* breakpoint that's been deleted since */
1046 else
1047 return b->number; /* We have its number */
1048 }
1049}
1050
30875e1c
SG
1051/* Modify BS so that the actions will not be performed. */
1052
bd5635a1
RP
1053void
1054bpstat_clear_actions (bs)
1055 bpstat bs;
1056{
1057 for (; bs != NULL; bs = bs->next)
1058 {
1059 bs->commands = NULL;
1060 if (bs->old_val != NULL)
1061 {
1062 value_free (bs->old_val);
1063 bs->old_val = NULL;
1064 }
1065 }
1066}
1067
bdbd5f50
JG
1068/* Stub for cleaning up our state if we error-out of a breakpoint command */
1069/* ARGSUSED */
1070static void
1071cleanup_executing_breakpoints (ignore)
b607efe7 1072 PTR ignore;
bdbd5f50
JG
1073{
1074 executing_breakpoint_commands = 0;
1075}
1076
bd5635a1
RP
1077/* Execute all the commands associated with all the breakpoints at this
1078 location. Any of these commands could cause the process to proceed
1079 beyond this point, etc. We look out for such changes by checking
1080 the global "breakpoint_proceeded" after each command. */
30875e1c 1081
bd5635a1
RP
1082void
1083bpstat_do_actions (bsp)
1084 bpstat *bsp;
1085{
1086 bpstat bs;
bdbd5f50 1087 struct cleanup *old_chain;
e8bf33c4 1088 struct command_line *cmd;
bdbd5f50 1089
647e52ea
SG
1090 /* Avoid endless recursion if a `source' command is contained
1091 in bs->commands. */
1092 if (executing_breakpoint_commands)
1093 return;
1094
bdbd5f50
JG
1095 executing_breakpoint_commands = 1;
1096 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
bd5635a1
RP
1097
1098top:
1099 bs = *bsp;
1100
bd5635a1
RP
1101 breakpoint_proceeded = 0;
1102 for (; bs != NULL; bs = bs->next)
1103 {
e8bf33c4
JK
1104 cmd = bs->commands;
1105 while (cmd != NULL)
bd5635a1 1106 {
0f8cdd9b 1107 execute_control_command (cmd);
e8bf33c4 1108 cmd = cmd->next;
bd5635a1 1109 }
e8bf33c4
JK
1110 if (breakpoint_proceeded)
1111 /* The inferior is proceeded by the command; bomb out now.
1112 The bpstat chain has been blown away by wait_for_inferior.
1113 But since execution has stopped again, there is a new bpstat
1114 to look at, so start over. */
1115 goto top;
1116 else
1117 bs->commands = NULL;
bd5635a1 1118 }
bd5635a1
RP
1119
1120 executing_breakpoint_commands = 0;
bdbd5f50 1121 discard_cleanups (old_chain);
bd5635a1
RP
1122}
1123
8af68e4e
JK
1124/* This is the normal print_it function for a bpstat. In the future,
1125 much of this logic could (should?) be moved to bpstat_stop_status,
1126 by having it set different print_it functions. */
30875e1c 1127
8af68e4e
JK
1128static int
1129print_it_normal (bs)
bd5635a1
RP
1130 bpstat bs;
1131{
1132 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
1133 which has since been deleted. */
8af68e4e 1134 if (bs->breakpoint_at == NULL
30875e1c 1135 || (bs->breakpoint_at->type != bp_breakpoint
11054881 1136 && bs->breakpoint_at->type != bp_hardware_breakpoint
999dd04b 1137 && bs->breakpoint_at->type != bp_watchpoint
11054881
KH
1138 && bs->breakpoint_at->type != bp_read_watchpoint
1139 && bs->breakpoint_at->type != bp_access_watchpoint
999dd04b 1140 && bs->breakpoint_at->type != bp_hardware_watchpoint))
bd5635a1 1141 return 0;
bd5635a1 1142
11054881
KH
1143 if (bs->breakpoint_at->type == bp_breakpoint ||
1144 bs->breakpoint_at->type == bp_hardware_breakpoint)
bd5635a1
RP
1145 {
1146 /* I think the user probably only wants to see one breakpoint
1147 number, not all of them. */
f2d9c058 1148 annotate_breakpoint (bs->breakpoint_at->number);
bd5635a1
RP
1149 printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
1150 return 0;
1151 }
11054881
KH
1152 else if ((bs->old_val != NULL) &&
1153 (bs->breakpoint_at->type == bp_watchpoint ||
1154 bs->breakpoint_at->type == bp_access_watchpoint ||
1155 bs->breakpoint_at->type == bp_hardware_watchpoint))
bd5635a1 1156 {
f2d9c058 1157 annotate_watchpoint (bs->breakpoint_at->number);
11054881 1158 mention (bs->breakpoint_at);
bd5635a1 1159 printf_filtered ("\nOld value = ");
199b2450 1160 value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
bd5635a1 1161 printf_filtered ("\nNew value = ");
199b2450 1162 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
bd5635a1
RP
1163 Val_pretty_default);
1164 printf_filtered ("\n");
1165 value_free (bs->old_val);
1166 bs->old_val = NULL;
bd2f0c85
JL
1167 /* More than one watchpoint may have been triggered. */
1168 return -1;
bd5635a1 1169 }
11054881
KH
1170 else if (bs->breakpoint_at->type == bp_access_watchpoint ||
1171 bs->breakpoint_at->type == bp_read_watchpoint)
1172 {
1173 mention (bs->breakpoint_at);
1174 printf_filtered ("\nValue = ");
1175 value_print (bs->breakpoint_at->val, gdb_stdout, 0,
1176 Val_pretty_default);
1177 printf_filtered ("\n");
1178 return -1;
1179 }
8af68e4e
JK
1180 /* We can't deal with it. Maybe another member of the bpstat chain can. */
1181 return -1;
1182}
1183
1184/* Print a message indicating what happened. Returns nonzero to
1185 say that only the source line should be printed after this (zero
1186 return means print the frame as well as the source line). */
3f031adf 1187/* Currently we always return zero. */
8af68e4e
JK
1188int
1189bpstat_print (bs)
1190 bpstat bs;
1191{
1192 int val;
1193
1194 if (bs == NULL)
1195 return 0;
bd5635a1 1196
8af68e4e
JK
1197 val = (*bs->print_it) (bs);
1198 if (val >= 0)
1199 return val;
1200
fcb887ff
JK
1201 /* Maybe another breakpoint in the chain caused us to stop.
1202 (Currently all watchpoints go on the bpstat whether hit or
1203 not. That probably could (should) be changed, provided care is taken
1204 with respect to bpstat_explains_signal). */
1205 if (bs->next)
1206 return bpstat_print (bs->next);
1207
cabd4da6 1208 /* We reached the end of the chain without printing anything. */
bd5635a1
RP
1209 return 0;
1210}
1211
1212/* Evaluate the expression EXP and return 1 if value is zero.
1213 This is used inside a catch_errors to evaluate the breakpoint condition.
bdbd5f50 1214 The argument is a "struct expression *" that has been cast to char * to
bd5635a1
RP
1215 make it pass through catch_errors. */
1216
1217static int
1218breakpoint_cond_eval (exp)
bdbd5f50 1219 char *exp;
bd5635a1 1220{
11054881
KH
1221 value_ptr mark = value_mark ();
1222 int i = !value_true (evaluate_expression ((struct expression *)exp));
1223 value_free_to_mark (mark);
1224 return i;
bd5635a1
RP
1225}
1226
1227/* Allocate a new bpstat and chain it to the current one. */
1228
1229static bpstat
1230bpstat_alloc (b, cbs)
1231 register struct breakpoint *b;
1232 bpstat cbs; /* Current "bs" value */
1233{
1234 bpstat bs;
1235
1236 bs = (bpstat) xmalloc (sizeof (*bs));
1237 cbs->next = bs;
1238 bs->breakpoint_at = b;
1239 /* If the condition is false, etc., don't do the commands. */
1240 bs->commands = NULL;
bd5635a1 1241 bs->old_val = NULL;
8af68e4e 1242 bs->print_it = print_it_normal;
bd5635a1
RP
1243 return bs;
1244}
fa99ebe1 1245\f
8af68e4e
JK
1246/* Possible return values for watchpoint_check (this can't be an enum
1247 because of check_errors). */
999dd04b
JL
1248/* The watchpoint has been deleted. */
1249#define WP_DELETED 1
8af68e4e
JK
1250/* The value has changed. */
1251#define WP_VALUE_CHANGED 2
1252/* The value has not changed. */
1253#define WP_VALUE_NOT_CHANGED 3
1254
e8bf33c4
JK
1255#define BP_TEMPFLAG 1
1256#define BP_HARDWAREFLAG 2
1257
8af68e4e 1258/* Check watchpoint condition. */
557f3a0e 1259
8af68e4e
JK
1260static int
1261watchpoint_check (p)
fe675038 1262 char *p;
8af68e4e
JK
1263{
1264 bpstat bs = (bpstat) p;
11054881 1265 struct breakpoint *b;
2b576293
C
1266 struct frame_info *fr;
1267 int within_current_scope;
999dd04b 1268
557f3a0e
SS
1269 b = bs->breakpoint_at;
1270
1271 if (b->exp_valid_block == NULL)
8af68e4e 1272 within_current_scope = 1;
fa99ebe1
JK
1273 else
1274 {
706dc3ce
JL
1275 /* There is no current frame at this moment. If we're going to have
1276 any chance of handling watchpoints on local variables, we'll need
1277 the frame chain (so we can determine if we're in scope). */
1278 reinit_frame_cache();
557f3a0e 1279 fr = find_frame_addr_in_frame_chain (b->watchpoint_frame);
999dd04b 1280 within_current_scope = (fr != NULL);
fa99ebe1
JK
1281 if (within_current_scope)
1282 /* If we end up stopping, the current frame will get selected
1283 in normal_stop. So this call to select_frame won't affect
1284 the user. */
1285 select_frame (fr, -1);
1286 }
1287
8af68e4e
JK
1288 if (within_current_scope)
1289 {
1290 /* We use value_{,free_to_}mark because it could be a
1291 *long* time before we return to the command level and
cef4c2e7
PS
1292 call free_all_values. We can't call free_all_values because
1293 we might be in the middle of evaluating a function call. */
8af68e4e 1294
82a2edfb
JK
1295 value_ptr mark = value_mark ();
1296 value_ptr new_val = evaluate_expression (bs->breakpoint_at->exp);
557f3a0e 1297 if (!value_equal (b->val, new_val))
8af68e4e
JK
1298 {
1299 release_value (new_val);
1300 value_free_to_mark (mark);
557f3a0e
SS
1301 bs->old_val = b->val;
1302 b->val = new_val;
8af68e4e
JK
1303 /* We will stop here */
1304 return WP_VALUE_CHANGED;
1305 }
1306 else
1307 {
1308 /* Nothing changed, don't do anything. */
1309 value_free_to_mark (mark);
1310 /* We won't stop here */
1311 return WP_VALUE_NOT_CHANGED;
1312 }
1313 }
1314 else
1315 {
1316 /* This seems like the only logical thing to do because
1317 if we temporarily ignored the watchpoint, then when
1318 we reenter the block in which it is valid it contains
1319 garbage (in the case of a function, it may have two
1320 garbage values, one before and one after the prologue).
1321 So we can't even detect the first assignment to it and
1322 watch after that (since the garbage may or may not equal
1323 the first value assigned). */
8af68e4e 1324 printf_filtered ("\
999dd04b 1325Watchpoint %d deleted because the program has left the block in\n\
8af68e4e 1326which its expression is valid.\n", bs->breakpoint_at->number);
557f3a0e 1327 if (b->related_breakpoint)
6b038bd9 1328 b->related_breakpoint->disposition = del_at_next_stop;
e51481f9 1329 b->disposition = del_at_next_stop;
999dd04b 1330
999dd04b 1331 return WP_DELETED;
8af68e4e
JK
1332 }
1333}
1334
1335/* This is used when everything which needs to be printed has
1336 already been printed. But we still want to print the frame. */
1337static int
cabd4da6 1338print_it_done (bs)
8af68e4e
JK
1339 bpstat bs;
1340{
1341 return 0;
1342}
1343
cabd4da6
JK
1344/* This is used when nothing should be printed for this bpstat entry. */
1345
1346static int
1347print_it_noop (bs)
1348 bpstat bs;
1349{
1350 return -1;
1351}
1352
cb6b0202 1353/* Get a bpstat associated with having just stopped at address *PC
706dc3ce 1354 and frame address CORE_ADDRESS. Update *PC to point at the
cb6b0202
JK
1355 breakpoint (if we hit a breakpoint). NOT_A_BREAKPOINT is nonzero
1356 if this is known to not be a real breakpoint (it could still be a
1357 watchpoint, though). */
1358
bd5635a1
RP
1359/* Determine whether we stopped at a breakpoint, etc, or whether we
1360 don't understand this stop. Result is a chain of bpstat's such that:
1361
1362 if we don't understand the stop, the result is a null pointer.
1363
cb6b0202 1364 if we understand why we stopped, the result is not null.
bd5635a1
RP
1365
1366 Each element of the chain refers to a particular breakpoint or
1367 watchpoint at which we have stopped. (We may have stopped for
2d313932 1368 several reasons concurrently.)
bd5635a1
RP
1369
1370 Each element of the chain has valid next, breakpoint_at,
1371 commands, FIXME??? fields.
1372
1373 */
1374
bd5635a1 1375bpstat
16726dd1 1376bpstat_stop_status (pc, not_a_breakpoint)
bd5635a1 1377 CORE_ADDR *pc;
cb6b0202 1378 int not_a_breakpoint;
bd5635a1 1379{
fa3764e2 1380 register struct breakpoint *b, *temp;
bd5635a1
RP
1381 CORE_ADDR bp_addr;
1382 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
1383 int real_breakpoint = 0;
1384 /* Root of the chain of bpstat's */
e8bf33c4 1385 struct bpstats root_bs[1];
bd5635a1
RP
1386 /* Pointer to the last thing in the chain currently. */
1387 bpstat bs = root_bs;
11054881
KH
1388 static char message1[] =
1389 "Error evaluating expression for watchpoint %d\n";
1390 char message[sizeof (message1) + 30 /* slop */];
bd5635a1
RP
1391
1392 /* Get the address where the breakpoint would have been. */
1393 bp_addr = *pc - DECR_PC_AFTER_BREAK;
1394
fa3764e2 1395 ALL_BREAKPOINTS_SAFE (b, temp)
bd5635a1 1396 {
fa3764e2
JL
1397 if (b->enable == disabled
1398 || b->enable == shlib_disabled)
bd5635a1 1399 continue;
30875e1c 1400
999dd04b
JL
1401 if (b->type != bp_watchpoint
1402 && b->type != bp_hardware_watchpoint
11054881
KH
1403 && b->type != bp_read_watchpoint
1404 && b->type != bp_access_watchpoint
6b038bd9
DT
1405 && b->type != bp_hardware_breakpoint) /* a non-watchpoint bp */
1406 if (b->address != bp_addr || /* address doesn't match or */
1407 (overlay_debugging && /* overlay doesn't match */
1408 section_is_overlay (b->section) &&
1409 !section_is_mapped (b->section)))
1410 continue;
bd5635a1 1411
11054881
KH
1412 if (b->type == bp_hardware_breakpoint
1413 && b->address != (bp_addr - DECR_PC_AFTER_HW_BREAK))
1414 continue;
1415
999dd04b
JL
1416 if (b->type != bp_watchpoint
1417 && b->type != bp_hardware_watchpoint
11054881
KH
1418 && b->type != bp_read_watchpoint
1419 && b->type != bp_access_watchpoint
999dd04b 1420 && not_a_breakpoint)
cb6b0202
JK
1421 continue;
1422
30875e1c
SG
1423 /* Come here if it's a watchpoint, or if the break address matches */
1424
9f577285
SS
1425 ++(b->hit_count);
1426
bd5635a1
RP
1427 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
1428
cabd4da6
JK
1429 bs->stop = 1;
1430 bs->print = 1;
bd5635a1 1431
11054881 1432 sprintf (message, message1, b->number);
999dd04b 1433 if (b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
bd5635a1 1434 {
fe675038
JK
1435 switch (catch_errors (watchpoint_check, (char *) bs, message,
1436 RETURN_MASK_ALL))
bd5635a1 1437 {
999dd04b 1438 case WP_DELETED:
8af68e4e 1439 /* We've already printed what needs to be printed. */
cabd4da6 1440 bs->print_it = print_it_done;
8af68e4e
JK
1441 /* Stop. */
1442 break;
1443 case WP_VALUE_CHANGED:
1444 /* Stop. */
1445 break;
1446 case WP_VALUE_NOT_CHANGED:
1447 /* Don't stop. */
cabd4da6
JK
1448 bs->print_it = print_it_noop;
1449 bs->stop = 0;
6ee2da94 1450 --(b->hit_count); /* don't consider this a hit */
bd5635a1 1451 continue;
8af68e4e
JK
1452 default:
1453 /* Can't happen. */
1454 /* FALLTHROUGH */
1455 case 0:
1456 /* Error from catch_errors. */
999dd04b
JL
1457 printf_filtered ("Watchpoint %d deleted.\n", b->number);
1458 if (b->related_breakpoint)
6b038bd9 1459 b->related_breakpoint->disposition = del_at_next_stop;
e51481f9 1460 b->disposition = del_at_next_stop;
8af68e4e 1461 /* We've already printed what needs to be printed. */
cabd4da6 1462 bs->print_it = print_it_done;
999dd04b 1463
8af68e4e
JK
1464 /* Stop. */
1465 break;
bd5635a1
RP
1466 }
1467 }
11054881
KH
1468 else if (b->type == bp_read_watchpoint || b->type == bp_access_watchpoint)
1469 {
1470 CORE_ADDR addr;
1471 value_ptr v;
1472 int found = 0;
1473
1474 addr = target_stopped_data_address();
1475 if (addr == 0) continue;
1476 for (v = b->val_chain; v; v = v->next)
1477 {
1478 if (v->lval == lval_memory)
1479 {
1480 CORE_ADDR vaddr;
1481
1482 vaddr = VALUE_ADDRESS (v) + VALUE_OFFSET (v);
1483 if (addr == vaddr)
1484 found = 1;
1485 }
1486 }
1487 if (found)
1488 switch (catch_errors (watchpoint_check, (char *) bs, message,
1489 RETURN_MASK_ALL))
1490 {
1491 case WP_DELETED:
1492 /* We've already printed what needs to be printed. */
1493 bs->print_it = print_it_done;
1494 /* Stop. */
1495 break;
1496 case WP_VALUE_CHANGED:
1497 case WP_VALUE_NOT_CHANGED:
1498 /* Stop. */
1499 break;
1500 default:
1501 /* Can't happen. */
1502 case 0:
1503 /* Error from catch_errors. */
1504 printf_filtered ("Watchpoint %d deleted.\n", b->number);
e51481f9 1505 if (b->related_breakpoint)
6b038bd9 1506 b->related_breakpoint->disposition = del_at_next_stop;
e51481f9 1507 b->disposition = del_at_next_stop;
11054881
KH
1508 /* We've already printed what needs to be printed. */
1509 bs->print_it = print_it_done;
1510 break;
1511 }
1512 }
6b038bd9 1513 else if (DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs)
bd5635a1
RP
1514 real_breakpoint = 1;
1515
6ee2da94
FCE
1516 if (b->frame && b->frame != (get_current_frame ())->frame &&
1517 (b->type == bp_step_resume &&
1518 (get_current_frame ())->frame INNER_THAN b->frame))
cabd4da6 1519 bs->stop = 0;
bd5635a1
RP
1520 else
1521 {
fee933f1 1522 int value_is_zero = 0;
bd5635a1
RP
1523
1524 if (b->cond)
1525 {
1526 /* Need to select the frame, with all that implies
1527 so that the conditions will have the right context. */
1528 select_frame (get_current_frame (), 0);
bdbd5f50
JG
1529 value_is_zero
1530 = catch_errors (breakpoint_cond_eval, (char *)(b->cond),
fe675038
JK
1531 "Error in testing breakpoint condition:\n",
1532 RETURN_MASK_ALL);
06b6c733 1533 /* FIXME-someday, should give breakpoint # */
bd5635a1
RP
1534 free_all_values ();
1535 }
bdbd5f50 1536 if (b->cond && value_is_zero)
bd5635a1 1537 {
cabd4da6 1538 bs->stop = 0;
bd5635a1
RP
1539 }
1540 else if (b->ignore_count > 0)
1541 {
1542 b->ignore_count--;
cabd4da6 1543 bs->stop = 0;
bd5635a1
RP
1544 }
1545 else
1546 {
1547 /* We will stop here */
30875e1c 1548 if (b->disposition == disable)
bd5635a1
RP
1549 b->enable = disabled;
1550 bs->commands = b->commands;
1551 if (b->silent)
cabd4da6 1552 bs->print = 0;
2d313932 1553 if (bs->commands && STREQ ("silent", bs->commands->line))
bd5635a1
RP
1554 {
1555 bs->commands = bs->commands->next;
cabd4da6 1556 bs->print = 0;
bd5635a1
RP
1557 }
1558 }
1559 }
cabd4da6
JK
1560 /* Print nothing for this entry if we dont stop or if we dont print. */
1561 if (bs->stop == 0 || bs->print == 0)
1562 bs->print_it = print_it_noop;
bd5635a1
RP
1563 }
1564
1565 bs->next = NULL; /* Terminate the chain */
1566 bs = root_bs->next; /* Re-grab the head of the chain */
6b038bd9
DT
1567
1568 if ((DECR_PC_AFTER_BREAK != 0 || must_shift_inst_regs) && bs)
bd5635a1 1569 {
bd5635a1
RP
1570 if (real_breakpoint)
1571 {
1572 *pc = bp_addr;
1573#if defined (SHIFT_INST_REGS)
817ac7f8 1574 SHIFT_INST_REGS();
bd5635a1
RP
1575#else /* No SHIFT_INST_REGS. */
1576 write_pc (bp_addr);
1577#endif /* No SHIFT_INST_REGS. */
1578 }
bd5635a1 1579 }
999dd04b
JL
1580
1581 /* The value of a hardware watchpoint hasn't changed, but the
1582 intermediate memory locations we are watching may have. */
11054881
KH
1583 if (bs && ! bs->stop &&
1584 (bs->breakpoint_at->type == bp_hardware_watchpoint ||
1585 bs->breakpoint_at->type == bp_read_watchpoint ||
1586 bs->breakpoint_at->type == bp_access_watchpoint))
999dd04b
JL
1587 {
1588 remove_breakpoints ();
1589 insert_breakpoints ();
1590 }
bd5635a1
RP
1591 return bs;
1592}
cabd4da6
JK
1593\f
1594/* Tell what to do about this bpstat. */
fe675038 1595struct bpstat_what
cabd4da6
JK
1596bpstat_what (bs)
1597 bpstat bs;
1598{
1599 /* Classify each bpstat as one of the following. */
1600 enum class {
fe675038
JK
1601 /* This bpstat element has no effect on the main_action. */
1602 no_effect = 0,
cabd4da6
JK
1603
1604 /* There was a watchpoint, stop but don't print. */
1605 wp_silent,
1606
1607 /* There was a watchpoint, stop and print. */
1608 wp_noisy,
1609
1610 /* There was a breakpoint but we're not stopping. */
1611 bp_nostop,
1612
1613 /* There was a breakpoint, stop but don't print. */
1614 bp_silent,
1615
1616 /* There was a breakpoint, stop and print. */
1617 bp_noisy,
1618
1619 /* We hit the longjmp breakpoint. */
1620 long_jump,
1621
1622 /* We hit the longjmp_resume breakpoint. */
1623 long_resume,
1624
d7e7e851
JK
1625 /* We hit the step_resume breakpoint. */
1626 step_resume,
1627
bcc37718
JK
1628 /* We hit the through_sigtramp breakpoint. */
1629 through_sig,
1630
27b6a1fa
JL
1631 /* We hit the shared library event breakpoint. */
1632 shlib_event,
1633
cabd4da6
JK
1634 /* This is just used to count how many enums there are. */
1635 class_last
1636 };
1637
1638 /* Here is the table which drives this routine. So that we can
1639 format it pretty, we define some abbreviations for the
1640 enum bpstat_what codes. */
27b6a1fa
JL
1641#define kc BPSTAT_WHAT_KEEP_CHECKING
1642#define ss BPSTAT_WHAT_STOP_SILENT
1643#define sn BPSTAT_WHAT_STOP_NOISY
1644#define sgl BPSTAT_WHAT_SINGLE
1645#define slr BPSTAT_WHAT_SET_LONGJMP_RESUME
1646#define clr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
1647#define clrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
d7e7e851 1648#define sr BPSTAT_WHAT_STEP_RESUME
bcc37718 1649#define ts BPSTAT_WHAT_THROUGH_SIGTRAMP
27b6a1fa 1650#define shl BPSTAT_WHAT_CHECK_SHLIBS
d7e7e851 1651
cabd4da6
JK
1652/* "Can't happen." Might want to print an error message.
1653 abort() is not out of the question, but chances are GDB is just
1654 a bit confused, not unusable. */
1655#define err BPSTAT_WHAT_STOP_NOISY
1656
1657 /* Given an old action and a class, come up with a new action. */
84d59861
JK
1658 /* One interesting property of this table is that wp_silent is the same
1659 as bp_silent and wp_noisy is the same as bp_noisy. That is because
1660 after stopping, the check for whether to step over a breakpoint
1661 (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
1662 reference to how we stopped. We retain separate wp_silent and bp_silent
1663 codes in case we want to change that someday. */
d7e7e851
JK
1664
1665 /* step_resume entries: a step resume breakpoint overrides another
1666 breakpoint of signal handling (see comment in wait_for_inferior
1667 at first IN_SIGTRAMP where we set the step_resume breakpoint). */
bcc37718
JK
1668 /* We handle the through_sigtramp_breakpoint the same way; having both
1669 one of those and a step_resume_breakpoint is probably very rare (?). */
d7e7e851 1670
fe675038 1671 static const enum bpstat_what_main_action
cabd4da6
JK
1672 table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
1673 {
1674 /* old action */
27b6a1fa 1675 /* kc ss sn sgl slr clr clrs sr ts shl
bcc37718 1676 */
27b6a1fa
JL
1677/*no_effect*/ {kc, ss, sn, sgl, slr, clr, clrs, sr, ts, shl},
1678/*wp_silent*/ {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl},
1679/*wp_noisy*/ {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl},
1680/*bp_nostop*/ {sgl, ss, sn, sgl, slr, clrs, clrs, sr, ts, shl},
1681/*bp_silent*/ {ss, ss, sn, ss, ss, ss, ss, sr, ts, shl},
1682/*bp_noisy*/ {sn, sn, sn, sn, sn, sn, sn, sr, ts, shl},
1683/*long_jump*/ {slr, ss, sn, slr, err, err, err, sr, ts, shl},
1684/*long_resume*/ {clr, ss, sn, clrs, err, err, err, sr, ts, shl},
1685/*step_resume*/ {sr, sr, sr, sr, sr, sr, sr, sr, ts, shl},
1686/*through_sig*/ {ts, ts, ts, ts, ts, ts, ts, ts, ts, shl},
1687/*shlib*/ {shl, shl, shl, shl, shl, shl, shl, shl, ts, shl}
cabd4da6 1688 };
27b6a1fa
JL
1689#undef kc
1690#undef ss
1691#undef sn
1692#undef sgl
1693#undef slr
1694#undef clr
1695#undef clrs
cabd4da6 1696#undef err
bcc37718
JK
1697#undef sr
1698#undef ts
27b6a1fa 1699#undef shl
fe675038 1700 enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
84d59861 1701 struct bpstat_what retval;
cabd4da6 1702
cef4c2e7 1703 retval.call_dummy = 0;
cabd4da6
JK
1704 for (; bs != NULL; bs = bs->next)
1705 {
fee933f1 1706 enum class bs_class = no_effect;
cabd4da6
JK
1707 if (bs->breakpoint_at == NULL)
1708 /* I suspect this can happen if it was a momentary breakpoint
1709 which has since been deleted. */
1710 continue;
1711 switch (bs->breakpoint_at->type)
1712 {
1713 case bp_breakpoint:
11054881 1714 case bp_hardware_breakpoint:
cabd4da6
JK
1715 case bp_until:
1716 case bp_finish:
1717 if (bs->stop)
1718 {
1719 if (bs->print)
1720 bs_class = bp_noisy;
1721 else
1722 bs_class = bp_silent;
1723 }
1724 else
1725 bs_class = bp_nostop;
1726 break;
1727 case bp_watchpoint:
999dd04b 1728 case bp_hardware_watchpoint:
11054881
KH
1729 case bp_read_watchpoint:
1730 case bp_access_watchpoint:
cabd4da6
JK
1731 if (bs->stop)
1732 {
1733 if (bs->print)
1734 bs_class = wp_noisy;
1735 else
1736 bs_class = wp_silent;
1737 }
1738 else
fe675038
JK
1739 /* There was a watchpoint, but we're not stopping. This requires
1740 no further action. */
1741 bs_class = no_effect;
cabd4da6
JK
1742 break;
1743 case bp_longjmp:
1744 bs_class = long_jump;
1745 break;
1746 case bp_longjmp_resume:
1747 bs_class = long_resume;
1748 break;
fe675038 1749 case bp_step_resume:
fe675038
JK
1750 if (bs->stop)
1751 {
d7e7e851 1752 bs_class = step_resume;
fe675038
JK
1753 }
1754 else
1755 /* It is for the wrong frame. */
1756 bs_class = bp_nostop;
bcc37718
JK
1757 break;
1758 case bp_through_sigtramp:
1759 bs_class = through_sig;
fe675038 1760 break;
999dd04b
JL
1761 case bp_watchpoint_scope:
1762 bs_class = bp_nostop;
1763 break;
27b6a1fa
JL
1764 case bp_shlib_event:
1765 bs_class = shlib_event;
1766 break;
84d59861
JK
1767 case bp_call_dummy:
1768 /* Make sure the action is stop (silent or noisy), so infrun.c
1769 pops the dummy frame. */
1770 bs_class = bp_silent;
1771 retval.call_dummy = 1;
bb7b3800 1772 break;
cabd4da6
JK
1773 }
1774 current_action = table[(int)bs_class][(int)current_action];
1775 }
84d59861
JK
1776 retval.main_action = current_action;
1777 return retval;
cabd4da6 1778}
bd5635a1 1779
30875e1c
SG
1780/* Nonzero if we should step constantly (e.g. watchpoints on machines
1781 without hardware support). This isn't related to a specific bpstat,
1782 just to things like whether watchpoints are set. */
1783
bd5635a1
RP
1784int
1785bpstat_should_step ()
1786{
1787 struct breakpoint *b;
1788 ALL_BREAKPOINTS (b)
30875e1c 1789 if (b->enable == enabled && b->type == bp_watchpoint)
bd5635a1
RP
1790 return 1;
1791 return 0;
1792}
1793\f
1794/* Print information on breakpoint number BNUM, or -1 if all.
1795 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
1796 is nonzero, process only watchpoints. */
1797
1798static void
c8950965 1799breakpoint_1 (bnum, allflag)
bd5635a1 1800 int bnum;
80ba48f5 1801 int allflag;
bd5635a1
RP
1802{
1803 register struct breakpoint *b;
1804 register struct command_line *l;
1805 register struct symbol *sym;
1806 CORE_ADDR last_addr = (CORE_ADDR)-1;
30875e1c 1807 int found_a_breakpoint = 0;
11054881
KH
1808 static char *bptypes[] = {"breakpoint", "hw breakpoint",
1809 "until", "finish", "watchpoint",
1810 "hw watchpoint", "read watchpoint",
1811 "acc watchpoint", "longjmp",
999dd04b 1812 "longjmp resume", "step resume",
27b6a1fa
JL
1813 "sigtramp",
1814 "watchpoint scope", "call dummy",
1815 "shlib events" };
e51481f9 1816 static char *bpdisps[] = {"del", "dstp", "dis", "keep"};
647e52ea 1817 static char bpenables[] = "nyn";
0a62ff36 1818 char wrap_indent[80];
30875e1c 1819
bd5635a1 1820 ALL_BREAKPOINTS (b)
30875e1c
SG
1821 if (bnum == -1
1822 || bnum == b->number)
bd5635a1 1823 {
80ba48f5
SG
1824/* We only print out user settable breakpoints unless the allflag is set. */
1825 if (!allflag
1826 && b->type != bp_breakpoint
11054881 1827 && b->type != bp_hardware_breakpoint
999dd04b 1828 && b->type != bp_watchpoint
11054881
KH
1829 && b->type != bp_read_watchpoint
1830 && b->type != bp_access_watchpoint
999dd04b 1831 && b->type != bp_hardware_watchpoint)
80ba48f5
SG
1832 continue;
1833
30875e1c 1834 if (!found_a_breakpoint++)
47ebe8fd 1835 {
f2d9c058
KH
1836 annotate_breakpoints_headers ();
1837
1838 annotate_field (0);
1839 printf_filtered ("Num ");
1840 annotate_field (1);
1841 printf_filtered ("Type ");
1842 annotate_field (2);
1843 printf_filtered ("Disp ");
1844 annotate_field (3);
1845 printf_filtered ("Enb ");
1846 if (addressprint)
1847 {
1848 annotate_field (4);
1849 printf_filtered ("Address ");
1850 }
1851 annotate_field (5);
1852 printf_filtered ("What\n");
1853
1854 annotate_breakpoints_table ();
1855 }
1856
1857 annotate_record ();
1858 annotate_field (0);
1859 printf_filtered ("%-3d ", b->number);
1860 annotate_field (1);
1861 printf_filtered ("%-14s ", bptypes[(int)b->type]);
1862 annotate_field (2);
1863 printf_filtered ("%-4s ", bpdisps[(int)b->disposition]);
1864 annotate_field (3);
47ebe8fd
JK
1865 printf_filtered ("%-3c ", bpenables[(int)b->enable]);
1866
0a62ff36
JK
1867 strcpy (wrap_indent, " ");
1868 if (addressprint)
1869 strcat (wrap_indent, " ");
30875e1c 1870 switch (b->type)
bd5635a1 1871 {
30875e1c 1872 case bp_watchpoint:
999dd04b 1873 case bp_hardware_watchpoint:
11054881
KH
1874 case bp_read_watchpoint:
1875 case bp_access_watchpoint:
47ebe8fd
JK
1876 /* Field 4, the address, is omitted (which makes the columns
1877 not line up too nicely with the headers, but the effect
1878 is relatively readable). */
9f577285 1879 annotate_field (5);
199b2450 1880 print_expression (b->exp, gdb_stdout);
30875e1c 1881 break;
84d59861 1882
30875e1c 1883 case bp_breakpoint:
11054881 1884 case bp_hardware_breakpoint:
80ba48f5
SG
1885 case bp_until:
1886 case bp_finish:
1887 case bp_longjmp:
1888 case bp_longjmp_resume:
84d59861 1889 case bp_step_resume:
bcc37718 1890 case bp_through_sigtramp:
999dd04b 1891 case bp_watchpoint_scope:
bb7b3800 1892 case bp_call_dummy:
27b6a1fa 1893 case bp_shlib_event:
bd5635a1 1894 if (addressprint)
47ebe8fd 1895 {
f2d9c058 1896 annotate_field (4);
47ebe8fd
JK
1897 /* FIXME-32x64: need a print_address_numeric with
1898 field width */
1899 printf_filtered
1900 ("%s ",
1901 local_hex_string_custom
1902 ((unsigned long) b->address, "08l"));
1903 }
1904
f2d9c058 1905 annotate_field (5);
bd5635a1
RP
1906
1907 last_addr = b->address;
d889f6b7 1908 if (b->source_file)
bd5635a1 1909 {
6b038bd9 1910 sym = find_pc_sect_function (b->address, b->section);
bd5635a1
RP
1911 if (sym)
1912 {
199b2450
TL
1913 fputs_filtered ("in ", gdb_stdout);
1914 fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
0a62ff36 1915 wrap_here (wrap_indent);
199b2450 1916 fputs_filtered (" at ", gdb_stdout);
bd5635a1 1917 }
199b2450 1918 fputs_filtered (b->source_file, gdb_stdout);
bd5635a1
RP
1919 printf_filtered (":%d", b->line_number);
1920 }
1921 else
199b2450 1922 print_address_symbolic (b->address, gdb_stdout, demangle, " ");
fee933f1 1923 break;
bd5635a1
RP
1924 }
1925
1926 printf_filtered ("\n");
1927
1928 if (b->frame)
833e0d94 1929 {
f2d9c058 1930 annotate_field (6);
47ebe8fd 1931
833e0d94 1932 printf_filtered ("\tstop only in stack frame at ");
d24c0599 1933 print_address_numeric (b->frame, 1, gdb_stdout);
833e0d94 1934 printf_filtered ("\n");
bcc37718 1935 }
47ebe8fd 1936
bd5635a1
RP
1937 if (b->cond)
1938 {
f2d9c058 1939 annotate_field (7);
47ebe8fd 1940
bd5635a1 1941 printf_filtered ("\tstop only if ");
199b2450 1942 print_expression (b->cond, gdb_stdout);
bd5635a1
RP
1943 printf_filtered ("\n");
1944 }
47ebe8fd 1945
647e52ea
SG
1946 if (b->thread != -1)
1947 {
1948 /* FIXME should make an annotation for this */
1949 printf_filtered ("\tstop only in thread %d\n", b->thread);
1950 }
1951
9f577285
SS
1952 if (show_breakpoint_hit_counts && b->hit_count)
1953 {
1954 /* FIXME should make an annotation for this */
1955
16726dd1
JK
1956 printf_filtered ("\tbreakpoint already hit %d time%s\n",
1957 b->hit_count, (b->hit_count == 1 ? "" : "s"));
9f577285
SS
1958 }
1959
bd5635a1 1960 if (b->ignore_count)
47ebe8fd 1961 {
f2d9c058 1962 annotate_field (8);
47ebe8fd
JK
1963
1964 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
1965 }
1966
bd5635a1 1967 if ((l = b->commands))
47ebe8fd 1968 {
f2d9c058 1969 annotate_field (9);
47ebe8fd
JK
1970
1971 while (l)
1972 {
0f8cdd9b 1973 print_command_line (l, 4);
47ebe8fd
JK
1974 l = l->next;
1975 }
1976 }
bd5635a1
RP
1977 }
1978
fee933f1
RP
1979 if (!found_a_breakpoint)
1980 {
1981 if (bnum == -1)
1982 printf_filtered ("No breakpoints or watchpoints.\n");
1983 else
1984 printf_filtered ("No breakpoint or watchpoint number %d.\n", bnum);
1985 }
30875e1c
SG
1986 else
1987 /* Compare against (CORE_ADDR)-1 in case some compiler decides
1988 that a comparison of an unsigned with -1 is always false. */
1989 if (last_addr != (CORE_ADDR)-1)
1990 set_next_address (last_addr);
47ebe8fd 1991
f2d9c058 1992 annotate_breakpoints_table_end ();
bd5635a1
RP
1993}
1994
bdbd5f50 1995/* ARGSUSED */
bd5635a1
RP
1996static void
1997breakpoints_info (bnum_exp, from_tty)
1998 char *bnum_exp;
1999 int from_tty;
2000{
2001 int bnum = -1;
2002
2003 if (bnum_exp)
2004 bnum = parse_and_eval_address (bnum_exp);
2005
c8950965 2006 breakpoint_1 (bnum, 0);
80ba48f5
SG
2007}
2008
9b280a7f
JG
2009#if MAINTENANCE_CMDS
2010
80ba48f5
SG
2011/* ARGSUSED */
2012static void
9b280a7f 2013maintenance_info_breakpoints (bnum_exp, from_tty)
80ba48f5
SG
2014 char *bnum_exp;
2015 int from_tty;
2016{
2017 int bnum = -1;
2018
2019 if (bnum_exp)
2020 bnum = parse_and_eval_address (bnum_exp);
2021
c8950965 2022 breakpoint_1 (bnum, 1);
bd5635a1
RP
2023}
2024
9b280a7f
JG
2025#endif
2026
bd5635a1
RP
2027/* Print a message describing any breakpoints set at PC. */
2028
2029static void
6b038bd9
DT
2030describe_other_breakpoints (pc, section)
2031 CORE_ADDR pc;
2032 asection *section;
bd5635a1
RP
2033{
2034 register int others = 0;
2035 register struct breakpoint *b;
2036
2037 ALL_BREAKPOINTS (b)
2038 if (b->address == pc)
6b038bd9
DT
2039 if (overlay_debugging == 0 ||
2040 b->section == section)
2041 others++;
bd5635a1
RP
2042 if (others > 0)
2043 {
833e0d94 2044 printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
bd5635a1
RP
2045 ALL_BREAKPOINTS (b)
2046 if (b->address == pc)
6b038bd9
DT
2047 if (overlay_debugging == 0 ||
2048 b->section == section)
2049 {
2050 others--;
2051 printf_filtered
2052 ("%d%s%s ",
2053 b->number,
2054 ((b->enable == disabled || b->enable == shlib_disabled)
2055 ? " (disabled)" : ""),
2056 (others > 1) ? "," : ((others == 1) ? " and" : ""));
2057 }
833e0d94 2058 printf_filtered ("also set at pc ");
d24c0599 2059 print_address_numeric (pc, 1, gdb_stdout);
833e0d94 2060 printf_filtered (".\n");
bd5635a1
RP
2061 }
2062}
2063\f
2064/* Set the default place to put a breakpoint
2065 for the `break' command with no arguments. */
2066
2067void
2068set_default_breakpoint (valid, addr, symtab, line)
2069 int valid;
2070 CORE_ADDR addr;
2071 struct symtab *symtab;
2072 int line;
2073{
2074 default_breakpoint_valid = valid;
2075 default_breakpoint_address = addr;
2076 default_breakpoint_symtab = symtab;
2077 default_breakpoint_line = line;
2078}
2079
2080/* Rescan breakpoints at address ADDRESS,
2081 marking the first one as "first" and any others as "duplicates".
2082 This is so that the bpt instruction is only inserted once. */
2083
2084static void
6b038bd9 2085check_duplicates (address, section)
bd5635a1 2086 CORE_ADDR address;
6b038bd9 2087 asection *section;
bd5635a1
RP
2088{
2089 register struct breakpoint *b;
2090 register int count = 0;
2091
30875e1c 2092 if (address == 0) /* Watchpoints are uninteresting */
f266e564
JK
2093 return;
2094
bd5635a1 2095 ALL_BREAKPOINTS (b)
fa3764e2
JL
2096 if (b->enable != disabled
2097 && b->enable != shlib_disabled
6b038bd9
DT
2098 && b->address == address
2099 && (overlay_debugging == 0 || b->section == section))
bd5635a1
RP
2100 {
2101 count++;
2102 b->duplicate = count > 1;
2103 }
2104}
2105
2106/* Low level routine to set a breakpoint.
2107 Takes as args the three things that every breakpoint must have.
2108 Returns the breakpoint object so caller can set other things.
2109 Does not set the breakpoint number!
f266e564
JK
2110 Does not print anything.
2111
2112 ==> This routine should not be called if there is a chance of later
2113 error(); otherwise it leaves a bogus breakpoint on the chain. Validate
2114 your arguments BEFORE calling this routine! */
bd5635a1 2115
895cc8ab 2116struct breakpoint *
bd5635a1
RP
2117set_raw_breakpoint (sal)
2118 struct symtab_and_line sal;
2119{
2120 register struct breakpoint *b, *b1;
2121
2122 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
4ed3a9ea 2123 memset (b, 0, sizeof (*b));
bd5635a1 2124 b->address = sal.pc;
d889f6b7
JK
2125 if (sal.symtab == NULL)
2126 b->source_file = NULL;
2127 else
2128 b->source_file = savestring (sal.symtab->filename,
2129 strlen (sal.symtab->filename));
6b038bd9 2130 b->section = sal.section;
706dc3ce
JL
2131 b->language = current_language->la_language;
2132 b->input_radix = input_radix;
199b2450 2133 b->thread = -1;
bd5635a1
RP
2134 b->line_number = sal.line;
2135 b->enable = enabled;
2136 b->next = 0;
2137 b->silent = 0;
2138 b->ignore_count = 0;
2139 b->commands = NULL;
30875e1c 2140 b->frame = 0;
bd5635a1
RP
2141
2142 /* Add this breakpoint to the end of the chain
2143 so that a list of breakpoints will come out in order
2144 of increasing numbers. */
2145
2146 b1 = breakpoint_chain;
2147 if (b1 == 0)
2148 breakpoint_chain = b;
2149 else
2150 {
2151 while (b1->next)
2152 b1 = b1->next;
2153 b1->next = b;
2154 }
2155
6b038bd9 2156 check_duplicates (sal.pc, sal.section);
6c803036 2157 breakpoints_changed ();
bd5635a1
RP
2158
2159 return b;
2160}
2161
39ce6829
PS
2162#ifdef GET_LONGJMP_TARGET
2163
30875e1c 2164static void
cd10c7e3 2165create_longjmp_breakpoint (func_name)
30875e1c 2166 char *func_name;
30875e1c 2167{
30875e1c
SG
2168 struct symtab_and_line sal;
2169 struct breakpoint *b;
2170
6b038bd9 2171 INIT_SAL (&sal); /* initialize to zeroes */
30875e1c
SG
2172 if (func_name != NULL)
2173 {
2174 struct minimal_symbol *m;
2175
e8bf33c4 2176 m = lookup_minimal_symbol_text (func_name, NULL, (struct objfile *)NULL);
30875e1c 2177 if (m)
2d313932 2178 sal.pc = SYMBOL_VALUE_ADDRESS (m);
30875e1c
SG
2179 else
2180 return;
2181 }
6b038bd9 2182 sal.section = find_pc_overlay (sal.pc);
cd10c7e3 2183 b = set_raw_breakpoint (sal);
30875e1c
SG
2184 if (!b) return;
2185
80ba48f5 2186 b->type = func_name != NULL ? bp_longjmp : bp_longjmp_resume;
30875e1c
SG
2187 b->disposition = donttouch;
2188 b->enable = disabled;
2189 b->silent = 1;
80ba48f5
SG
2190 if (func_name)
2191 b->addr_string = strsave(func_name);
2192 b->number = internal_breakpoint_number--;
30875e1c 2193}
30875e1c 2194
39ce6829
PS
2195#endif /* #ifdef GET_LONGJMP_TARGET */
2196
30875e1c
SG
2197/* Call this routine when stepping and nexting to enable a breakpoint if we do
2198 a longjmp(). When we hit that breakpoint, call
2199 set_longjmp_resume_breakpoint() to figure out where we are going. */
2200
2201void
2202enable_longjmp_breakpoint()
2203{
80ba48f5
SG
2204 register struct breakpoint *b;
2205
2206 ALL_BREAKPOINTS (b)
2207 if (b->type == bp_longjmp)
9b280a7f
JG
2208 {
2209 b->enable = enabled;
6b038bd9 2210 check_duplicates (b->address, b->section);
9b280a7f 2211 }
30875e1c
SG
2212}
2213
2214void
2215disable_longjmp_breakpoint()
2216{
80ba48f5
SG
2217 register struct breakpoint *b;
2218
2219 ALL_BREAKPOINTS (b)
9b280a7f 2220 if ( b->type == bp_longjmp
80ba48f5 2221 || b->type == bp_longjmp_resume)
9b280a7f
JG
2222 {
2223 b->enable = disabled;
6b038bd9 2224 check_duplicates (b->address, b->section);
9b280a7f 2225 }
30875e1c
SG
2226}
2227
27b6a1fa
JL
2228#ifdef SOLIB_ADD
2229void
2230remove_solib_event_breakpoints ()
2231{
fa3764e2 2232 register struct breakpoint *b, *temp;
27b6a1fa 2233
fa3764e2 2234 ALL_BREAKPOINTS_SAFE (b, temp)
27b6a1fa
JL
2235 if (b->type == bp_shlib_event)
2236 delete_breakpoint (b);
2237}
2238
2239void
2240create_solib_event_breakpoint (address)
2241 CORE_ADDR address;
2242{
2243 struct breakpoint *b;
2244 struct symtab_and_line sal;
2245
6b038bd9 2246 INIT_SAL (&sal); /* initialize to zeroes */
27b6a1fa 2247 sal.pc = address;
6b038bd9 2248 sal.section = find_pc_overlay (sal.pc);
27b6a1fa
JL
2249 b = set_raw_breakpoint (sal);
2250 b->number = internal_breakpoint_number--;
2251 b->disposition = donttouch;
2252 b->type = bp_shlib_event;
2253}
fa3764e2
JL
2254
2255/* Try to reenable any breakpoints in shared libraries. */
2256void
2257re_enable_breakpoints_in_shlibs ()
2258{
2259 struct breakpoint *b;
2260
2261 ALL_BREAKPOINTS (b)
2262 if (b->enable == shlib_disabled)
2263 {
2264 char buf[1];
2265
2266 /* Do not reenable the breakpoint if the shared library
2267 is still not mapped in. */
2268 if (target_read_memory (b->address, buf, 1) == 0)
2269 b->enable = enabled;
2270 }
2271}
2272
27b6a1fa
JL
2273#endif
2274
b607efe7 2275static int
11054881
KH
2276hw_breakpoint_used_count()
2277{
2278 register struct breakpoint *b;
2279 int i = 0;
2280
2281 ALL_BREAKPOINTS (b)
2282 {
2283 if (b->type == bp_hardware_breakpoint && b->enable == enabled)
2284 i++;
2285 }
2286
2287 return i;
2288}
2289
b607efe7 2290static int
11054881
KH
2291hw_watchpoint_used_count(type, other_type_used)
2292 enum bptype type;
2293 int *other_type_used;
2294{
2295 register struct breakpoint *b;
2296 int i = 0;
2297
2298 *other_type_used = 0;
2299 ALL_BREAKPOINTS (b)
2300 {
2301 if (b->enable == enabled)
2302 {
2303 if (b->type == type) i++;
2304 else if ((b->type == bp_hardware_watchpoint ||
2305 b->type == bp_read_watchpoint ||
2306 b->type == bp_access_watchpoint)
2307 && b->enable == enabled)
2308 *other_type_used = 1;
2309 }
2310 }
2311 return i;
2312}
2313
30875e1c
SG
2314/* Call this after hitting the longjmp() breakpoint. Use this to set a new
2315 breakpoint at the target of the jmp_buf.
80ba48f5
SG
2316
2317 FIXME - This ought to be done by setting a temporary breakpoint that gets
2318 deleted automatically...
30875e1c
SG
2319*/
2320
2321void
2322set_longjmp_resume_breakpoint(pc, frame)
2323 CORE_ADDR pc;
706dc3ce 2324 struct frame_info *frame;
30875e1c 2325{
80ba48f5
SG
2326 register struct breakpoint *b;
2327
2328 ALL_BREAKPOINTS (b)
2329 if (b->type == bp_longjmp_resume)
2330 {
2331 b->address = pc;
2332 b->enable = enabled;
2333 if (frame != NULL)
706dc3ce 2334 b->frame = frame->frame;
80ba48f5
SG
2335 else
2336 b->frame = 0;
6b038bd9 2337 check_duplicates (b->address, b->section);
80ba48f5
SG
2338 return;
2339 }
30875e1c
SG
2340}
2341
bd5635a1
RP
2342/* Set a breakpoint that will evaporate an end of command
2343 at address specified by SAL.
2344 Restrict it to frame FRAME if FRAME is nonzero. */
2345
30875e1c
SG
2346struct breakpoint *
2347set_momentary_breakpoint (sal, frame, type)
bd5635a1 2348 struct symtab_and_line sal;
706dc3ce 2349 struct frame_info *frame;
30875e1c 2350 enum bptype type;
bd5635a1
RP
2351{
2352 register struct breakpoint *b;
2353 b = set_raw_breakpoint (sal);
30875e1c
SG
2354 b->type = type;
2355 b->enable = enabled;
2356 b->disposition = donttouch;
706dc3ce 2357 b->frame = (frame ? frame->frame : 0);
2b576293
C
2358
2359 /* If we're debugging a multi-threaded program, then we
2360 want momentary breakpoints to be active in only a
2361 single thread of control. */
2362 if (in_thread_list (inferior_pid))
2363 b->thread = pid_to_thread_id (inferior_pid);
2364
30875e1c 2365 return b;
bd5635a1
RP
2366}
2367
bd5635a1
RP
2368\f
2369/* Tell the user we have just set a breakpoint B. */
9f577285 2370
bd5635a1
RP
2371static void
2372mention (b)
2373 struct breakpoint *b;
2374{
9f577285
SS
2375 int say_where = 0;
2376
d2a85f11
JMD
2377 /* FIXME: This is misplaced; mention() is called by things (like hitting a
2378 watchpoint) other than breakpoint creation. It should be possible to
2379 clean this up and at the same time replace the random calls to
2380 breakpoint_changed with this hook, as has already been done for
2381 delete_breakpoint_hook and so on. */
754e5da2
SG
2382 if (create_breakpoint_hook)
2383 create_breakpoint_hook (b);
2384
30875e1c 2385 switch (b->type)
bd5635a1 2386 {
30875e1c 2387 case bp_watchpoint:
bd5635a1 2388 printf_filtered ("Watchpoint %d: ", b->number);
199b2450 2389 print_expression (b->exp, gdb_stdout);
30875e1c 2390 break;
999dd04b
JL
2391 case bp_hardware_watchpoint:
2392 printf_filtered ("Hardware watchpoint %d: ", b->number);
2393 print_expression (b->exp, gdb_stdout);
2394 break;
11054881
KH
2395 case bp_read_watchpoint:
2396 printf_filtered ("Hardware read watchpoint %d: ", b->number);
2397 print_expression (b->exp, gdb_stdout);
2398 break;
2399 case bp_access_watchpoint:
2400 printf_filtered ("Hardware access(read/write) watchpoint %d: ",b->number);
2401 print_expression (b->exp, gdb_stdout);
2402 break;
30875e1c 2403 case bp_breakpoint:
9f577285
SS
2404 printf_filtered ("Breakpoint %d", b->number);
2405 say_where = 1;
51b57ded 2406 break;
11054881 2407 case bp_hardware_breakpoint:
9f577285
SS
2408 printf_filtered ("Hardware assisted breakpoint %d", b->number);
2409 say_where = 1;
11054881 2410 break;
51b57ded
FF
2411 case bp_until:
2412 case bp_finish:
2413 case bp_longjmp:
2414 case bp_longjmp_resume:
fee933f1 2415 case bp_step_resume:
bcc37718 2416 case bp_through_sigtramp:
199b2450 2417 case bp_call_dummy:
999dd04b 2418 case bp_watchpoint_scope:
fa3764e2 2419 case bp_shlib_event:
51b57ded 2420 break;
bd5635a1 2421 }
9f577285
SS
2422 if (say_where)
2423 {
2424 if (addressprint || b->source_file == NULL)
2425 {
2426 printf_filtered (" at ");
2427 print_address_numeric (b->address, 1, gdb_stdout);
2428 }
2429 if (b->source_file)
2430 printf_filtered (": file %s, line %d.",
2431 b->source_file, b->line_number);
2432 }
bd5635a1
RP
2433 printf_filtered ("\n");
2434}
2435
bd5635a1
RP
2436\f
2437/* Set a breakpoint according to ARG (function, linenum or *address)
11054881
KH
2438 flag: first bit : 0 non-temporary, 1 temporary.
2439 second bit : 0 normal breakpoint, 1 hardware breakpoint. */
bd5635a1
RP
2440
2441static void
11054881 2442break_command_1 (arg, flag, from_tty)
bd5635a1 2443 char *arg;
11054881 2444 int flag, from_tty;
bd5635a1 2445{
11054881 2446 int tempflag, hardwareflag;
bd5635a1
RP
2447 struct symtabs_and_lines sals;
2448 struct symtab_and_line sal;
2449 register struct expression *cond = 0;
2450 register struct breakpoint *b;
2451
2452 /* Pointers in arg to the start, and one past the end, of the condition. */
2453 char *cond_start = NULL;
fee933f1 2454 char *cond_end = NULL;
bd5635a1
RP
2455 /* Pointers in arg to the start, and one past the end,
2456 of the address part. */
2457 char *addr_start = NULL;
fee933f1 2458 char *addr_end = NULL;
d889f6b7 2459 struct cleanup *old_chain;
fee933f1 2460 struct cleanup *canonical_strings_chain = NULL;
d889f6b7 2461 char **canonical = (char **)NULL;
bd5635a1 2462 int i;
199b2450 2463 int thread;
bd5635a1 2464
e8bf33c4
JK
2465 hardwareflag = flag & BP_HARDWAREFLAG;
2466 tempflag = flag & BP_TEMPFLAG;
11054881 2467
bd5635a1
RP
2468 sals.sals = NULL;
2469 sals.nelts = 0;
2470
6b038bd9 2471 INIT_SAL (&sal); /* initialize to zeroes */
bd5635a1
RP
2472
2473 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
2474
2475 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
2476 && (arg[2] == ' ' || arg[2] == '\t')))
2477 {
2478 if (default_breakpoint_valid)
2479 {
2480 sals.sals = (struct symtab_and_line *)
2481 xmalloc (sizeof (struct symtab_and_line));
2482 sal.pc = default_breakpoint_address;
2483 sal.line = default_breakpoint_line;
2484 sal.symtab = default_breakpoint_symtab;
6b038bd9 2485 sal.section = find_pc_overlay (sal.pc);
bd5635a1
RP
2486 sals.sals[0] = sal;
2487 sals.nelts = 1;
2488 }
2489 else
2490 error ("No default breakpoint address now.");
2491 }
2492 else
2493 {
2494 addr_start = arg;
2495
2496 /* Force almost all breakpoints to be in terms of the
2497 current_source_symtab (which is decode_line_1's default). This
2498 should produce the results we want almost all of the time while
2499 leaving default_breakpoint_* alone. */
2500 if (default_breakpoint_valid
2501 && (!current_source_symtab
2502 || (arg && (*arg == '+' || *arg == '-'))))
2503 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
d889f6b7 2504 default_breakpoint_line, &canonical);
bd5635a1 2505 else
d889f6b7 2506 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, &canonical);
bd5635a1
RP
2507
2508 addr_end = arg;
2509 }
2510
2511 if (! sals.nelts)
2512 return;
2513
d889f6b7
JK
2514 /* Make sure that all storage allocated in decode_line_1 gets freed in case
2515 the following `for' loop errors out. */
2516 old_chain = make_cleanup (free, sals.sals);
2517 if (canonical != (char **)NULL)
2518 {
2519 make_cleanup (free, canonical);
2520 canonical_strings_chain = make_cleanup (null_cleanup, 0);
2521 for (i = 0; i < sals.nelts; i++)
2522 {
2523 if (canonical[i] != NULL)
2524 make_cleanup (free, canonical[i]);
2525 }
2526 }
2527
199b2450
TL
2528 thread = -1; /* No specific thread yet */
2529
30875e1c
SG
2530 /* Resolve all line numbers to PC's, and verify that conditions
2531 can be parsed, before setting any breakpoints. */
bd5635a1
RP
2532 for (i = 0; i < sals.nelts; i++)
2533 {
199b2450
TL
2534 char *tok, *end_tok;
2535 int toklen;
2536
30875e1c 2537 resolve_sal_pc (&sals.sals[i]);
bd5635a1 2538
199b2450
TL
2539 tok = arg;
2540
2541 while (tok && *tok)
bd5635a1 2542 {
199b2450
TL
2543 while (*tok == ' ' || *tok == '\t')
2544 tok++;
2545
2546 end_tok = tok;
2547
2548 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
2549 end_tok++;
2550
2551 toklen = end_tok - tok;
2552
2553 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
2554 {
2555 tok = cond_start = end_tok + 1;
2556 cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
2557 cond_end = tok;
2558 }
2559 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
bd5635a1 2560 {
199b2450
TL
2561 char *tmptok;
2562
2563 tok = end_tok + 1;
2564 tmptok = tok;
2565 thread = strtol (tok, &tok, 0);
2566 if (tok == tmptok)
2567 error ("Junk after thread keyword.");
2568 if (!valid_thread_id (thread))
2569 error ("Unknown thread %d\n", thread);
bd5635a1
RP
2570 }
2571 else
2572 error ("Junk at end of arguments.");
2573 }
bd5635a1 2574 }
11054881
KH
2575 if (hardwareflag)
2576 {
557f3a0e
SS
2577 int i, target_resources_ok;
2578
2579 i = hw_breakpoint_used_count ();
2580 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT (
2581 bp_hardware_breakpoint, i + sals.nelts, 0);
11054881
KH
2582 if (target_resources_ok == 0)
2583 error ("No hardware breakpoint support in the target.");
2584 else if (target_resources_ok < 0)
2585 error ("Hardware breakpoints used exceeds limit.");
2586 }
bd5635a1 2587
d889f6b7
JK
2588 /* Remove the canonical strings from the cleanup, they are needed below. */
2589 if (canonical != (char **)NULL)
2590 discard_cleanups (canonical_strings_chain);
2591
30875e1c 2592 /* Now set all the breakpoints. */
bd5635a1
RP
2593 for (i = 0; i < sals.nelts; i++)
2594 {
2595 sal = sals.sals[i];
2596
2597 if (from_tty)
6b038bd9 2598 describe_other_breakpoints (sal.pc, sal.section);
bd5635a1
RP
2599
2600 b = set_raw_breakpoint (sal);
2601 set_breakpoint_count (breakpoint_count + 1);
2602 b->number = breakpoint_count;
11054881 2603 b->type = hardwareflag ? bp_hardware_breakpoint : bp_breakpoint;
bd5635a1 2604 b->cond = cond;
199b2450 2605 b->thread = thread;
0a97f6c4 2606
d889f6b7
JK
2607 /* If a canonical line spec is needed use that instead of the
2608 command string. */
2609 if (canonical != (char **)NULL && canonical[i] != NULL)
2610 b->addr_string = canonical[i];
2611 else if (addr_start)
bd5635a1
RP
2612 b->addr_string = savestring (addr_start, addr_end - addr_start);
2613 if (cond_start)
2614 b->cond_string = savestring (cond_start, cond_end - cond_start);
2615
30875e1c 2616 b->enable = enabled;
e8bf33c4 2617 b->disposition = tempflag ? del : donttouch;
bd5635a1
RP
2618 mention (b);
2619 }
2620
2621 if (sals.nelts > 1)
2622 {
833e0d94
JK
2623 printf_filtered ("Multiple breakpoints were set.\n");
2624 printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
bd5635a1 2625 }
d889f6b7 2626 do_cleanups (old_chain);
bd5635a1
RP
2627}
2628
30875e1c
SG
2629/* Helper function for break_command_1 and disassemble_command. */
2630
2631void
2632resolve_sal_pc (sal)
2633 struct symtab_and_line *sal;
2634{
2635 CORE_ADDR pc;
2636
6b038bd9 2637 if (sal->pc == 0 && sal->symtab != NULL)
30875e1c 2638 {
895cc8ab 2639 if (!find_line_pc (sal->symtab, sal->line, &pc))
30875e1c
SG
2640 error ("No line %d in file \"%s\".",
2641 sal->line, sal->symtab->filename);
2642 sal->pc = pc;
2643 }
6b038bd9
DT
2644
2645 if (sal->section == 0 && sal->symtab != NULL)
2646 {
2647 struct blockvector *bv;
2648 struct block *b;
2649 struct symbol *sym;
2650 int index;
2651
2652 bv = blockvector_for_pc_sect (sal->pc, 0, &index, sal->symtab);
895cc8ab 2653 if (bv != NULL)
6b038bd9 2654 {
895cc8ab
KS
2655 b = BLOCKVECTOR_BLOCK (bv, index);
2656 sym = block_function (b);
2657 if (sym != NULL)
2658 {
2659 fixup_symbol_section (sym, sal->symtab->objfile);
6ee2da94
FCE
2660 sal->section = SYMBOL_BFD_SECTION (sym);
2661 }
2662 else
2663 {
2664 /* It really is worthwhile to have the section, so we'll just
2665 have to look harder. This case can be executed if we have
2666 line numbers but no functions (as can happen in assembly
2667 source). */
2668
2669 struct minimal_symbol *msym;
2670
2671 msym = lookup_minimal_symbol_by_pc (sal->pc);
2672 if (msym)
2673 sal->section = SYMBOL_BFD_SECTION (msym);
895cc8ab 2674 }
6b038bd9
DT
2675 }
2676 }
30875e1c
SG
2677}
2678
bd5635a1
RP
2679void
2680break_command (arg, from_tty)
2681 char *arg;
2682 int from_tty;
2683{
2684 break_command_1 (arg, 0, from_tty);
2685}
2686
2687static void
2688tbreak_command (arg, from_tty)
2689 char *arg;
2690 int from_tty;
2691{
11054881
KH
2692 break_command_1 (arg, BP_TEMPFLAG, from_tty);
2693}
2694
2695static void
2696hbreak_command (arg, from_tty)
2697 char *arg;
2698 int from_tty;
2699{
2700 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
2701}
2702
2703static void
2704thbreak_command (arg, from_tty)
2705 char *arg;
2706 int from_tty;
2707{
2708 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
bd5635a1
RP
2709}
2710
bdbd5f50 2711/* ARGSUSED */
11054881
KH
2712/* accessflag: 0: watch write, 1: watch read, 2: watch access(read or write)
2713*/
bd5635a1 2714static void
11054881 2715watch_command_1 (arg, accessflag, from_tty)
bd5635a1 2716 char *arg;
11054881 2717 int accessflag;
bd5635a1
RP
2718 int from_tty;
2719{
2720 struct breakpoint *b;
2721 struct symtab_and_line sal;
f266e564
JK
2722 struct expression *exp;
2723 struct block *exp_valid_block;
11054881 2724 struct value *val, *mark;
b607efe7
FF
2725 struct frame_info *frame;
2726 struct frame_info *prev_frame = NULL;
11054881
KH
2727 char *exp_start = NULL;
2728 char *exp_end = NULL;
2729 char *tok, *end_tok;
2730 int toklen;
2731 char *cond_start = NULL;
2732 char *cond_end = NULL;
2733 struct expression *cond = NULL;
6b038bd9 2734 int i, other_type_used, target_resources_ok = 0;
11054881
KH
2735 enum bptype bp_type;
2736 int mem_cnt = 0;
bd5635a1 2737
6b038bd9 2738 INIT_SAL (&sal); /* initialize to zeroes */
bd5635a1 2739
f266e564
JK
2740 /* Parse arguments. */
2741 innermost_block = NULL;
11054881
KH
2742 exp_start = arg;
2743 exp = parse_exp_1 (&arg, 0, 0);
2744 exp_end = arg;
f266e564 2745 exp_valid_block = innermost_block;
11054881 2746 mark = value_mark ();
f266e564
JK
2747 val = evaluate_expression (exp);
2748 release_value (val);
2d313932
JK
2749 if (VALUE_LAZY (val))
2750 value_fetch_lazy (val);
f266e564 2751
11054881
KH
2752 tok = arg;
2753 while (*tok == ' ' || *tok == '\t')
2754 tok++;
2755 end_tok = tok;
2756
2757 while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
2758 end_tok++;
2759
2760 toklen = end_tok - tok;
2761 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
2762 {
2763 tok = cond_start = end_tok + 1;
2764 cond = parse_exp_1 (&tok, 0, 0);
2765 cond_end = tok;
2766 }
2767 if (*tok)
2768 error("Junk at end of command.");
2769
2770 if (accessflag == 1) bp_type = bp_read_watchpoint;
2771 else if (accessflag == 2) bp_type = bp_access_watchpoint;
2772 else bp_type = bp_hardware_watchpoint;
2773
2774 mem_cnt = can_use_hardware_watchpoint (val);
2775 if (mem_cnt == 0 && bp_type != bp_hardware_watchpoint)
2776 error ("Expression cannot be implemented with read/access watchpoint.");
2777 if (mem_cnt != 0) {
2778 i = hw_watchpoint_used_count (bp_type, &other_type_used);
2779 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
2780 bp_type, i + mem_cnt, other_type_used);
2781 if (target_resources_ok == 0 && bp_type != bp_hardware_watchpoint)
2782 error ("Target does not have this type of hardware watchpoint support.");
2783 if (target_resources_ok < 0 && bp_type != bp_hardware_watchpoint)
2784 error ("Target resources have been allocated for other types of watchpoints.");
2785 }
2786
f266e564 2787 /* Now set up the breakpoint. */
bd5635a1
RP
2788 b = set_raw_breakpoint (sal);
2789 set_breakpoint_count (breakpoint_count + 1);
2790 b->number = breakpoint_count;
30875e1c 2791 b->disposition = donttouch;
f266e564
JK
2792 b->exp = exp;
2793 b->exp_valid_block = exp_valid_block;
11054881 2794 b->exp_string = savestring (exp_start, exp_end - exp_start);
f266e564 2795 b->val = val;
11054881
KH
2796 b->cond = cond;
2797 if (cond_start)
2798 b->cond_string = savestring (cond_start, cond_end - cond_start);
2799 else
2800 b->cond_string = 0;
2801
999dd04b
JL
2802 frame = block_innermost_frame (exp_valid_block);
2803 if (frame)
2804 {
2805 prev_frame = get_prev_frame (frame);
706dc3ce 2806 b->watchpoint_frame = frame->frame;
999dd04b
JL
2807 }
2808 else
9e8db445 2809 b->watchpoint_frame = (CORE_ADDR)0;
999dd04b 2810
11054881
KH
2811 if (mem_cnt && target_resources_ok > 0)
2812 b->type = bp_type;
999dd04b
JL
2813 else
2814 b->type = bp_watchpoint;
2815
2816 /* If the expression is "local", then set up a "watchpoint scope"
2817 breakpoint at the point where we've left the scope of the watchpoint
2818 expression. */
2819 if (innermost_block)
2820 {
999dd04b
JL
2821 if (prev_frame)
2822 {
6b038bd9
DT
2823 struct breakpoint *scope_breakpoint;
2824 struct symtab_and_line scope_sal;
2825
2826 INIT_SAL (&scope_sal); /* initialize to zeroes */
2827 scope_sal.pc = get_frame_pc (prev_frame);
2828 scope_sal.section = find_pc_overlay (scope_sal.pc);
2829
999dd04b
JL
2830 scope_breakpoint = set_raw_breakpoint (scope_sal);
2831 set_breakpoint_count (breakpoint_count + 1);
2832 scope_breakpoint->number = breakpoint_count;
2833
2834 scope_breakpoint->type = bp_watchpoint_scope;
2835 scope_breakpoint->enable = enabled;
2836
2837 /* Automatically delete the breakpoint when it hits. */
e8bf33c4 2838 scope_breakpoint->disposition = del;
999dd04b
JL
2839
2840 /* Only break in the proper frame (help with recursion). */
2841 scope_breakpoint->frame = prev_frame->frame;
2842
2843 /* Set the address at which we will stop. */
2844 scope_breakpoint->address = get_frame_pc (prev_frame);
2845
2846 /* The scope breakpoint is related to the watchpoint. We
2847 will need to act on them together. */
2848 b->related_breakpoint = scope_breakpoint;
2849 }
2850 }
11054881 2851 value_free_to_mark (mark);
bd5635a1
RP
2852 mention (b);
2853}
999dd04b 2854
11054881
KH
2855/* Return count of locations need to be watched and can be handled
2856 in hardware. If the watchpoint can not be handled
999dd04b
JL
2857 in hardware return zero. */
2858
2859static int
11054881
KH
2860can_use_hardware_watchpoint (v)
2861 struct value *v;
999dd04b 2862{
11054881 2863 int found_memory_cnt = 0;
999dd04b
JL
2864
2865 /* Make sure all the intermediate values are in memory. Also make sure
2866 we found at least one memory expression. Guards against watch 0x12345,
2867 which is meaningless, but could cause errors if one tries to insert a
2868 hardware watchpoint for the constant expression. */
11054881 2869 for ( ; v; v = v->next)
999dd04b 2870 {
11054881
KH
2871 if (v->lval == lval_memory)
2872 {
2873 if (TYPE_LENGTH (VALUE_TYPE (v)) <= REGISTER_SIZE)
2874 found_memory_cnt++;
2875 }
2876 else if (v->lval != not_lval && v->modifiable == 0)
999dd04b 2877 return 0;
999dd04b
JL
2878 }
2879
2880 /* The expression itself looks suitable for using a hardware
2881 watchpoint, but give the target machine a chance to reject it. */
11054881
KH
2882 return found_memory_cnt;
2883}
2884
2885static void watch_command (arg, from_tty)
2886 char *arg;
2887 int from_tty;
2888{
2889 watch_command_1 (arg, 0, from_tty);
2890}
2891
2892static void rwatch_command (arg, from_tty)
2893 char *arg;
2894 int from_tty;
2895{
2896 watch_command_1 (arg, 1, from_tty);
2897}
2898
2899static void awatch_command (arg, from_tty)
2900 char *arg;
2901 int from_tty;
2902{
2903 watch_command_1 (arg, 2, from_tty);
999dd04b
JL
2904}
2905
bd5635a1 2906\f
706dc3ce
JL
2907/* Helper routine for the until_command routine in infcmd.c. Here
2908 because it uses the mechanisms of breakpoints. */
2909
bdbd5f50 2910/* ARGSUSED */
bd5635a1
RP
2911void
2912until_break_command (arg, from_tty)
2913 char *arg;
2914 int from_tty;
2915{
2916 struct symtabs_and_lines sals;
2917 struct symtab_and_line sal;
706dc3ce 2918 struct frame_info *prev_frame = get_prev_frame (selected_frame);
30875e1c
SG
2919 struct breakpoint *breakpoint;
2920 struct cleanup *old_chain;
bd5635a1
RP
2921
2922 clear_proceed_status ();
2923
2924 /* Set a breakpoint where the user wants it and at return from
2925 this function */
2926
2927 if (default_breakpoint_valid)
2928 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
d889f6b7 2929 default_breakpoint_line, (char ***)NULL);
bd5635a1 2930 else
d889f6b7 2931 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0, (char ***)NULL);
bd5635a1
RP
2932
2933 if (sals.nelts != 1)
2934 error ("Couldn't get information on specified line.");
2935
2936 sal = sals.sals[0];
c8950965 2937 free ((PTR)sals.sals); /* malloc'd, so freed */
bd5635a1
RP
2938
2939 if (*arg)
2940 error ("Junk at end of arguments.");
2941
30875e1c 2942 resolve_sal_pc (&sal);
bd5635a1 2943
30875e1c 2944 breakpoint = set_momentary_breakpoint (sal, selected_frame, bp_until);
bd5635a1 2945
ad3b8c4a 2946 old_chain = make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
30875e1c 2947
bd5635a1
RP
2948 /* Keep within the current frame */
2949
2950 if (prev_frame)
2951 {
706dc3ce
JL
2952 sal = find_pc_line (prev_frame->pc, 0);
2953 sal.pc = prev_frame->pc;
30875e1c 2954 breakpoint = set_momentary_breakpoint (sal, prev_frame, bp_until);
ad3b8c4a 2955 make_cleanup ((make_cleanup_func) delete_breakpoint, breakpoint);
bd5635a1
RP
2956 }
2957
d7e7e851 2958 proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
30875e1c 2959 do_cleanups(old_chain);
bd5635a1
RP
2960}
2961\f
bdbd5f50
JG
2962#if 0
2963/* These aren't used; I don't konw what they were for. */
bd5635a1
RP
2964/* Set a breakpoint at the catch clause for NAME. */
2965static int
2966catch_breakpoint (name)
2967 char *name;
2968{
2969}
2970
2971static int
2972disable_catch_breakpoint ()
2973{
2974}
2975
2976static int
2977delete_catch_breakpoint ()
2978{
2979}
2980
2981static int
2982enable_catch_breakpoint ()
2983{
2984}
bdbd5f50 2985#endif /* 0 */
bd5635a1
RP
2986
2987struct sal_chain
2988{
2989 struct sal_chain *next;
2990 struct symtab_and_line sal;
2991};
2992
bdbd5f50
JG
2993#if 0
2994/* This isn't used; I don't know what it was for. */
bd5635a1
RP
2995/* For each catch clause identified in ARGS, run FUNCTION
2996 with that clause as an argument. */
2997static struct symtabs_and_lines
2998map_catch_names (args, function)
2999 char *args;
3000 int (*function)();
3001{
3002 register char *p = args;
3003 register char *p1;
3004 struct symtabs_and_lines sals;
bdbd5f50 3005#if 0
bd5635a1 3006 struct sal_chain *sal_chain = 0;
bdbd5f50 3007#endif
bd5635a1
RP
3008
3009 if (p == 0)
3010 error_no_arg ("one or more catch names");
3011
3012 sals.nelts = 0;
3013 sals.sals = NULL;
3014
3015 while (*p)
3016 {
3017 p1 = p;
3018 /* Don't swallow conditional part. */
3019 if (p1[0] == 'i' && p1[1] == 'f'
3020 && (p1[2] == ' ' || p1[2] == '\t'))
3021 break;
3022
3023 if (isalpha (*p1))
3024 {
3025 p1++;
3026 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
3027 p1++;
3028 }
3029
3030 if (*p1 && *p1 != ' ' && *p1 != '\t')
3031 error ("Arguments must be catch names.");
3032
3033 *p1 = 0;
3034#if 0
3035 if (function (p))
3036 {
6b038bd9
DT
3037 struct sal_chain *next = (struct sal_chain *)
3038 alloca (sizeof (struct sal_chain));
bd5635a1
RP
3039 next->next = sal_chain;
3040 next->sal = get_catch_sal (p);
3041 sal_chain = next;
3042 goto win;
3043 }
3044#endif
199b2450 3045 printf_unfiltered ("No catch clause for exception %s.\n", p);
bdbd5f50 3046#if 0
bd5635a1 3047 win:
bdbd5f50 3048#endif
bd5635a1
RP
3049 p = p1;
3050 while (*p == ' ' || *p == '\t') p++;
3051 }
3052}
bdbd5f50 3053#endif /* 0 */
bd5635a1
RP
3054
3055/* This shares a lot of code with `print_frame_label_vars' from stack.c. */
3056
3057static struct symtabs_and_lines
3058get_catch_sals (this_level_only)
3059 int this_level_only;
3060{
bd5635a1 3061 register struct blockvector *bl;
777bef06 3062 register struct block *block;
bd5635a1 3063 int index, have_default = 0;
777bef06 3064 CORE_ADDR pc;
bd5635a1
RP
3065 struct symtabs_and_lines sals;
3066 struct sal_chain *sal_chain = 0;
3067 char *blocks_searched;
3068
777bef06
JK
3069 /* Not sure whether an error message is always the correct response,
3070 but it's better than a core dump. */
3071 if (selected_frame == NULL)
3072 error ("No selected frame.");
3073 block = get_frame_block (selected_frame);
706dc3ce 3074 pc = selected_frame->pc;
777bef06 3075
bd5635a1
RP
3076 sals.nelts = 0;
3077 sals.sals = NULL;
3078
3079 if (block == 0)
3080 error ("No symbol table info available.\n");
3081
3082 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
3083 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
4ed3a9ea 3084 memset (blocks_searched, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
bd5635a1
RP
3085
3086 while (block != 0)
3087 {
3088 CORE_ADDR end = BLOCK_END (block) - 4;
3089 int last_index;
3090
3091 if (bl != blockvector_for_pc (end, &index))
3092 error ("blockvector blotch");
3093 if (BLOCKVECTOR_BLOCK (bl, index) != block)
3094 error ("blockvector botch");
3095 last_index = BLOCKVECTOR_NBLOCKS (bl);
3096 index += 1;
3097
3098 /* Don't print out blocks that have gone by. */
3099 while (index < last_index
3100 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
3101 index++;
3102
3103 while (index < last_index
3104 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
3105 {
3106 if (blocks_searched[index] == 0)
3107 {
3108 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
3109 int nsyms;
3110 register int i;
3111 register struct symbol *sym;
3112
3113 nsyms = BLOCK_NSYMS (b);
3114
3115 for (i = 0; i < nsyms; i++)
3116 {
3117 sym = BLOCK_SYM (b, i);
2d313932 3118 if (STREQ (SYMBOL_NAME (sym), "default"))
bd5635a1
RP
3119 {
3120 if (have_default)
3121 continue;
3122 have_default = 1;
3123 }
3124 if (SYMBOL_CLASS (sym) == LOC_LABEL)
3125 {
3126 struct sal_chain *next = (struct sal_chain *)
3127 alloca (sizeof (struct sal_chain));
3128 next->next = sal_chain;
3129 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
3130 sal_chain = next;
3131 }
3132 }
3133 blocks_searched[index] = 1;
3134 }
3135 index++;
3136 }
3137 if (have_default)
3138 break;
3139 if (sal_chain && this_level_only)
3140 break;
3141
3142 /* After handling the function's top-level block, stop.
3143 Don't continue to its superblock, the block of
3144 per-file symbols. */
3145 if (BLOCK_FUNCTION (block))
3146 break;
3147 block = BLOCK_SUPERBLOCK (block);
3148 }
3149
3150 if (sal_chain)
3151 {
3152 struct sal_chain *tmp_chain;
3153
3154 /* Count the number of entries. */
3155 for (index = 0, tmp_chain = sal_chain; tmp_chain;
3156 tmp_chain = tmp_chain->next)
3157 index++;
3158
3159 sals.nelts = index;
3160 sals.sals = (struct symtab_and_line *)
3161 xmalloc (index * sizeof (struct symtab_and_line));
3162 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
3163 sals.sals[index] = sal_chain->sal;
3164 }
3165
3166 return sals;
3167}
3168
3169/* Commands to deal with catching exceptions. */
3170
30875e1c 3171static void
bd5635a1
RP
3172catch_command_1 (arg, tempflag, from_tty)
3173 char *arg;
3174 int tempflag;
3175 int from_tty;
3176{
3177 /* First, translate ARG into something we can deal with in terms
3178 of breakpoints. */
3179
3180 struct symtabs_and_lines sals;
3181 struct symtab_and_line sal;
3182 register struct expression *cond = 0;
3183 register struct breakpoint *b;
3184 char *save_arg;
3185 int i;
bd5635a1 3186
6b038bd9 3187 INIT_SAL (&sal); /* initialize to zeroes */
bd5635a1
RP
3188
3189 /* If no arg given, or if first arg is 'if ', all active catch clauses
3190 are breakpointed. */
3191
3192 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
3193 && (arg[2] == ' ' || arg[2] == '\t')))
3194 {
3195 /* Grab all active catch clauses. */
3196 sals = get_catch_sals (0);
3197 }
3198 else
3199 {
3200 /* Grab selected catch clauses. */
fe675038 3201 error ("catch NAME not implemented");
bdbd5f50
JG
3202#if 0
3203 /* This isn't used; I don't know what it was for. */
bd5635a1 3204 sals = map_catch_names (arg, catch_breakpoint);
bdbd5f50 3205#endif
bd5635a1
RP
3206 }
3207
3208 if (! sals.nelts)
3209 return;
3210
3211 save_arg = arg;
3212 for (i = 0; i < sals.nelts; i++)
3213 {
30875e1c 3214 resolve_sal_pc (&sals.sals[i]);
bd5635a1
RP
3215
3216 while (arg && *arg)
3217 {
3218 if (arg[0] == 'i' && arg[1] == 'f'
3219 && (arg[2] == ' ' || arg[2] == '\t'))
30875e1c
SG
3220 cond = parse_exp_1 ((arg += 2, &arg),
3221 block_for_pc (sals.sals[i].pc), 0);
bd5635a1
RP
3222 else
3223 error ("Junk at end of arguments.");
3224 }
3225 arg = save_arg;
bd5635a1
RP
3226 }
3227
3228 for (i = 0; i < sals.nelts; i++)
3229 {
3230 sal = sals.sals[i];
3231
3232 if (from_tty)
6b038bd9 3233 describe_other_breakpoints (sal.pc, sal.section);
bd5635a1
RP
3234
3235 b = set_raw_breakpoint (sal);
30875e1c
SG
3236 set_breakpoint_count (breakpoint_count + 1);
3237 b->number = breakpoint_count;
3238 b->type = bp_breakpoint;
bd5635a1 3239 b->cond = cond;
30875e1c 3240 b->enable = enabled;
e8bf33c4 3241 b->disposition = tempflag ? del : donttouch;
bd5635a1 3242
d889f6b7 3243 mention (b);
bd5635a1
RP
3244 }
3245
3246 if (sals.nelts > 1)
3247 {
199b2450
TL
3248 printf_unfiltered ("Multiple breakpoints were set.\n");
3249 printf_unfiltered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
bd5635a1 3250 }
c8950965 3251 free ((PTR)sals.sals);
bd5635a1
RP
3252}
3253
e8bf33c4
JK
3254/* Used by the gui, could be made a worker for other things. */
3255
3256struct breakpoint *
3257set_breakpoint_sal (sal)
6b038bd9 3258 struct symtab_and_line sal;
e8bf33c4
JK
3259{
3260 struct breakpoint *b;
3261 b = set_raw_breakpoint (sal);
3262 set_breakpoint_count (breakpoint_count + 1);
3263 b->number = breakpoint_count;
3264 b->type = bp_breakpoint;
3265 b->cond = 0;
3266 b->thread = -1;
3267 return b;
3268}
3269
bdbd5f50
JG
3270#if 0
3271/* These aren't used; I don't know what they were for. */
bd5635a1
RP
3272/* Disable breakpoints on all catch clauses described in ARGS. */
3273static void
3274disable_catch (args)
3275 char *args;
3276{
3277 /* Map the disable command to catch clauses described in ARGS. */
3278}
3279
3280/* Enable breakpoints on all catch clauses described in ARGS. */
3281static void
3282enable_catch (args)
3283 char *args;
3284{
3285 /* Map the disable command to catch clauses described in ARGS. */
3286}
3287
3288/* Delete breakpoints on all catch clauses in the active scope. */
3289static void
3290delete_catch (args)
3291 char *args;
3292{
3293 /* Map the delete command to catch clauses described in ARGS. */
3294}
bdbd5f50 3295#endif /* 0 */
bd5635a1
RP
3296
3297static void
3298catch_command (arg, from_tty)
3299 char *arg;
3300 int from_tty;
3301{
3302 catch_command_1 (arg, 0, from_tty);
3303}
3304\f
3305static void
3306clear_command (arg, from_tty)
3307 char *arg;
3308 int from_tty;
3309{
3310 register struct breakpoint *b, *b1;
3311 struct symtabs_and_lines sals;
3312 struct symtab_and_line sal;
3313 register struct breakpoint *found;
3314 int i;
3315
3316 if (arg)
3317 {
3318 sals = decode_line_spec (arg, 1);
3319 }
3320 else
3321 {
6b038bd9
DT
3322 sals.sals = (struct symtab_and_line *)
3323 xmalloc (sizeof (struct symtab_and_line));
3324 INIT_SAL (&sal); /* initialize to zeroes */
bd5635a1
RP
3325 sal.line = default_breakpoint_line;
3326 sal.symtab = default_breakpoint_symtab;
bd5635a1
RP
3327 if (sal.symtab == 0)
3328 error ("No source file specified.");
3329
3330 sals.sals[0] = sal;
3331 sals.nelts = 1;
3332 }
3333
3334 for (i = 0; i < sals.nelts; i++)
3335 {
3336 /* If exact pc given, clear bpts at that pc.
3337 But if sal.pc is zero, clear all bpts on specified line. */
3338 sal = sals.sals[i];
3339 found = (struct breakpoint *) 0;
6b038bd9 3340
bd5635a1 3341 while (breakpoint_chain
d889f6b7 3342 && (sal.pc
6b038bd9
DT
3343 ? (breakpoint_chain->address == sal.pc &&
3344 (overlay_debugging == 0 ||
3345 breakpoint_chain->section == sal.section))
d889f6b7
JK
3346 : (breakpoint_chain->source_file != NULL
3347 && sal.symtab != NULL
3348 && STREQ (breakpoint_chain->source_file,
3349 sal.symtab->filename)
bd5635a1
RP
3350 && breakpoint_chain->line_number == sal.line)))
3351 {
3352 b1 = breakpoint_chain;
3353 breakpoint_chain = b1->next;
3354 b1->next = found;
3355 found = b1;
3356 }
3357
3358 ALL_BREAKPOINTS (b)
3359 while (b->next
30875e1c 3360 && b->next->type != bp_watchpoint
999dd04b 3361 && b->next->type != bp_hardware_watchpoint
11054881
KH
3362 && b->next->type != bp_read_watchpoint
3363 && b->next->type != bp_access_watchpoint
d889f6b7 3364 && (sal.pc
6b038bd9
DT
3365 ? (b->next->address == sal.pc &&
3366 (overlay_debugging == 0 ||
3367 b->next->section == sal.section))
d889f6b7
JK
3368 : (b->next->source_file != NULL
3369 && sal.symtab != NULL
3370 && STREQ (b->next->source_file, sal.symtab->filename)
bd5635a1
RP
3371 && b->next->line_number == sal.line)))
3372 {
3373 b1 = b->next;
3374 b->next = b1->next;
3375 b1->next = found;
3376 found = b1;
3377 }
3378
3379 if (found == 0)
3380 {
3381 if (arg)
3382 error ("No breakpoint at %s.", arg);
3383 else
3384 error ("No breakpoint at this line.");
3385 }
3386
3387 if (found->next) from_tty = 1; /* Always report if deleted more than one */
199b2450 3388 if (from_tty) printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
6c803036 3389 breakpoints_changed ();
bd5635a1
RP
3390 while (found)
3391 {
199b2450 3392 if (from_tty) printf_unfiltered ("%d ", found->number);
bd5635a1
RP
3393 b1 = found->next;
3394 delete_breakpoint (found);
3395 found = b1;
3396 }
199b2450 3397 if (from_tty) putchar_unfiltered ('\n');
bd5635a1 3398 }
c8950965 3399 free ((PTR)sals.sals);
bd5635a1
RP
3400}
3401\f
e51481f9
JL
3402/* Delete breakpoint in BS if they are `delete' breakpoints and
3403 all breakpoints that are marked for deletion, whether hit or not.
bd5635a1
RP
3404 This is called after any breakpoint is hit, or after errors. */
3405
3406void
3407breakpoint_auto_delete (bs)
3408 bpstat bs;
3409{
e51481f9
JL
3410 struct breakpoint *b, *temp;
3411
bd5635a1 3412 for (; bs; bs = bs->next)
e8bf33c4 3413 if (bs->breakpoint_at && bs->breakpoint_at->disposition == del
cef4c2e7 3414 && bs->stop)
bd5635a1 3415 delete_breakpoint (bs->breakpoint_at);
e51481f9
JL
3416
3417 ALL_BREAKPOINTS_SAFE (b, temp)
3418 {
3419 if (b->disposition == del_at_next_stop)
3420 delete_breakpoint (b);
3421 }
bd5635a1
RP
3422}
3423
3424/* Delete a breakpoint and clean up all traces of it in the data structures. */
3425
30875e1c 3426void
bd5635a1
RP
3427delete_breakpoint (bpt)
3428 struct breakpoint *bpt;
3429{
3430 register struct breakpoint *b;
3431 register bpstat bs;
3432
754e5da2
SG
3433 if (delete_breakpoint_hook)
3434 delete_breakpoint_hook (bpt);
3435
bd5635a1 3436 if (bpt->inserted)
999dd04b
JL
3437 remove_breakpoint (bpt);
3438
bd5635a1
RP
3439 if (breakpoint_chain == bpt)
3440 breakpoint_chain = bpt->next;
3441
3442 ALL_BREAKPOINTS (b)
3443 if (b->next == bpt)
3444 {
3445 b->next = bpt->next;
3446 break;
3447 }
3448
6b038bd9 3449 check_duplicates (bpt->address, bpt->section);
fe675038
JK
3450 /* If this breakpoint was inserted, and there is another breakpoint
3451 at the same address, we need to insert the other breakpoint. */
999dd04b 3452 if (bpt->inserted
11054881
KH
3453 && bpt->type != bp_hardware_watchpoint
3454 && bpt->type != bp_read_watchpoint
3455 && bpt->type != bp_access_watchpoint)
fe675038
JK
3456 {
3457 ALL_BREAKPOINTS (b)
ebad9e90 3458 if (b->address == bpt->address
6b038bd9 3459 && b->section == bpt->section
ebad9e90 3460 && !b->duplicate
fa3764e2
JL
3461 && b->enable != disabled
3462 && b->enable != shlib_disabled)
fe675038
JK
3463 {
3464 int val;
3465 val = target_insert_breakpoint (b->address, b->shadow_contents);
3466 if (val != 0)
3467 {
05052b63 3468 target_terminal_ours_for_output ();
199b2450 3469 fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
fe675038
JK
3470 memory_error (val, b->address); /* which bombs us out */
3471 }
3472 else
3473 b->inserted = 1;
3474 }
3475 }
bd5635a1
RP
3476
3477 free_command_lines (&bpt->commands);
3478 if (bpt->cond)
d889f6b7 3479 free (bpt->cond);
bd5635a1 3480 if (bpt->cond_string != NULL)
d889f6b7 3481 free (bpt->cond_string);
bd5635a1 3482 if (bpt->addr_string != NULL)
d889f6b7 3483 free (bpt->addr_string);
39ce6829
PS
3484 if (bpt->exp != NULL)
3485 free (bpt->exp);
0eaaa46a 3486 if (bpt->exp_string != NULL)
d889f6b7 3487 free (bpt->exp_string);
39ce6829
PS
3488 if (bpt->val != NULL)
3489 value_free (bpt->val);
d889f6b7
JK
3490 if (bpt->source_file != NULL)
3491 free (bpt->source_file);
bd5635a1 3492
bd5635a1 3493 /* Be sure no bpstat's are pointing at it after it's been freed. */
05052b63
JK
3494 /* FIXME, how can we find all bpstat's?
3495 We just check stop_bpstat for now. */
bd5635a1
RP
3496 for (bs = stop_bpstat; bs; bs = bs->next)
3497 if (bs->breakpoint_at == bpt)
3498 bs->breakpoint_at = NULL;
c8950965 3499 free ((PTR)bpt);
bd5635a1
RP
3500}
3501
895cc8ab 3502void
bd5635a1
RP
3503delete_command (arg, from_tty)
3504 char *arg;
3505 int from_tty;
3506{
6b038bd9 3507 struct breakpoint *b, *temp;
bd5635a1
RP
3508
3509 if (arg == 0)
3510 {
895cc8ab
KS
3511 int breaks_to_delete = 0;
3512
3513 /* Delete all breakpoints if no argument.
3514 Do not delete internal or call-dummy breakpoints, these
3515 have to be deleted with an explicit breakpoint number argument. */
3516 ALL_BREAKPOINTS (b)
3517 {
3518 if (b->type != bp_call_dummy && b->number >= 0)
3519 breaks_to_delete = 1;
3520 }
3521
bd5635a1
RP
3522 /* Ask user only if there are some breakpoints to delete. */
3523 if (!from_tty
895cc8ab 3524 || (breaks_to_delete && query ("Delete all breakpoints? ")))
bd5635a1 3525 {
895cc8ab
KS
3526 ALL_BREAKPOINTS_SAFE (b, temp)
3527 {
3528 if (b->type != bp_call_dummy && b->number >= 0)
3529 delete_breakpoint (b);
3530 }
bd5635a1
RP
3531 }
3532 }
3533 else
3534 map_breakpoint_numbers (arg, delete_breakpoint);
3535}
3536
bdbd5f50
JG
3537/* Reset a breakpoint given it's struct breakpoint * BINT.
3538 The value we return ends up being the return value from catch_errors.
3539 Unused in this case. */
3540
3541static int
bd5635a1 3542breakpoint_re_set_one (bint)
bdbd5f50 3543 char *bint;
bd5635a1
RP
3544{
3545 struct breakpoint *b = (struct breakpoint *)bint; /* get past catch_errs */
11054881 3546 struct value *mark;
bd5635a1
RP
3547 int i;
3548 struct symtabs_and_lines sals;
bd5635a1 3549 char *s;
30875e1c 3550 enum enable save_enable;
bd5635a1 3551
80ba48f5 3552 switch (b->type)
bd5635a1 3553 {
80ba48f5 3554 case bp_breakpoint:
11054881 3555 case bp_hardware_breakpoint:
80ba48f5
SG
3556 if (b->addr_string == NULL)
3557 {
3558 /* Anything without a string can't be re-set. */
3559 delete_breakpoint (b);
3560 return 0;
3561 }
30875e1c
SG
3562 /* In case we have a problem, disable this breakpoint. We'll restore
3563 its status if we succeed. */
3564 save_enable = b->enable;
3565 b->enable = disabled;
3566
706dc3ce
JL
3567 set_language (b->language);
3568 input_radix = b->input_radix;
bd5635a1 3569 s = b->addr_string;
d889f6b7 3570 sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0, (char ***)NULL);
bd5635a1
RP
3571 for (i = 0; i < sals.nelts; i++)
3572 {
30875e1c 3573 resolve_sal_pc (&sals.sals[i]);
fee933f1
RP
3574
3575 /* Reparse conditions, they might contain references to the
3576 old symtab. */
3577 if (b->cond_string != NULL)
3578 {
3579 s = b->cond_string;
3580 if (b->cond)
3581 free ((PTR)b->cond);
3582 b->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc), 0);
3583 }
3584
3585 /* We need to re-set the breakpoint if the address changes...*/
d889f6b7 3586 if (b->address != sals.sals[i].pc
fee933f1
RP
3587 /* ...or new and old breakpoints both have source files, and
3588 the source file name or the line number changes... */
d889f6b7
JK
3589 || (b->source_file != NULL
3590 && sals.sals[i].symtab != NULL
3591 && (!STREQ (b->source_file, sals.sals[i].symtab->filename)
3592 || b->line_number != sals.sals[i].line)
fee933f1
RP
3593 )
3594 /* ...or we switch between having a source file and not having
3595 one. */
3596 || ((b->source_file == NULL) != (sals.sals[i].symtab == NULL))
3597 )
bd5635a1 3598 {
d889f6b7
JK
3599 if (b->source_file != NULL)
3600 free (b->source_file);
3601 if (sals.sals[i].symtab == NULL)
3602 b->source_file = NULL;
3603 else
3604 b->source_file =
3605 savestring (sals.sals[i].symtab->filename,
3606 strlen (sals.sals[i].symtab->filename));
8537ba60
SG
3607 b->line_number = sals.sals[i].line;
3608 b->address = sals.sals[i].pc;
6b038bd9 3609 check_duplicates (b->address, b->section);
bd5635a1 3610
8537ba60 3611 mention (b);
6c803036
JK
3612
3613 /* Might be better to do this just once per breakpoint_re_set,
3614 rather than once for every breakpoint. */
3615 breakpoints_changed ();
8537ba60 3616 }
6b038bd9 3617 b->section = sals.sals[i].section;
30875e1c 3618 b->enable = save_enable; /* Restore it, this worked. */
bd5635a1 3619 }
c8950965 3620 free ((PTR)sals.sals);
80ba48f5 3621 break;
2d313932 3622
80ba48f5 3623 case bp_watchpoint:
999dd04b 3624 case bp_hardware_watchpoint:
11054881
KH
3625 case bp_read_watchpoint:
3626 case bp_access_watchpoint:
0eaaa46a 3627 innermost_block = NULL;
0a97f6c4
JK
3628 /* The issue arises of what context to evaluate this in. The same
3629 one as when it was set, but what does that mean when symbols have
3630 been re-read? We could save the filename and functionname, but
3631 if the context is more local than that, the best we could do would
3632 be something like how many levels deep and which index at that
3633 particular level, but that's going to be less stable than filenames
3634 or functionnames. */
3635 /* So for now, just use a global context. */
39ce6829
PS
3636 if (b->exp)
3637 free ((PTR)b->exp);
0eaaa46a
JK
3638 b->exp = parse_expression (b->exp_string);
3639 b->exp_valid_block = innermost_block;
11054881 3640 mark = value_mark ();
39ce6829
PS
3641 if (b->val)
3642 value_free (b->val);
0eaaa46a
JK
3643 b->val = evaluate_expression (b->exp);
3644 release_value (b->val);
3645 if (VALUE_LAZY (b->val))
3646 value_fetch_lazy (b->val);
3647
2d313932
JK
3648 if (b->cond_string != NULL)
3649 {
3650 s = b->cond_string;
39ce6829
PS
3651 if (b->cond)
3652 free ((PTR)b->cond);
2d313932
JK
3653 b->cond = parse_exp_1 (&s, (struct block *)0, 0);
3654 }
cabd4da6
JK
3655 if (b->enable == enabled)
3656 mention (b);
11054881 3657 value_free_to_mark (mark);
80ba48f5 3658 break;
2d313932 3659
80ba48f5
SG
3660 default:
3661 printf_filtered ("Deleting unknown breakpoint type %d\n", b->type);
2d313932 3662 /* fall through */
fa3764e2
JL
3663 /* Delete longjmp breakpoints, they will be reset later by
3664 breakpoint_re_set. */
80ba48f5
SG
3665 case bp_longjmp:
3666 case bp_longjmp_resume:
3667 delete_breakpoint (b);
3668 break;
27b6a1fa
JL
3669
3670 /* This breakpoint is special, it's set up when the inferior
3671 starts and we really don't want to touch it. */
3672 case bp_shlib_event:
fa3764e2
JL
3673
3674 /* Keep temporary breakpoints, which can be encountered when we step
3675 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
3676 Otherwise these should have been blown away via the cleanup chain
3677 or by breakpoint_init_inferior when we rerun the executable. */
3678 case bp_until:
3679 case bp_finish:
3680 case bp_watchpoint_scope:
3681 case bp_call_dummy:
3682 case bp_step_resume:
27b6a1fa 3683 break;
bd5635a1 3684 }
80ba48f5 3685
bdbd5f50 3686 return 0;
bd5635a1
RP
3687}
3688
3689/* Re-set all breakpoints after symbols have been re-loaded. */
3690void
3691breakpoint_re_set ()
3692{
cba0d141 3693 struct breakpoint *b, *temp;
706dc3ce
JL
3694 enum language save_language;
3695 int save_input_radix;
30875e1c
SG
3696 static char message1[] = "Error in re-setting breakpoint %d:\n";
3697 char message[sizeof (message1) + 30 /* slop */];
bd5635a1 3698
706dc3ce
JL
3699 save_language = current_language->la_language;
3700 save_input_radix = input_radix;
cba0d141 3701 ALL_BREAKPOINTS_SAFE (b, temp)
bd5635a1 3702 {
2d313932 3703 sprintf (message, message1, b->number); /* Format possible error msg */
fe675038
JK
3704 catch_errors (breakpoint_re_set_one, (char *) b, message,
3705 RETURN_MASK_ALL);
bd5635a1 3706 }
706dc3ce
JL
3707 set_language (save_language);
3708 input_radix = save_input_radix;
bd5635a1 3709
cd10c7e3
SG
3710#ifdef GET_LONGJMP_TARGET
3711 create_longjmp_breakpoint ("longjmp");
3712 create_longjmp_breakpoint ("_longjmp");
3713 create_longjmp_breakpoint ("siglongjmp");
6b038bd9 3714 create_longjmp_breakpoint ("_siglongjmp");
cd10c7e3
SG
3715 create_longjmp_breakpoint (NULL);
3716#endif
80ba48f5 3717
1eeba686 3718#if 0
0fe1522a 3719 /* Took this out (temporarily at least), since it produces an extra
1eeba686 3720 blank line at startup. This messes up the gdbtests. -PB */
bd5635a1
RP
3721 /* Blank line to finish off all those mention() messages we just printed. */
3722 printf_filtered ("\n");
1eeba686 3723#endif
bd5635a1
RP
3724}
3725\f
3726/* Set ignore-count of breakpoint number BPTNUM to COUNT.
3727 If from_tty is nonzero, it prints a message to that effect,
3728 which ends with a period (no newline). */
3729
3730void
3731set_ignore_count (bptnum, count, from_tty)
3732 int bptnum, count, from_tty;
3733{
3734 register struct breakpoint *b;
3735
3736 if (count < 0)
3737 count = 0;
3738
3739 ALL_BREAKPOINTS (b)
3740 if (b->number == bptnum)
3741 {
3742 b->ignore_count = count;
3743 if (!from_tty)
3744 return;
3745 else if (count == 0)
423e9664
SG
3746 printf_filtered ("Will stop next time breakpoint %d is reached.",
3747 bptnum);
bd5635a1 3748 else if (count == 1)
423e9664
SG
3749 printf_filtered ("Will ignore next crossing of breakpoint %d.",
3750 bptnum);
bd5635a1 3751 else
423e9664 3752 printf_filtered ("Will ignore next %d crossings of breakpoint %d.",
bd5635a1 3753 count, bptnum);
6c803036 3754 breakpoints_changed ();
bd5635a1
RP
3755 return;
3756 }
3757
3758 error ("No breakpoint number %d.", bptnum);
3759}
3760
3761/* Clear the ignore counts of all breakpoints. */
3762void
3763breakpoint_clear_ignore_counts ()
3764{
3765 struct breakpoint *b;
3766
3767 ALL_BREAKPOINTS (b)
3768 b->ignore_count = 0;
3769}
3770
3771/* Command to set ignore-count of breakpoint N to COUNT. */
3772
3773static void
3774ignore_command (args, from_tty)
3775 char *args;
3776 int from_tty;
3777{
3778 char *p = args;
3779 register int num;
3780
3781 if (p == 0)
3782 error_no_arg ("a breakpoint number");
3783
3784 num = get_number (&p);
3785
3786 if (*p == 0)
3787 error ("Second argument (specified ignore-count) is missing.");
3788
bdbd5f50
JG
3789 set_ignore_count (num,
3790 longest_to_int (value_as_long (parse_and_eval (p))),
3791 from_tty);
423e9664 3792 printf_filtered ("\n");
6c803036 3793 breakpoints_changed ();
bd5635a1
RP
3794}
3795\f
3796/* Call FUNCTION on each of the breakpoints
3797 whose numbers are given in ARGS. */
3798
3799static void
3800map_breakpoint_numbers (args, function)
3801 char *args;
30875e1c 3802 void (*function) PARAMS ((struct breakpoint *));
bd5635a1
RP
3803{
3804 register char *p = args;
3805 char *p1;
3806 register int num;
3807 register struct breakpoint *b;
3808
3809 if (p == 0)
3810 error_no_arg ("one or more breakpoint numbers");
3811
3812 while (*p)
3813 {
3814 p1 = p;
3815
3816 num = get_number (&p1);
3817
3818 ALL_BREAKPOINTS (b)
3819 if (b->number == num)
3820 {
999dd04b 3821 struct breakpoint *related_breakpoint = b->related_breakpoint;
bd5635a1 3822 function (b);
999dd04b
JL
3823 if (related_breakpoint)
3824 function (related_breakpoint);
bd5635a1
RP
3825 goto win;
3826 }
199b2450 3827 printf_unfiltered ("No breakpoint number %d.\n", num);
bd5635a1
RP
3828 win:
3829 p = p1;
3830 }
3831}
3832
e8bf33c4 3833void
bd5635a1
RP
3834disable_breakpoint (bpt)
3835 struct breakpoint *bpt;
3836{
999dd04b
JL
3837 /* Never disable a watchpoint scope breakpoint; we want to
3838 hit them when we leave scope so we can delete both the
3839 watchpoint and its scope breakpoint at that time. */
3840 if (bpt->type == bp_watchpoint_scope)
3841 return;
3842
bd5635a1
RP
3843 bpt->enable = disabled;
3844
6b038bd9 3845 check_duplicates (bpt->address, bpt->section);
e8bf33c4
JK
3846
3847 if (modify_breakpoint_hook)
3848 modify_breakpoint_hook (bpt);
bd5635a1
RP
3849}
3850
bdbd5f50 3851/* ARGSUSED */
bd5635a1
RP
3852static void
3853disable_command (args, from_tty)
3854 char *args;
3855 int from_tty;
3856{
3857 register struct breakpoint *bpt;
3858 if (args == 0)
3859 ALL_BREAKPOINTS (bpt)
423e9664
SG
3860 switch (bpt->type)
3861 {
3862 case bp_breakpoint:
11054881
KH
3863 case bp_hardware_breakpoint:
3864 case bp_watchpoint:
3865 case bp_hardware_watchpoint:
3866 case bp_read_watchpoint:
3867 case bp_access_watchpoint:
423e9664
SG
3868 disable_breakpoint (bpt);
3869 default:
3870 continue;
3871 }
bd5635a1
RP
3872 else
3873 map_breakpoint_numbers (args, disable_breakpoint);
3874}
3875
3876static void
3f37b696 3877do_enable_breakpoint (bpt, disposition)
bd5635a1 3878 struct breakpoint *bpt;
3f37b696 3879 enum bpdisp disposition;
bd5635a1 3880{
706dc3ce 3881 struct frame_info *save_selected_frame = NULL;
11054881
KH
3882 int save_selected_frame_level = -1;
3883 int target_resources_ok, other_type_used;
3884 struct value *mark;
3885
3f37b696
FF
3886 if (bpt->type == bp_hardware_breakpoint)
3887 {
11054881
KH
3888 int i;
3889 i = hw_breakpoint_used_count();
3890 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
3891 bp_hardware_breakpoint, i+1, 0);
3892 if (target_resources_ok == 0)
3893 error ("No hardware breakpoint support in the target.");
3894 else if (target_resources_ok < 0)
3895 error ("Hardware breakpoints used exceeds limit.");
3896 }
3897
30875e1c 3898 bpt->enable = enabled;
3f37b696 3899 bpt->disposition = disposition;
6b038bd9 3900 check_duplicates (bpt->address, bpt->section);
6c803036 3901 breakpoints_changed ();
11054881
KH
3902
3903 if (bpt->type == bp_watchpoint || bpt->type == bp_hardware_watchpoint ||
3904 bpt->type == bp_read_watchpoint || bpt->type == bp_access_watchpoint)
3905 {
3906 if (bpt->exp_valid_block != NULL)
3907 {
706dc3ce
JL
3908 struct frame_info *fr =
3909 find_frame_addr_in_frame_chain (bpt->watchpoint_frame);
11054881
KH
3910 if (fr == NULL)
3911 {
3912 printf_filtered ("\
3913Cannot enable watchpoint %d because the block in which its expression\n\
3914is valid is not currently in scope.\n", bpt->number);
3915 bpt->enable = disabled;
3916 return;
3917 }
3918
3919 save_selected_frame = selected_frame;
3920 save_selected_frame_level = selected_frame_level;
3921 select_frame (fr, -1);
3922 }
3923
3924 value_free (bpt->val);
3925 mark = value_mark ();
3926 bpt->val = evaluate_expression (bpt->exp);
3927 release_value (bpt->val);
3928 if (VALUE_LAZY (bpt->val))
3929 value_fetch_lazy (bpt->val);
3930
3931 if (bpt->type == bp_hardware_watchpoint ||
3932 bpt->type == bp_read_watchpoint ||
3933 bpt->type == bp_access_watchpoint)
3934 {
3935 int i = hw_watchpoint_used_count (bpt->type, &other_type_used);
3f37b696
FF
3936 int mem_cnt = can_use_hardware_watchpoint (bpt->val);
3937
ad3b8c4a
JM
3938 /* Hack around 'unused var' error for some targets here */
3939 (void) mem_cnt, i;
11054881 3940 target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT(
3f37b696 3941 bpt->type, i + mem_cnt, other_type_used);
11054881
KH
3942 /* we can consider of type is bp_hardware_watchpoint, convert to
3943 bp_watchpoint in the following condition */
3944 if (target_resources_ok < 0)
3945 {
3946 printf_filtered("\
3947Cannot enable watchpoint %d because target watch resources\n\
3948have been allocated for other watchpoints.\n", bpt->number);
3f37b696
FF
3949 bpt->enable = disabled;
3950 value_free_to_mark (mark);
3951 return;
11054881
KH
3952 }
3953 }
3954
3955 if (save_selected_frame_level >= 0)
3956 select_frame (save_selected_frame, save_selected_frame_level);
3957 value_free_to_mark (mark);
3958 }
3f37b696
FF
3959 if (modify_breakpoint_hook)
3960 modify_breakpoint_hook (bpt);
3961}
3962
3963void
3964enable_breakpoint (bpt)
3965 struct breakpoint *bpt;
3966{
895cc8ab 3967 do_enable_breakpoint (bpt, bpt->disposition);
3f37b696
FF
3968}
3969
3970/* The enable command enables the specified breakpoints (or all defined
3971 breakpoints) so they once again become (or continue to be) effective
3972 in stopping the inferior. */
3973
3974/* ARGSUSED */
3975static void
3976enable_command (args, from_tty)
3977 char *args;
3978 int from_tty;
3979{
3980 register struct breakpoint *bpt;
3981 if (args == 0)
3982 ALL_BREAKPOINTS (bpt)
3983 switch (bpt->type)
3984 {
3985 case bp_breakpoint:
3986 case bp_hardware_breakpoint:
3987 case bp_watchpoint:
3988 case bp_hardware_watchpoint:
3989 case bp_read_watchpoint:
3990 case bp_access_watchpoint:
3991 enable_breakpoint (bpt);
3992 default:
3993 continue;
3994 }
3995 else
3996 map_breakpoint_numbers (args, enable_breakpoint);
3997}
3998
3999static void
4000enable_once_breakpoint (bpt)
4001 struct breakpoint *bpt;
4002{
4003 do_enable_breakpoint (bpt, disable);
bd5635a1
RP
4004}
4005
bdbd5f50 4006/* ARGSUSED */
bd5635a1
RP
4007static void
4008enable_once_command (args, from_tty)
4009 char *args;
4010 int from_tty;
4011{
4012 map_breakpoint_numbers (args, enable_once_breakpoint);
4013}
4014
4015static void
4016enable_delete_breakpoint (bpt)
4017 struct breakpoint *bpt;
4018{
3f37b696 4019 do_enable_breakpoint (bpt, del);
bd5635a1
RP
4020}
4021
bdbd5f50 4022/* ARGSUSED */
bd5635a1
RP
4023static void
4024enable_delete_command (args, from_tty)
4025 char *args;
4026 int from_tty;
4027{
4028 map_breakpoint_numbers (args, enable_delete_breakpoint);
4029}
4030\f
706dc3ce
JL
4031/* Use default_breakpoint_'s, or nothing if they aren't valid. */
4032
bd5635a1
RP
4033struct symtabs_and_lines
4034decode_line_spec_1 (string, funfirstline)
4035 char *string;
4036 int funfirstline;
4037{
4038 struct symtabs_and_lines sals;
4039 if (string == 0)
4040 error ("Empty line specification.");
4041 if (default_breakpoint_valid)
4042 sals = decode_line_1 (&string, funfirstline,
d889f6b7
JK
4043 default_breakpoint_symtab, default_breakpoint_line,
4044 (char ***)NULL);
bd5635a1 4045 else
d889f6b7
JK
4046 sals = decode_line_1 (&string, funfirstline,
4047 (struct symtab *)NULL, 0, (char ***)NULL);
bd5635a1
RP
4048 if (*string)
4049 error ("Junk at end of line specification: %s", string);
4050 return sals;
4051}
4052\f
bd5635a1
RP
4053void
4054_initialize_breakpoint ()
4055{
4056 breakpoint_chain = 0;
4057 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
4058 before a breakpoint is set. */
4059 breakpoint_count = 0;
4060
4061 add_com ("ignore", class_breakpoint, ignore_command,
557f3a0e
SS
4062 "Set ignore-count of breakpoint number N to COUNT.\n\
4063Usage is `ignore N COUNT'.");
bd5635a1
RP
4064
4065 add_com ("commands", class_breakpoint, commands_command,
4066 "Set commands to be executed when a breakpoint is hit.\n\
4067Give breakpoint number as argument after \"commands\".\n\
4068With no argument, the targeted breakpoint is the last one set.\n\
4069The commands themselves follow starting on the next line.\n\
4070Type a line containing \"end\" to indicate the end of them.\n\
4071Give \"silent\" as the first line to make the breakpoint silent;\n\
4072then no output is printed when it is hit, except what the commands print.");
4073
4074 add_com ("condition", class_breakpoint, condition_command,
4075 "Specify breakpoint number N to break only if COND is true.\n\
557f3a0e
SS
4076Usage is `condition N COND', where N is an integer and COND is an\n\
4077expression to be evaluated whenever breakpoint N is reached. ");
bd5635a1
RP
4078
4079 add_com ("tbreak", class_breakpoint, tbreak_command,
4080 "Set a temporary breakpoint. Args like \"break\" command.\n\
c4de6b30
JK
4081Like \"break\" except the breakpoint is only temporary,\n\
4082so it will be deleted when hit. Equivalent to \"break\" followed\n\
4083by using \"enable delete\" on the breakpoint number.");
bd5635a1 4084
11054881
KH
4085 add_com ("hbreak", class_breakpoint, hbreak_command,
4086 "Set a hardware assisted breakpoint. Args like \"break\" command.\n\
4087Like \"break\" except the breakpoint requires hardware support,\n\
4088some target hardware may not have this support.");
4089
4090 add_com ("thbreak", class_breakpoint, thbreak_command,
4091 "Set a temporary hardware assisted breakpoint. Args like \"break\" command.\n\
4092Like \"hbreak\" except the breakpoint is only temporary,\n\
4093so it will be deleted when hit.");
4094
bd5635a1
RP
4095 add_prefix_cmd ("enable", class_breakpoint, enable_command,
4096 "Enable some breakpoints.\n\
4097Give breakpoint numbers (separated by spaces) as arguments.\n\
4098With no subcommand, breakpoints are enabled until you command otherwise.\n\
4099This is used to cancel the effect of the \"disable\" command.\n\
4100With a subcommand you can enable temporarily.",
4101 &enablelist, "enable ", 1, &cmdlist);
4102
895cc8ab
KS
4103 add_com_alias ("en", "enable", class_breakpoint, 1);
4104
bd5635a1
RP
4105 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
4106 "Enable some breakpoints.\n\
4107Give breakpoint numbers (separated by spaces) as arguments.\n\
4108This is used to cancel the effect of the \"disable\" command.\n\
4109May be abbreviated to simply \"enable\".\n",
4110 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
4111
4112 add_cmd ("once", no_class, enable_once_command,
4113 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
bd2f0c85 4114If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
bd5635a1
RP
4115 &enablebreaklist);
4116
4117 add_cmd ("delete", no_class, enable_delete_command,
4118 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
4119If a breakpoint is hit while enabled in this fashion, it is deleted.",
4120 &enablebreaklist);
4121
4122 add_cmd ("delete", no_class, enable_delete_command,
4123 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
4124If a breakpoint is hit while enabled in this fashion, it is deleted.",
4125 &enablelist);
4126
4127 add_cmd ("once", no_class, enable_once_command,
4128 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
bd2f0c85 4129If a breakpoint is hit while enabled in this fashion, it becomes disabled.",
bd5635a1
RP
4130 &enablelist);
4131
4132 add_prefix_cmd ("disable", class_breakpoint, disable_command,
4133 "Disable some breakpoints.\n\
4134Arguments are breakpoint numbers with spaces in between.\n\
4135To disable all breakpoints, give no argument.\n\
4136A disabled breakpoint is not forgotten, but has no effect until reenabled.",
4137 &disablelist, "disable ", 1, &cmdlist);
4138 add_com_alias ("dis", "disable", class_breakpoint, 1);
4139 add_com_alias ("disa", "disable", class_breakpoint, 1);
4140
4141 add_cmd ("breakpoints", class_alias, disable_command,
4142 "Disable some breakpoints.\n\
4143Arguments are breakpoint numbers with spaces in between.\n\
4144To disable all breakpoints, give no argument.\n\
4145A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
4146This command may be abbreviated \"disable\".",
4147 &disablelist);
4148
4149 add_prefix_cmd ("delete", class_breakpoint, delete_command,
4150 "Delete some breakpoints or auto-display expressions.\n\
4151Arguments are breakpoint numbers with spaces in between.\n\
4152To delete all breakpoints, give no argument.\n\
4153\n\
4154Also a prefix command for deletion of other GDB objects.\n\
4155The \"unset\" command is also an alias for \"delete\".",
4156 &deletelist, "delete ", 1, &cmdlist);
4157 add_com_alias ("d", "delete", class_breakpoint, 1);
bd5635a1
RP
4158
4159 add_cmd ("breakpoints", class_alias, delete_command,
4160 "Delete some breakpoints or auto-display expressions.\n\
4161Arguments are breakpoint numbers with spaces in between.\n\
4162To delete all breakpoints, give no argument.\n\
4163This command may be abbreviated \"delete\".",
4164 &deletelist);
4165
4166 add_com ("clear", class_breakpoint, clear_command,
706dc3ce 4167 concat ("Clear breakpoint at specified line or function.\n\
bd5635a1
RP
4168Argument may be line number, function name, or \"*\" and an address.\n\
4169If line number is specified, all breakpoints in that line are cleared.\n\
4170If function is specified, breakpoints at beginning of function are cleared.\n\
706dc3ce
JL
4171If an address is specified, breakpoints at that address are cleared.\n\n",
4172"With no argument, clears all breakpoints in the line that the selected frame\n\
bd5635a1
RP
4173is executing in.\n\
4174\n\
706dc3ce 4175See also the \"delete\" command which clears breakpoints by number.", NULL));
bd5635a1
RP
4176
4177 add_com ("break", class_breakpoint, break_command,
706dc3ce 4178 concat ("Set breakpoint at specified line or function.\n\
bd5635a1
RP
4179Argument may be line number, function name, or \"*\" and an address.\n\
4180If line number is specified, break at start of code for that line.\n\
4181If function is specified, break at start of code for that function.\n\
706dc3ce
JL
4182If an address is specified, break at that exact address.\n",
4183"With no arg, uses current execution address of selected stack frame.\n\
bd5635a1
RP
4184This is useful for breaking on return to a stack frame.\n\
4185\n\
4186Multiple breakpoints at one place are permitted, and useful if conditional.\n\
4187\n\
706dc3ce 4188Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL));
bd5635a1
RP
4189 add_com_alias ("b", "break", class_run, 1);
4190 add_com_alias ("br", "break", class_run, 1);
4191 add_com_alias ("bre", "break", class_run, 1);
4192 add_com_alias ("brea", "break", class_run, 1);
4193
4194 add_info ("breakpoints", breakpoints_info,
706dc3ce 4195 concat ("Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
80ba48f5 4196The \"Type\" column indicates one of:\n\
423e9664
SG
4197\tbreakpoint - normal breakpoint\n\
4198\twatchpoint - watchpoint\n\
80ba48f5
SG
4199The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
4200the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
4201breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
706dc3ce
JL
4202address and file/line number respectively.\n\n",
4203"Convenience variable \"$_\" and default examine address for \"x\"\n\
80ba48f5
SG
4204are set to the address of the last breakpoint listed.\n\n\
4205Convenience variable \"$bpnum\" contains the number of the last\n\
706dc3ce 4206breakpoint set.", NULL));
80ba48f5 4207
9b280a7f
JG
4208#if MAINTENANCE_CMDS
4209
4210 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints,
706dc3ce 4211 concat ("Status of all breakpoints, or breakpoint number NUMBER.\n\
80ba48f5 4212The \"Type\" column indicates one of:\n\
423e9664
SG
4213\tbreakpoint - normal breakpoint\n\
4214\twatchpoint - watchpoint\n\
4215\tlongjmp - internal breakpoint used to step through longjmp()\n\
4216\tlongjmp resume - internal breakpoint at the target of longjmp()\n\
4217\tuntil - internal breakpoint used by the \"until\" command\n\
706dc3ce
JL
4218\tfinish - internal breakpoint used by the \"finish\" command\n",
4219"The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
80ba48f5
SG
4220the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
4221breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
706dc3ce
JL
4222address and file/line number respectively.\n\n",
4223"Convenience variable \"$_\" and default examine address for \"x\"\n\
bd5635a1
RP
4224are set to the address of the last breakpoint listed.\n\n\
4225Convenience variable \"$bpnum\" contains the number of the last\n\
706dc3ce 4226breakpoint set.", NULL),
9b280a7f
JG
4227 &maintenanceinfolist);
4228
4229#endif /* MAINTENANCE_CMDS */
bd5635a1
RP
4230
4231 add_com ("catch", class_breakpoint, catch_command,
4232 "Set breakpoints to catch exceptions that are raised.\n\
4233Argument may be a single exception to catch, multiple exceptions\n\
4234to catch, or the default exception \"default\". If no arguments\n\
4235are given, breakpoints are set at all exception handlers catch clauses\n\
4236within the current scope.\n\
4237\n\
4238A condition specified for the catch applies to all breakpoints set\n\
4239with this command\n\
4240\n\
4241Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
4242
4243 add_com ("watch", class_breakpoint, watch_command,
4244 "Set a watchpoint for an expression.\n\
4245A watchpoint stops execution of your program whenever the value of\n\
4246an expression changes.");
4247
11054881
KH
4248 add_com ("rwatch", class_breakpoint, rwatch_command,
4249 "Set a read watchpoint for an expression.\n\
4250A watchpoint stops execution of your program whenever the value of\n\
4251an expression is read.");
4252
4253 add_com ("awatch", class_breakpoint, awatch_command,
4254 "Set a watchpoint for an expression.\n\
4255A watchpoint stops execution of your program whenever the value of\n\
4256an expression is either read or written.");
4257
c8950965
JG
4258 add_info ("watchpoints", breakpoints_info,
4259 "Synonym for ``info breakpoints''.");
9f577285 4260
bd5635a1 4261}
This page took 0.51894 seconds and 4 git commands to generate.