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