2012-02-10 Pedro Alves <palves@redhat.com>
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
CommitLineData
c906108c 1/* Everything about breakpoints, for GDB.
8926118c 2
0b302171 3 Copyright (C) 1986-2012 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
a6d9a66e 21#include "arch-utils.h"
c906108c 22#include <ctype.h>
776592bf 23#include "hashtab.h"
c906108c
SS
24#include "symtab.h"
25#include "frame.h"
26#include "breakpoint.h"
1042e4c0 27#include "tracepoint.h"
c906108c
SS
28#include "gdbtypes.h"
29#include "expression.h"
30#include "gdbcore.h"
31#include "gdbcmd.h"
32#include "value.h"
33#include "command.h"
34#include "inferior.h"
35#include "gdbthread.h"
36#include "target.h"
37#include "language.h"
38#include "gdb_string.h"
50f182aa 39#include "gdb-demangle.h"
0ba1096a 40#include "filenames.h"
c906108c
SS
41#include "annotate.h"
42#include "symfile.h"
43#include "objfiles.h"
0378c332 44#include "source.h"
c5f0f3d0 45#include "linespec.h"
c94fdfd0 46#include "completer.h"
5b7f31a4 47#include "gdb.h"
8b93c638 48#include "ui-out.h"
e1507482 49#include "cli/cli-script.h"
0225421b 50#include "gdb_assert.h"
fe898f56 51#include "block.h"
a77053c2 52#include "solib.h"
84acb35a
JJ
53#include "solist.h"
54#include "observer.h"
60250e8b 55#include "exceptions.h"
765dc015 56#include "memattr.h"
f7f9143b 57#include "ada-lang.h"
d1aa2f50 58#include "top.h"
79a45b7d 59#include "valprint.h"
4efc6507 60#include "jit.h"
a96d9b2e 61#include "xml-syscall.h"
65d79d4b 62#include "parser-defs.h"
e9cafbcc 63#include "cli/cli-utils.h"
be34f849 64#include "continuations.h"
1bfeeb0f
JL
65#include "stack.h"
66#include "skip.h"
049e32d3 67#include "record.h"
edcc5120 68#include "gdb_regex.h"
c906108c 69
1042e4c0
SS
70/* readline include files */
71#include "readline/readline.h"
72#include "readline/history.h"
73
74/* readline defines this. */
75#undef savestring
76
034dad6f 77#include "mi/mi-common.h"
7371cf6d 78#include "python/python.h"
104c1213 79
4a64f543 80/* Prototypes for local functions. */
c906108c 81
a14ed312 82static void enable_delete_command (char *, int);
c906108c 83
a14ed312 84static void enable_once_command (char *, int);
c906108c 85
a14ed312 86static void disable_command (char *, int);
c906108c 87
a14ed312 88static void enable_command (char *, int);
c906108c 89
95a42b64
TT
90static void map_breakpoint_numbers (char *, void (*) (struct breakpoint *,
91 void *),
92 void *);
c906108c 93
a14ed312 94static void ignore_command (char *, int);
c906108c 95
4efb68b1 96static int breakpoint_re_set_one (void *);
c906108c 97
348d480f
PA
98static void breakpoint_re_set_default (struct breakpoint *);
99
983af33b
SDJ
100static void create_sals_from_address_default (char **,
101 struct linespec_result *,
102 enum bptype, char *,
103 char **);
104
105static void create_breakpoints_sal_default (struct gdbarch *,
106 struct linespec_result *,
107 struct linespec_sals *,
108 char *, enum bptype,
109 enum bpdisp, int, int,
110 int,
111 const struct breakpoint_ops *,
112 int, int, int);
113
114static void decode_linespec_default (struct breakpoint *, char **,
115 struct symtabs_and_lines *);
116
a14ed312 117static void clear_command (char *, int);
c906108c 118
a14ed312 119static void catch_command (char *, int);
c906108c 120
a9634178 121static int can_use_hardware_watchpoint (struct value *);
c906108c 122
98deb0da 123static void break_command_1 (char *, int, int);
c906108c 124
a14ed312 125static void mention (struct breakpoint *);
c906108c 126
348d480f
PA
127static struct breakpoint *set_raw_breakpoint_without_location (struct gdbarch *,
128 enum bptype,
c0a91b2b 129 const struct breakpoint_ops *);
3742cc8b
YQ
130static struct bp_location *add_location_to_breakpoint (struct breakpoint *,
131 const struct symtab_and_line *);
132
4a64f543
MS
133/* This function is used in gdbtk sources and thus can not be made
134 static. */
63c252f8 135struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch,
348d480f 136 struct symtab_and_line,
c0a91b2b
TT
137 enum bptype,
138 const struct breakpoint_ops *);
c906108c 139
06edf0c0
PA
140static struct breakpoint *
141 momentary_breakpoint_from_master (struct breakpoint *orig,
142 enum bptype type,
c0a91b2b 143 const struct breakpoint_ops *ops);
06edf0c0 144
76897487
KB
145static void breakpoint_adjustment_warning (CORE_ADDR, CORE_ADDR, int, int);
146
a6d9a66e
UW
147static CORE_ADDR adjust_breakpoint_address (struct gdbarch *gdbarch,
148 CORE_ADDR bpaddr,
88f7da05 149 enum bptype bptype);
76897487 150
6c95b8df
PA
151static void describe_other_breakpoints (struct gdbarch *,
152 struct program_space *, CORE_ADDR,
5af949e3 153 struct obj_section *, int);
c906108c 154
6c95b8df
PA
155static int breakpoint_address_match (struct address_space *aspace1,
156 CORE_ADDR addr1,
157 struct address_space *aspace2,
158 CORE_ADDR addr2);
159
85d721b8
PA
160static int watchpoint_locations_match (struct bp_location *loc1,
161 struct bp_location *loc2);
162
f1310107
TJB
163static int breakpoint_location_address_match (struct bp_location *bl,
164 struct address_space *aspace,
165 CORE_ADDR addr);
166
a14ed312 167static void breakpoints_info (char *, int);
c906108c 168
d77f58be
SS
169static void watchpoints_info (char *, int);
170
e5a67952
MS
171static int breakpoint_1 (char *, int,
172 int (*) (const struct breakpoint *));
c906108c 173
4efb68b1 174static int breakpoint_cond_eval (void *);
c906108c 175
4efb68b1 176static void cleanup_executing_breakpoints (void *);
c906108c 177
a14ed312 178static void commands_command (char *, int);
c906108c 179
a14ed312 180static void condition_command (char *, int);
c906108c 181
c5aa993b
JM
182typedef enum
183 {
184 mark_inserted,
185 mark_uninserted
186 }
187insertion_state_t;
c906108c 188
0bde7532 189static int remove_breakpoint (struct bp_location *, insertion_state_t);
6c95b8df 190static int remove_breakpoint_1 (struct bp_location *, insertion_state_t);
c906108c 191
e514a9d6 192static enum print_stop_action print_bp_stop_message (bpstat bs);
c906108c 193
4efb68b1 194static int watchpoint_check (void *);
c906108c 195
a14ed312 196static void maintenance_info_breakpoints (char *, int);
c906108c 197
a14ed312 198static int hw_breakpoint_used_count (void);
c906108c 199
a1398e0c
PA
200static int hw_watchpoint_use_count (struct breakpoint *);
201
202static int hw_watchpoint_used_count_others (struct breakpoint *except,
203 enum bptype type,
204 int *other_type_used);
c906108c 205
a14ed312 206static void hbreak_command (char *, int);
c906108c 207
a14ed312 208static void thbreak_command (char *, int);
c906108c 209
51be5b68 210static void enable_breakpoint_disp (struct breakpoint *, enum bpdisp);
c906108c 211
a14ed312 212static void stop_command (char *arg, int from_tty);
7a292a7a 213
a14ed312 214static void stopin_command (char *arg, int from_tty);
7a292a7a 215
a14ed312 216static void stopat_command (char *arg, int from_tty);
7a292a7a 217
a14ed312 218static char *ep_parse_optional_if_clause (char **arg);
7a292a7a 219
d85310f7
MS
220static void catch_exception_command_1 (enum exception_event_kind ex_event,
221 char *arg, int tempflag, int from_tty);
7a292a7a 222
a14ed312 223static void tcatch_command (char *arg, int from_tty);
7a292a7a 224
d03285ec
UW
225static void detach_single_step_breakpoints (void);
226
6c95b8df
PA
227static int single_step_breakpoint_inserted_here_p (struct address_space *,
228 CORE_ADDR pc);
1aafd4da 229
fe3f5fa8 230static void free_bp_location (struct bp_location *loc);
f431efe5
PA
231static void incref_bp_location (struct bp_location *loc);
232static void decref_bp_location (struct bp_location **loc);
fe3f5fa8 233
39d61571 234static struct bp_location *allocate_bp_location (struct breakpoint *bpt);
a5606eee 235
b60e7edf 236static void update_global_location_list (int);
a5606eee 237
b60e7edf 238static void update_global_location_list_nothrow (int);
74960c60 239
d77f58be 240static int is_hardware_watchpoint (const struct breakpoint *bpt);
74960c60
VP
241
242static void insert_breakpoint_locations (void);
a5606eee 243
a96d9b2e
SDJ
244static int syscall_catchpoint_p (struct breakpoint *b);
245
1042e4c0
SS
246static void tracepoints_info (char *, int);
247
248static void delete_trace_command (char *, int);
249
250static void enable_trace_command (char *, int);
251
252static void disable_trace_command (char *, int);
253
254static void trace_pass_command (char *, int);
255
9c06b0b4
TJB
256static int is_masked_watchpoint (const struct breakpoint *b);
257
983af33b
SDJ
258/* Return 1 if B refers to a static tracepoint set by marker ("-m"), zero
259 otherwise. */
260
261static int strace_marker_p (struct breakpoint *b);
0fb4aa4b 262
edcc5120
TT
263static void init_catchpoint (struct breakpoint *b,
264 struct gdbarch *gdbarch, int tempflag,
265 char *cond_string,
266 const struct breakpoint_ops *ops);
267
2060206e
PA
268/* The abstract base class all breakpoint_ops structures inherit
269 from. */
270static struct breakpoint_ops base_breakpoint_ops;
271
272/* The breakpoint_ops structure to be inherited by all breakpoint_ops
273 that are implemented on top of software or hardware breakpoints
274 (user breakpoints, internal and momentary breakpoints, etc.). */
275static struct breakpoint_ops bkpt_base_breakpoint_ops;
276
277/* Internal breakpoints class type. */
06edf0c0 278static struct breakpoint_ops internal_breakpoint_ops;
2060206e
PA
279
280/* Momentary breakpoints class type. */
06edf0c0
PA
281static struct breakpoint_ops momentary_breakpoint_ops;
282
2060206e
PA
283/* The breakpoint_ops structure to be used in regular user created
284 breakpoints. */
285struct breakpoint_ops bkpt_breakpoint_ops;
286
5cea2a26
PA
287/* A reference-counted struct command_line. This lets multiple
288 breakpoints share a single command list. */
289struct counted_command_line
290{
291 /* The reference count. */
292 int refc;
293
294 /* The command list. */
295 struct command_line *commands;
296};
297
298struct command_line *
299breakpoint_commands (struct breakpoint *b)
300{
301 return b->commands ? b->commands->commands : NULL;
302}
3daf8fe5 303
f3b1572e
PA
304/* Flag indicating that a command has proceeded the inferior past the
305 current breakpoint. */
306
307static int breakpoint_proceeded;
308
956a9fb9 309const char *
2cec12e5
AR
310bpdisp_text (enum bpdisp disp)
311{
4a64f543
MS
312 /* NOTE: the following values are a part of MI protocol and
313 represent values of 'disp' field returned when inferior stops at
314 a breakpoint. */
bc043ef3 315 static const char * const bpdisps[] = {"del", "dstp", "dis", "keep"};
cc59ec59 316
2cec12e5
AR
317 return bpdisps[(int) disp];
318}
c906108c 319
4a64f543 320/* Prototypes for exported functions. */
c906108c 321/* If FALSE, gdb will not use hardware support for watchpoints, even
4a64f543 322 if such is available. */
c906108c
SS
323static int can_use_hw_watchpoints;
324
920d2a44
AC
325static void
326show_can_use_hw_watchpoints (struct ui_file *file, int from_tty,
327 struct cmd_list_element *c,
328 const char *value)
329{
3e43a32a
MS
330 fprintf_filtered (file,
331 _("Debugger's willingness to use "
332 "watchpoint hardware is %s.\n"),
920d2a44
AC
333 value);
334}
335
fa8d40ab
JJ
336/* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
337 If AUTO_BOOLEAN_TRUE, gdb will automatically create pending breakpoints
4a64f543 338 for unrecognized breakpoint locations.
fa8d40ab
JJ
339 If AUTO_BOOLEAN_AUTO, gdb will query when breakpoints are unrecognized. */
340static enum auto_boolean pending_break_support;
920d2a44
AC
341static void
342show_pending_break_support (struct ui_file *file, int from_tty,
343 struct cmd_list_element *c,
344 const char *value)
345{
3e43a32a
MS
346 fprintf_filtered (file,
347 _("Debugger's behavior regarding "
348 "pending breakpoints is %s.\n"),
920d2a44
AC
349 value);
350}
fa8d40ab 351
765dc015 352/* If 1, gdb will automatically use hardware breakpoints for breakpoints
4a64f543 353 set with "break" but falling in read-only memory.
765dc015
VP
354 If 0, gdb will warn about such breakpoints, but won't automatically
355 use hardware breakpoints. */
356static int automatic_hardware_breakpoints;
357static void
358show_automatic_hardware_breakpoints (struct ui_file *file, int from_tty,
359 struct cmd_list_element *c,
360 const char *value)
361{
3e43a32a
MS
362 fprintf_filtered (file,
363 _("Automatic usage of hardware breakpoints is %s.\n"),
765dc015
VP
364 value);
365}
366
33e5cbd6
PA
367/* If on, gdb will keep breakpoints inserted even as inferior is
368 stopped, and immediately insert any new breakpoints. If off, gdb
369 will insert breakpoints into inferior only when resuming it, and
370 will remove breakpoints upon stop. If auto, GDB will behave as ON
371 if in non-stop mode, and as OFF if all-stop mode.*/
372
373static const char always_inserted_auto[] = "auto";
374static const char always_inserted_on[] = "on";
375static const char always_inserted_off[] = "off";
40478521 376static const char *const always_inserted_enums[] = {
33e5cbd6
PA
377 always_inserted_auto,
378 always_inserted_off,
379 always_inserted_on,
380 NULL
381};
382static const char *always_inserted_mode = always_inserted_auto;
383static void
74960c60 384show_always_inserted_mode (struct ui_file *file, int from_tty,
33e5cbd6 385 struct cmd_list_element *c, const char *value)
74960c60 386{
33e5cbd6 387 if (always_inserted_mode == always_inserted_auto)
3e43a32a
MS
388 fprintf_filtered (file,
389 _("Always inserted breakpoint "
390 "mode is %s (currently %s).\n"),
33e5cbd6
PA
391 value,
392 breakpoints_always_inserted_mode () ? "on" : "off");
393 else
3e43a32a
MS
394 fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"),
395 value);
74960c60
VP
396}
397
33e5cbd6
PA
398int
399breakpoints_always_inserted_mode (void)
400{
049e32d3
PA
401 return ((always_inserted_mode == always_inserted_on
402 || (always_inserted_mode == always_inserted_auto && non_stop))
403 && !RECORD_IS_USED);
33e5cbd6 404}
765dc015 405
a14ed312 406void _initialize_breakpoint (void);
c906108c 407
c906108c
SS
408/* Are we executing breakpoint commands? */
409static int executing_breakpoint_commands;
410
c02f5703
MS
411/* Are overlay event breakpoints enabled? */
412static int overlay_events_enabled;
413
e09342b5
TJB
414/* See description in breakpoint.h. */
415int target_exact_watchpoints = 0;
416
c906108c 417/* Walk the following statement or block through all breakpoints.
e5dd4106 418 ALL_BREAKPOINTS_SAFE does so even if the statement deletes the
4a64f543 419 current breakpoint. */
c906108c 420
5c44784c 421#define ALL_BREAKPOINTS(B) for (B = breakpoint_chain; B; B = B->next)
c906108c 422
5c44784c
JM
423#define ALL_BREAKPOINTS_SAFE(B,TMP) \
424 for (B = breakpoint_chain; \
425 B ? (TMP=B->next, 1): 0; \
426 B = TMP)
c906108c 427
4a64f543
MS
428/* Similar iterator for the low-level breakpoints. SAFE variant is
429 not provided so update_global_location_list must not be called
430 while executing the block of ALL_BP_LOCATIONS. */
7cc221ef 431
876fa593
JK
432#define ALL_BP_LOCATIONS(B,BP_TMP) \
433 for (BP_TMP = bp_location; \
434 BP_TMP < bp_location + bp_location_count && (B = *BP_TMP); \
435 BP_TMP++)
7cc221ef 436
1042e4c0
SS
437/* Iterator for tracepoints only. */
438
439#define ALL_TRACEPOINTS(B) \
440 for (B = breakpoint_chain; B; B = B->next) \
d77f58be 441 if (is_tracepoint (B))
1042e4c0 442
7cc221ef 443/* Chains of all breakpoints defined. */
c906108c
SS
444
445struct breakpoint *breakpoint_chain;
446
876fa593
JK
447/* Array is sorted by bp_location_compare - primarily by the ADDRESS. */
448
449static struct bp_location **bp_location;
450
451/* Number of elements of BP_LOCATION. */
452
453static unsigned bp_location_count;
454
4a64f543
MS
455/* Maximum alignment offset between bp_target_info.PLACED_ADDRESS and
456 ADDRESS for the current elements of BP_LOCATION which get a valid
457 result from bp_location_has_shadow. You can use it for roughly
458 limiting the subrange of BP_LOCATION to scan for shadow bytes for
459 an address you need to read. */
876fa593
JK
460
461static CORE_ADDR bp_location_placed_address_before_address_max;
462
4a64f543
MS
463/* Maximum offset plus alignment between bp_target_info.PLACED_ADDRESS
464 + bp_target_info.SHADOW_LEN and ADDRESS for the current elements of
465 BP_LOCATION which get a valid result from bp_location_has_shadow.
466 You can use it for roughly limiting the subrange of BP_LOCATION to
467 scan for shadow bytes for an address you need to read. */
876fa593
JK
468
469static CORE_ADDR bp_location_shadow_len_after_address_max;
7cc221ef 470
4a64f543
MS
471/* The locations that no longer correspond to any breakpoint, unlinked
472 from bp_location array, but for which a hit may still be reported
473 by a target. */
20874c92
VP
474VEC(bp_location_p) *moribund_locations = NULL;
475
c906108c
SS
476/* Number of last breakpoint made. */
477
95a42b64
TT
478static int breakpoint_count;
479
86b17b60
PA
480/* The value of `breakpoint_count' before the last command that
481 created breakpoints. If the last (break-like) command created more
482 than one breakpoint, then the difference between BREAKPOINT_COUNT
483 and PREV_BREAKPOINT_COUNT is more than one. */
484static int prev_breakpoint_count;
c906108c 485
1042e4c0
SS
486/* Number of last tracepoint made. */
487
95a42b64 488static int tracepoint_count;
1042e4c0 489
6149aea9
PA
490static struct cmd_list_element *breakpoint_set_cmdlist;
491static struct cmd_list_element *breakpoint_show_cmdlist;
9291a0cd 492struct cmd_list_element *save_cmdlist;
6149aea9 493
468d015d
JJ
494/* Return whether a breakpoint is an active enabled breakpoint. */
495static int
496breakpoint_enabled (struct breakpoint *b)
497{
0d381245 498 return (b->enable_state == bp_enabled);
468d015d
JJ
499}
500
c906108c
SS
501/* Set breakpoint count to NUM. */
502
95a42b64 503static void
fba45db2 504set_breakpoint_count (int num)
c906108c 505{
86b17b60 506 prev_breakpoint_count = breakpoint_count;
c906108c 507 breakpoint_count = num;
4fa62494 508 set_internalvar_integer (lookup_internalvar ("bpnum"), num);
c906108c
SS
509}
510
86b17b60
PA
511/* Used by `start_rbreak_breakpoints' below, to record the current
512 breakpoint count before "rbreak" creates any breakpoint. */
513static int rbreak_start_breakpoint_count;
514
95a42b64
TT
515/* Called at the start an "rbreak" command to record the first
516 breakpoint made. */
86b17b60 517
95a42b64
TT
518void
519start_rbreak_breakpoints (void)
520{
86b17b60 521 rbreak_start_breakpoint_count = breakpoint_count;
95a42b64
TT
522}
523
524/* Called at the end of an "rbreak" command to record the last
525 breakpoint made. */
86b17b60 526
95a42b64
TT
527void
528end_rbreak_breakpoints (void)
529{
86b17b60 530 prev_breakpoint_count = rbreak_start_breakpoint_count;
95a42b64
TT
531}
532
4a64f543 533/* Used in run_command to zero the hit count when a new run starts. */
c906108c
SS
534
535void
fba45db2 536clear_breakpoint_hit_counts (void)
c906108c
SS
537{
538 struct breakpoint *b;
539
540 ALL_BREAKPOINTS (b)
541 b->hit_count = 0;
542}
543
9add0f1b
TT
544/* Allocate a new counted_command_line with reference count of 1.
545 The new structure owns COMMANDS. */
546
547static struct counted_command_line *
548alloc_counted_command_line (struct command_line *commands)
549{
550 struct counted_command_line *result
551 = xmalloc (sizeof (struct counted_command_line));
cc59ec59 552
9add0f1b
TT
553 result->refc = 1;
554 result->commands = commands;
555 return result;
556}
557
558/* Increment reference count. This does nothing if CMD is NULL. */
559
560static void
561incref_counted_command_line (struct counted_command_line *cmd)
562{
563 if (cmd)
564 ++cmd->refc;
565}
566
567/* Decrement reference count. If the reference count reaches 0,
568 destroy the counted_command_line. Sets *CMDP to NULL. This does
569 nothing if *CMDP is NULL. */
570
571static void
572decref_counted_command_line (struct counted_command_line **cmdp)
573{
574 if (*cmdp)
575 {
576 if (--(*cmdp)->refc == 0)
577 {
578 free_command_lines (&(*cmdp)->commands);
579 xfree (*cmdp);
580 }
581 *cmdp = NULL;
582 }
583}
584
585/* A cleanup function that calls decref_counted_command_line. */
586
587static void
588do_cleanup_counted_command_line (void *arg)
589{
590 decref_counted_command_line (arg);
591}
592
593/* Create a cleanup that calls decref_counted_command_line on the
594 argument. */
595
596static struct cleanup *
597make_cleanup_decref_counted_command_line (struct counted_command_line **cmdp)
598{
599 return make_cleanup (do_cleanup_counted_command_line, cmdp);
600}
601
c906108c 602\f
48cb2d85
VP
603/* Return the breakpoint with the specified number, or NULL
604 if the number does not refer to an existing breakpoint. */
605
606struct breakpoint *
607get_breakpoint (int num)
608{
609 struct breakpoint *b;
610
611 ALL_BREAKPOINTS (b)
612 if (b->number == num)
613 return b;
614
615 return NULL;
616}
5c44784c 617
c906108c 618\f
adc36818
PM
619
620void
621set_breakpoint_condition (struct breakpoint *b, char *exp,
622 int from_tty)
623{
3a5c3e22
PA
624 xfree (b->cond_string);
625 b->cond_string = NULL;
adc36818 626
3a5c3e22 627 if (is_watchpoint (b))
adc36818 628 {
3a5c3e22
PA
629 struct watchpoint *w = (struct watchpoint *) b;
630
631 xfree (w->cond_exp);
632 w->cond_exp = NULL;
633 }
634 else
635 {
636 struct bp_location *loc;
637
638 for (loc = b->loc; loc; loc = loc->next)
639 {
640 xfree (loc->cond);
641 loc->cond = NULL;
642 }
adc36818 643 }
adc36818
PM
644
645 if (*exp == 0)
646 {
647 if (from_tty)
648 printf_filtered (_("Breakpoint %d now unconditional.\n"), b->number);
649 }
650 else
651 {
652 char *arg = exp;
cc59ec59 653
adc36818
PM
654 /* I don't know if it matters whether this is the string the user
655 typed in or the decompiled expression. */
656 b->cond_string = xstrdup (arg);
657 b->condition_not_parsed = 0;
658
659 if (is_watchpoint (b))
660 {
3a5c3e22
PA
661 struct watchpoint *w = (struct watchpoint *) b;
662
adc36818
PM
663 innermost_block = NULL;
664 arg = exp;
3a5c3e22 665 w->cond_exp = parse_exp_1 (&arg, 0, 0);
adc36818
PM
666 if (*arg)
667 error (_("Junk at end of expression"));
3a5c3e22 668 w->cond_exp_valid_block = innermost_block;
adc36818
PM
669 }
670 else
671 {
3a5c3e22
PA
672 struct bp_location *loc;
673
adc36818
PM
674 for (loc = b->loc; loc; loc = loc->next)
675 {
676 arg = exp;
677 loc->cond =
678 parse_exp_1 (&arg, block_for_pc (loc->address), 0);
679 if (*arg)
680 error (_("Junk at end of expression"));
681 }
682 }
683 }
684 breakpoints_changed ();
8d3788bd 685 observer_notify_breakpoint_modified (b);
adc36818
PM
686}
687
c906108c
SS
688/* condition N EXP -- set break condition of breakpoint N to EXP. */
689
690static void
fba45db2 691condition_command (char *arg, int from_tty)
c906108c 692{
52f0bd74 693 struct breakpoint *b;
c906108c 694 char *p;
52f0bd74 695 int bnum;
c906108c
SS
696
697 if (arg == 0)
e2e0b3e5 698 error_no_arg (_("breakpoint number"));
c906108c
SS
699
700 p = arg;
701 bnum = get_number (&p);
5c44784c 702 if (bnum == 0)
8a3fe4f8 703 error (_("Bad breakpoint argument: '%s'"), arg);
c906108c
SS
704
705 ALL_BREAKPOINTS (b)
706 if (b->number == bnum)
2f069f6f 707 {
7371cf6d
PM
708 /* Check if this breakpoint has a Python object assigned to
709 it, and if it has a definition of the "stop"
710 method. This method and conditions entered into GDB from
711 the CLI are mutually exclusive. */
712 if (b->py_bp_object
713 && gdbpy_breakpoint_has_py_cond (b->py_bp_object))
714 error (_("Cannot set a condition where a Python 'stop' "
715 "method has been defined in the breakpoint."));
2566ad2d 716 set_breakpoint_condition (b, p, from_tty);
2f069f6f
JB
717 return;
718 }
c906108c 719
8a3fe4f8 720 error (_("No breakpoint number %d."), bnum);
c906108c
SS
721}
722
a7bdde9e
VP
723/* Check that COMMAND do not contain commands that are suitable
724 only for tracepoints and not suitable for ordinary breakpoints.
4a64f543
MS
725 Throw if any such commands is found. */
726
a7bdde9e
VP
727static void
728check_no_tracepoint_commands (struct command_line *commands)
729{
730 struct command_line *c;
cc59ec59 731
a7bdde9e
VP
732 for (c = commands; c; c = c->next)
733 {
734 int i;
735
736 if (c->control_type == while_stepping_control)
3e43a32a
MS
737 error (_("The 'while-stepping' command can "
738 "only be used for tracepoints"));
a7bdde9e
VP
739
740 for (i = 0; i < c->body_count; ++i)
741 check_no_tracepoint_commands ((c->body_list)[i]);
742
743 /* Not that command parsing removes leading whitespace and comment
4a64f543 744 lines and also empty lines. So, we only need to check for
a7bdde9e
VP
745 command directly. */
746 if (strstr (c->line, "collect ") == c->line)
747 error (_("The 'collect' command can only be used for tracepoints"));
748
51661e93
VP
749 if (strstr (c->line, "teval ") == c->line)
750 error (_("The 'teval' command can only be used for tracepoints"));
a7bdde9e
VP
751 }
752}
753
d77f58be
SS
754/* Encapsulate tests for different types of tracepoints. */
755
d9b3f62e
PA
756static int
757is_tracepoint_type (enum bptype type)
758{
759 return (type == bp_tracepoint
760 || type == bp_fast_tracepoint
761 || type == bp_static_tracepoint);
762}
763
a7bdde9e 764int
d77f58be 765is_tracepoint (const struct breakpoint *b)
a7bdde9e 766{
d9b3f62e 767 return is_tracepoint_type (b->type);
a7bdde9e 768}
d9b3f62e 769
e5dd4106 770/* A helper function that validates that COMMANDS are valid for a
95a42b64
TT
771 breakpoint. This function will throw an exception if a problem is
772 found. */
48cb2d85 773
95a42b64
TT
774static void
775validate_commands_for_breakpoint (struct breakpoint *b,
776 struct command_line *commands)
48cb2d85 777{
d77f58be 778 if (is_tracepoint (b))
a7bdde9e 779 {
4a64f543
MS
780 /* We need to verify that each top-level element of commands is
781 valid for tracepoints, that there's at most one
782 while-stepping element, and that while-stepping's body has
783 valid tracing commands excluding nested while-stepping. */
a7bdde9e
VP
784 struct command_line *c;
785 struct command_line *while_stepping = 0;
786 for (c = commands; c; c = c->next)
787 {
a7bdde9e
VP
788 if (c->control_type == while_stepping_control)
789 {
790 if (b->type == bp_fast_tracepoint)
3e43a32a
MS
791 error (_("The 'while-stepping' command "
792 "cannot be used for fast tracepoint"));
0fb4aa4b 793 else if (b->type == bp_static_tracepoint)
3e43a32a
MS
794 error (_("The 'while-stepping' command "
795 "cannot be used for static tracepoint"));
a7bdde9e
VP
796
797 if (while_stepping)
3e43a32a
MS
798 error (_("The 'while-stepping' command "
799 "can be used only once"));
a7bdde9e
VP
800 else
801 while_stepping = c;
802 }
803 }
804 if (while_stepping)
805 {
806 struct command_line *c2;
807
808 gdb_assert (while_stepping->body_count == 1);
809 c2 = while_stepping->body_list[0];
810 for (; c2; c2 = c2->next)
811 {
a7bdde9e
VP
812 if (c2->control_type == while_stepping_control)
813 error (_("The 'while-stepping' command cannot be nested"));
814 }
815 }
816 }
817 else
818 {
819 check_no_tracepoint_commands (commands);
820 }
95a42b64
TT
821}
822
0fb4aa4b
PA
823/* Return a vector of all the static tracepoints set at ADDR. The
824 caller is responsible for releasing the vector. */
825
826VEC(breakpoint_p) *
827static_tracepoints_here (CORE_ADDR addr)
828{
829 struct breakpoint *b;
830 VEC(breakpoint_p) *found = 0;
831 struct bp_location *loc;
832
833 ALL_BREAKPOINTS (b)
834 if (b->type == bp_static_tracepoint)
835 {
836 for (loc = b->loc; loc; loc = loc->next)
837 if (loc->address == addr)
838 VEC_safe_push(breakpoint_p, found, b);
839 }
840
841 return found;
842}
843
95a42b64 844/* Set the command list of B to COMMANDS. If breakpoint is tracepoint,
4a64f543 845 validate that only allowed commands are included. */
95a42b64
TT
846
847void
4a64f543
MS
848breakpoint_set_commands (struct breakpoint *b,
849 struct command_line *commands)
95a42b64
TT
850{
851 validate_commands_for_breakpoint (b, commands);
a7bdde9e 852
9add0f1b
TT
853 decref_counted_command_line (&b->commands);
854 b->commands = alloc_counted_command_line (commands);
48cb2d85 855 breakpoints_changed ();
8d3788bd 856 observer_notify_breakpoint_modified (b);
48cb2d85
VP
857}
858
45a43567
TT
859/* Set the internal `silent' flag on the breakpoint. Note that this
860 is not the same as the "silent" that may appear in the breakpoint's
861 commands. */
862
863void
864breakpoint_set_silent (struct breakpoint *b, int silent)
865{
866 int old_silent = b->silent;
867
868 b->silent = silent;
869 if (old_silent != silent)
8d3788bd 870 observer_notify_breakpoint_modified (b);
45a43567
TT
871}
872
873/* Set the thread for this breakpoint. If THREAD is -1, make the
874 breakpoint work for any thread. */
875
876void
877breakpoint_set_thread (struct breakpoint *b, int thread)
878{
879 int old_thread = b->thread;
880
881 b->thread = thread;
882 if (old_thread != thread)
8d3788bd 883 observer_notify_breakpoint_modified (b);
45a43567
TT
884}
885
886/* Set the task for this breakpoint. If TASK is 0, make the
887 breakpoint work for any task. */
888
889void
890breakpoint_set_task (struct breakpoint *b, int task)
891{
892 int old_task = b->task;
893
894 b->task = task;
895 if (old_task != task)
8d3788bd 896 observer_notify_breakpoint_modified (b);
45a43567
TT
897}
898
95a42b64
TT
899void
900check_tracepoint_command (char *line, void *closure)
a7bdde9e
VP
901{
902 struct breakpoint *b = closure;
cc59ec59 903
a7bdde9e
VP
904 validate_actionline (&line, b);
905}
906
95a42b64
TT
907/* A structure used to pass information through
908 map_breakpoint_numbers. */
909
910struct commands_info
911{
912 /* True if the command was typed at a tty. */
913 int from_tty;
86b17b60
PA
914
915 /* The breakpoint range spec. */
916 char *arg;
917
95a42b64
TT
918 /* Non-NULL if the body of the commands are being read from this
919 already-parsed command. */
920 struct command_line *control;
86b17b60 921
95a42b64
TT
922 /* The command lines read from the user, or NULL if they have not
923 yet been read. */
924 struct counted_command_line *cmd;
925};
926
927/* A callback for map_breakpoint_numbers that sets the commands for
928 commands_command. */
929
c906108c 930static void
95a42b64 931do_map_commands_command (struct breakpoint *b, void *data)
c906108c 932{
95a42b64 933 struct commands_info *info = data;
c906108c 934
95a42b64
TT
935 if (info->cmd == NULL)
936 {
937 struct command_line *l;
5c44784c 938
95a42b64
TT
939 if (info->control != NULL)
940 l = copy_command_lines (info->control->body_list[0]);
941 else
86b17b60
PA
942 {
943 struct cleanup *old_chain;
944 char *str;
c5aa993b 945
3e43a32a
MS
946 str = xstrprintf (_("Type commands for breakpoint(s) "
947 "%s, one per line."),
86b17b60
PA
948 info->arg);
949
950 old_chain = make_cleanup (xfree, str);
951
952 l = read_command_lines (str,
953 info->from_tty, 1,
d77f58be 954 (is_tracepoint (b)
86b17b60
PA
955 ? check_tracepoint_command : 0),
956 b);
957
958 do_cleanups (old_chain);
959 }
a7bdde9e 960
95a42b64
TT
961 info->cmd = alloc_counted_command_line (l);
962 }
963
964 /* If a breakpoint was on the list more than once, we don't need to
965 do anything. */
966 if (b->commands != info->cmd)
967 {
968 validate_commands_for_breakpoint (b, info->cmd->commands);
969 incref_counted_command_line (info->cmd);
970 decref_counted_command_line (&b->commands);
971 b->commands = info->cmd;
972 breakpoints_changed ();
8d3788bd 973 observer_notify_breakpoint_modified (b);
c5aa993b 974 }
95a42b64
TT
975}
976
977static void
4a64f543
MS
978commands_command_1 (char *arg, int from_tty,
979 struct command_line *control)
95a42b64
TT
980{
981 struct cleanup *cleanups;
982 struct commands_info info;
983
984 info.from_tty = from_tty;
985 info.control = control;
986 info.cmd = NULL;
987 /* If we read command lines from the user, then `info' will hold an
988 extra reference to the commands that we must clean up. */
989 cleanups = make_cleanup_decref_counted_command_line (&info.cmd);
990
991 if (arg == NULL || !*arg)
992 {
86b17b60 993 if (breakpoint_count - prev_breakpoint_count > 1)
4a64f543
MS
994 arg = xstrprintf ("%d-%d", prev_breakpoint_count + 1,
995 breakpoint_count);
95a42b64
TT
996 else if (breakpoint_count > 0)
997 arg = xstrprintf ("%d", breakpoint_count);
86b17b60
PA
998 else
999 {
1000 /* So that we don't try to free the incoming non-NULL
1001 argument in the cleanup below. Mapping breakpoint
1002 numbers will fail in this case. */
1003 arg = NULL;
1004 }
95a42b64 1005 }
9766ced4
SS
1006 else
1007 /* The command loop has some static state, so we need to preserve
1008 our argument. */
1009 arg = xstrdup (arg);
86b17b60
PA
1010
1011 if (arg != NULL)
1012 make_cleanup (xfree, arg);
1013
1014 info.arg = arg;
95a42b64
TT
1015
1016 map_breakpoint_numbers (arg, do_map_commands_command, &info);
1017
1018 if (info.cmd == NULL)
1019 error (_("No breakpoints specified."));
1020
1021 do_cleanups (cleanups);
1022}
1023
1024static void
1025commands_command (char *arg, int from_tty)
1026{
1027 commands_command_1 (arg, from_tty, NULL);
c906108c 1028}
40c03ae8
EZ
1029
1030/* Like commands_command, but instead of reading the commands from
1031 input stream, takes them from an already parsed command structure.
1032
1033 This is used by cli-script.c to DTRT with breakpoint commands
1034 that are part of if and while bodies. */
1035enum command_control_type
1036commands_from_control_command (char *arg, struct command_line *cmd)
1037{
95a42b64
TT
1038 commands_command_1 (arg, 0, cmd);
1039 return simple_control;
40c03ae8 1040}
876fa593
JK
1041
1042/* Return non-zero if BL->TARGET_INFO contains valid information. */
1043
1044static int
1045bp_location_has_shadow (struct bp_location *bl)
1046{
1047 if (bl->loc_type != bp_loc_software_breakpoint)
1048 return 0;
1049 if (!bl->inserted)
1050 return 0;
1051 if (bl->target_info.shadow_len == 0)
e5dd4106 1052 /* BL isn't valid, or doesn't shadow memory. */
876fa593
JK
1053 return 0;
1054 return 1;
1055}
1056
8defab1a 1057/* Update BUF, which is LEN bytes read from the target address MEMADDR,
876fa593
JK
1058 by replacing any memory breakpoints with their shadowed contents.
1059
1060 The range of shadowed area by each bp_location is:
35df4500
TJB
1061 bl->address - bp_location_placed_address_before_address_max
1062 up to bl->address + bp_location_shadow_len_after_address_max
876fa593
JK
1063 The range we were requested to resolve shadows for is:
1064 memaddr ... memaddr + len
1065 Thus the safe cutoff boundaries for performance optimization are
35df4500
TJB
1066 memaddr + len <= (bl->address
1067 - bp_location_placed_address_before_address_max)
876fa593 1068 and:
35df4500 1069 bl->address + bp_location_shadow_len_after_address_max <= memaddr */
c906108c 1070
8defab1a 1071void
f0ba3972
PA
1072breakpoint_xfer_memory (gdb_byte *readbuf, gdb_byte *writebuf,
1073 const gdb_byte *writebuf_org,
1074 ULONGEST memaddr, LONGEST len)
c906108c 1075{
4a64f543
MS
1076 /* Left boundary, right boundary and median element of our binary
1077 search. */
876fa593
JK
1078 unsigned bc_l, bc_r, bc;
1079
4a64f543
MS
1080 /* Find BC_L which is a leftmost element which may affect BUF
1081 content. It is safe to report lower value but a failure to
1082 report higher one. */
876fa593
JK
1083
1084 bc_l = 0;
1085 bc_r = bp_location_count;
1086 while (bc_l + 1 < bc_r)
1087 {
35df4500 1088 struct bp_location *bl;
876fa593
JK
1089
1090 bc = (bc_l + bc_r) / 2;
35df4500 1091 bl = bp_location[bc];
876fa593 1092
4a64f543
MS
1093 /* Check first BL->ADDRESS will not overflow due to the added
1094 constant. Then advance the left boundary only if we are sure
1095 the BC element can in no way affect the BUF content (MEMADDR
1096 to MEMADDR + LEN range).
876fa593 1097
4a64f543
MS
1098 Use the BP_LOCATION_SHADOW_LEN_AFTER_ADDRESS_MAX safety
1099 offset so that we cannot miss a breakpoint with its shadow
1100 range tail still reaching MEMADDR. */
c5aa993b 1101
35df4500
TJB
1102 if ((bl->address + bp_location_shadow_len_after_address_max
1103 >= bl->address)
1104 && (bl->address + bp_location_shadow_len_after_address_max
1105 <= memaddr))
876fa593
JK
1106 bc_l = bc;
1107 else
1108 bc_r = bc;
1109 }
1110
128070bb
PA
1111 /* Due to the binary search above, we need to make sure we pick the
1112 first location that's at BC_L's address. E.g., if there are
1113 multiple locations at the same address, BC_L may end up pointing
1114 at a duplicate location, and miss the "master"/"inserted"
1115 location. Say, given locations L1, L2 and L3 at addresses A and
1116 B:
1117
1118 L1@A, L2@A, L3@B, ...
1119
1120 BC_L could end up pointing at location L2, while the "master"
1121 location could be L1. Since the `loc->inserted' flag is only set
1122 on "master" locations, we'd forget to restore the shadow of L1
1123 and L2. */
1124 while (bc_l > 0
1125 && bp_location[bc_l]->address == bp_location[bc_l - 1]->address)
1126 bc_l--;
1127
876fa593
JK
1128 /* Now do full processing of the found relevant range of elements. */
1129
1130 for (bc = bc_l; bc < bp_location_count; bc++)
c5aa993b 1131 {
35df4500 1132 struct bp_location *bl = bp_location[bc];
876fa593
JK
1133 CORE_ADDR bp_addr = 0;
1134 int bp_size = 0;
1135 int bptoffset = 0;
1136
35df4500
TJB
1137 /* bp_location array has BL->OWNER always non-NULL. */
1138 if (bl->owner->type == bp_none)
8a3fe4f8 1139 warning (_("reading through apparently deleted breakpoint #%d?"),
35df4500 1140 bl->owner->number);
ffce0d52 1141
e5dd4106 1142 /* Performance optimization: any further element can no longer affect BUF
876fa593
JK
1143 content. */
1144
35df4500
TJB
1145 if (bl->address >= bp_location_placed_address_before_address_max
1146 && memaddr + len <= (bl->address
1147 - bp_location_placed_address_before_address_max))
876fa593
JK
1148 break;
1149
35df4500 1150 if (!bp_location_has_shadow (bl))
c5aa993b 1151 continue;
35df4500 1152 if (!breakpoint_address_match (bl->target_info.placed_address_space, 0,
6c95b8df
PA
1153 current_program_space->aspace, 0))
1154 continue;
1155
c5aa993b
JM
1156 /* Addresses and length of the part of the breakpoint that
1157 we need to copy. */
35df4500
TJB
1158 bp_addr = bl->target_info.placed_address;
1159 bp_size = bl->target_info.shadow_len;
8defab1a 1160
c5aa993b
JM
1161 if (bp_addr + bp_size <= memaddr)
1162 /* The breakpoint is entirely before the chunk of memory we
1163 are reading. */
1164 continue;
8defab1a 1165
c5aa993b
JM
1166 if (bp_addr >= memaddr + len)
1167 /* The breakpoint is entirely after the chunk of memory we are
4a64f543 1168 reading. */
c5aa993b 1169 continue;
c5aa993b 1170
8defab1a
DJ
1171 /* Offset within shadow_contents. */
1172 if (bp_addr < memaddr)
1173 {
1174 /* Only copy the second part of the breakpoint. */
1175 bp_size -= memaddr - bp_addr;
1176 bptoffset = memaddr - bp_addr;
1177 bp_addr = memaddr;
1178 }
c5aa993b 1179
8defab1a
DJ
1180 if (bp_addr + bp_size > memaddr + len)
1181 {
1182 /* Only copy the first part of the breakpoint. */
1183 bp_size -= (bp_addr + bp_size) - (memaddr + len);
1184 }
c5aa993b 1185
f0ba3972
PA
1186 if (readbuf != NULL)
1187 {
1188 /* Update the read buffer with this inserted breakpoint's
1189 shadow. */
1190 memcpy (readbuf + bp_addr - memaddr,
1191 bl->target_info.shadow_contents + bptoffset, bp_size);
1192 }
1193 else
1194 {
1195 struct gdbarch *gdbarch = bl->gdbarch;
1196 const unsigned char *bp;
1197 CORE_ADDR placed_address = bl->target_info.placed_address;
1198 unsigned placed_size = bl->target_info.placed_size;
1199
1200 /* Update the shadow with what we want to write to memory. */
1201 memcpy (bl->target_info.shadow_contents + bptoffset,
1202 writebuf_org + bp_addr - memaddr, bp_size);
1203
1204 /* Determine appropriate breakpoint contents and size for this
1205 address. */
1206 bp = gdbarch_breakpoint_from_pc (gdbarch, &placed_address, &placed_size);
1207
1208 /* Update the final write buffer with this inserted
1209 breakpoint's INSN. */
1210 memcpy (writebuf + bp_addr - memaddr, bp + bptoffset, bp_size);
1211 }
c5aa993b 1212 }
c906108c 1213}
c906108c 1214\f
c5aa993b 1215
60e1c644
PA
1216/* Return true if BPT is of any hardware watchpoint kind. */
1217
a5606eee 1218static int
d77f58be 1219is_hardware_watchpoint (const struct breakpoint *bpt)
a5606eee
VP
1220{
1221 return (bpt->type == bp_hardware_watchpoint
1222 || bpt->type == bp_read_watchpoint
1223 || bpt->type == bp_access_watchpoint);
1224}
7270d8f2 1225
60e1c644
PA
1226/* Return true if BPT is of any watchpoint kind, hardware or
1227 software. */
1228
3a5c3e22 1229int
d77f58be 1230is_watchpoint (const struct breakpoint *bpt)
60e1c644
PA
1231{
1232 return (is_hardware_watchpoint (bpt)
1233 || bpt->type == bp_watchpoint);
1234}
1235
3a5c3e22
PA
1236/* Returns true if the current thread and its running state are safe
1237 to evaluate or update watchpoint B. Watchpoints on local
1238 expressions need to be evaluated in the context of the thread that
1239 was current when the watchpoint was created, and, that thread needs
1240 to be stopped to be able to select the correct frame context.
1241 Watchpoints on global expressions can be evaluated on any thread,
1242 and in any state. It is presently left to the target allowing
1243 memory accesses when threads are running. */
f6bc2008
PA
1244
1245static int
3a5c3e22 1246watchpoint_in_thread_scope (struct watchpoint *b)
f6bc2008 1247{
d0d8b0c6
JK
1248 return (b->base.pspace == current_program_space
1249 && (ptid_equal (b->watchpoint_thread, null_ptid)
1250 || (ptid_equal (inferior_ptid, b->watchpoint_thread)
1251 && !is_executing (inferior_ptid))));
f6bc2008
PA
1252}
1253
d0fb5eae
JK
1254/* Set watchpoint B to disp_del_at_next_stop, even including its possible
1255 associated bp_watchpoint_scope breakpoint. */
1256
1257static void
3a5c3e22 1258watchpoint_del_at_next_stop (struct watchpoint *w)
d0fb5eae 1259{
3a5c3e22 1260 struct breakpoint *b = &w->base;
d0fb5eae
JK
1261
1262 if (b->related_breakpoint != b)
1263 {
1264 gdb_assert (b->related_breakpoint->type == bp_watchpoint_scope);
1265 gdb_assert (b->related_breakpoint->related_breakpoint == b);
1266 b->related_breakpoint->disposition = disp_del_at_next_stop;
1267 b->related_breakpoint->related_breakpoint = b->related_breakpoint;
1268 b->related_breakpoint = b;
1269 }
1270 b->disposition = disp_del_at_next_stop;
1271}
1272
567e1b4e
JB
1273/* Assuming that B is a watchpoint:
1274 - Reparse watchpoint expression, if REPARSE is non-zero
a5606eee 1275 - Evaluate expression and store the result in B->val
567e1b4e
JB
1276 - Evaluate the condition if there is one, and store the result
1277 in b->loc->cond.
a5606eee
VP
1278 - Update the list of values that must be watched in B->loc.
1279
4a64f543
MS
1280 If the watchpoint disposition is disp_del_at_next_stop, then do
1281 nothing. If this is local watchpoint that is out of scope, delete
1282 it.
1283
1284 Even with `set breakpoint always-inserted on' the watchpoints are
1285 removed + inserted on each stop here. Normal breakpoints must
1286 never be removed because they might be missed by a running thread
1287 when debugging in non-stop mode. On the other hand, hardware
1288 watchpoints (is_hardware_watchpoint; processed here) are specific
1289 to each LWP since they are stored in each LWP's hardware debug
1290 registers. Therefore, such LWP must be stopped first in order to
1291 be able to modify its hardware watchpoints.
1292
1293 Hardware watchpoints must be reset exactly once after being
1294 presented to the user. It cannot be done sooner, because it would
1295 reset the data used to present the watchpoint hit to the user. And
1296 it must not be done later because it could display the same single
1297 watchpoint hit during multiple GDB stops. Note that the latter is
1298 relevant only to the hardware watchpoint types bp_read_watchpoint
1299 and bp_access_watchpoint. False hit by bp_hardware_watchpoint is
1300 not user-visible - its hit is suppressed if the memory content has
1301 not changed.
1302
1303 The following constraints influence the location where we can reset
1304 hardware watchpoints:
1305
1306 * target_stopped_by_watchpoint and target_stopped_data_address are
1307 called several times when GDB stops.
1308
1309 [linux]
1310 * Multiple hardware watchpoints can be hit at the same time,
1311 causing GDB to stop. GDB only presents one hardware watchpoint
1312 hit at a time as the reason for stopping, and all the other hits
1313 are presented later, one after the other, each time the user
1314 requests the execution to be resumed. Execution is not resumed
1315 for the threads still having pending hit event stored in
1316 LWP_INFO->STATUS. While the watchpoint is already removed from
1317 the inferior on the first stop the thread hit event is kept being
1318 reported from its cached value by linux_nat_stopped_data_address
1319 until the real thread resume happens after the watchpoint gets
1320 presented and thus its LWP_INFO->STATUS gets reset.
1321
1322 Therefore the hardware watchpoint hit can get safely reset on the
1323 watchpoint removal from inferior. */
a79d3c27 1324
b40ce68a 1325static void
3a5c3e22 1326update_watchpoint (struct watchpoint *b, int reparse)
7270d8f2 1327{
a5606eee 1328 int within_current_scope;
a5606eee 1329 struct frame_id saved_frame_id;
66076460 1330 int frame_saved;
a5606eee 1331
f6bc2008
PA
1332 /* If this is a local watchpoint, we only want to check if the
1333 watchpoint frame is in scope if the current thread is the thread
1334 that was used to create the watchpoint. */
1335 if (!watchpoint_in_thread_scope (b))
1336 return;
1337
3a5c3e22 1338 if (b->base.disposition == disp_del_at_next_stop)
a5606eee
VP
1339 return;
1340
66076460 1341 frame_saved = 0;
a5606eee
VP
1342
1343 /* Determine if the watchpoint is within scope. */
1344 if (b->exp_valid_block == NULL)
1345 within_current_scope = 1;
1346 else
1347 {
b5db5dfc
UW
1348 struct frame_info *fi = get_current_frame ();
1349 struct gdbarch *frame_arch = get_frame_arch (fi);
1350 CORE_ADDR frame_pc = get_frame_pc (fi);
1351
1352 /* If we're in a function epilogue, unwinding may not work
1353 properly, so do not attempt to recreate locations at this
1354 point. See similar comments in watchpoint_check. */
1355 if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc))
1356 return;
66076460
DJ
1357
1358 /* Save the current frame's ID so we can restore it after
1359 evaluating the watchpoint expression on its own frame. */
1360 /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
1361 took a frame parameter, so that we didn't have to change the
1362 selected frame. */
1363 frame_saved = 1;
1364 saved_frame_id = get_frame_id (get_selected_frame (NULL));
1365
a5606eee
VP
1366 fi = frame_find_by_id (b->watchpoint_frame);
1367 within_current_scope = (fi != NULL);
1368 if (within_current_scope)
1369 select_frame (fi);
1370 }
1371
b5db5dfc
UW
1372 /* We don't free locations. They are stored in the bp_location array
1373 and update_global_location_list will eventually delete them and
1374 remove breakpoints if needed. */
3a5c3e22 1375 b->base.loc = NULL;
b5db5dfc 1376
a5606eee
VP
1377 if (within_current_scope && reparse)
1378 {
1379 char *s;
d63d0675 1380
a5606eee
VP
1381 if (b->exp)
1382 {
1383 xfree (b->exp);
1384 b->exp = NULL;
1385 }
d63d0675 1386 s = b->exp_string_reparse ? b->exp_string_reparse : b->exp_string;
a5606eee
VP
1387 b->exp = parse_exp_1 (&s, b->exp_valid_block, 0);
1388 /* If the meaning of expression itself changed, the old value is
1389 no longer relevant. We don't want to report a watchpoint hit
1390 to the user when the old value and the new value may actually
1391 be completely different objects. */
1392 value_free (b->val);
fa4727a6
DJ
1393 b->val = NULL;
1394 b->val_valid = 0;
60e1c644
PA
1395
1396 /* Note that unlike with breakpoints, the watchpoint's condition
1397 expression is stored in the breakpoint object, not in the
1398 locations (re)created below. */
3a5c3e22 1399 if (b->base.cond_string != NULL)
60e1c644
PA
1400 {
1401 if (b->cond_exp != NULL)
1402 {
1403 xfree (b->cond_exp);
1404 b->cond_exp = NULL;
1405 }
1406
3a5c3e22 1407 s = b->base.cond_string;
60e1c644
PA
1408 b->cond_exp = parse_exp_1 (&s, b->cond_exp_valid_block, 0);
1409 }
a5606eee 1410 }
a5606eee
VP
1411
1412 /* If we failed to parse the expression, for example because
1413 it refers to a global variable in a not-yet-loaded shared library,
1414 don't try to insert watchpoint. We don't automatically delete
1415 such watchpoint, though, since failure to parse expression
1416 is different from out-of-scope watchpoint. */
2d134ed3
PA
1417 if ( !target_has_execution)
1418 {
1419 /* Without execution, memory can't change. No use to try and
1420 set watchpoint locations. The watchpoint will be reset when
1421 the target gains execution, through breakpoint_re_set. */
1422 }
1423 else if (within_current_scope && b->exp)
a5606eee 1424 {
0cf6dd15 1425 int pc = 0;
fa4727a6 1426 struct value *val_chain, *v, *result, *next;
2d134ed3 1427 struct program_space *frame_pspace;
a5606eee 1428
0cf6dd15 1429 fetch_subexp_value (b->exp, &pc, &v, &result, &val_chain);
a5606eee 1430
a5606eee
VP
1431 /* Avoid setting b->val if it's already set. The meaning of
1432 b->val is 'the last value' user saw, and we should update
1433 it only if we reported that last value to user. As it
9c06b0b4
TJB
1434 happens, the code that reports it updates b->val directly.
1435 We don't keep track of the memory value for masked
1436 watchpoints. */
3a5c3e22 1437 if (!b->val_valid && !is_masked_watchpoint (&b->base))
fa4727a6
DJ
1438 {
1439 b->val = v;
1440 b->val_valid = 1;
1441 }
a5606eee 1442
2d134ed3
PA
1443 frame_pspace = get_frame_program_space (get_selected_frame (NULL));
1444
a5606eee 1445 /* Look at each value on the value chain. */
9fa40276 1446 for (v = val_chain; v; v = value_next (v))
a5606eee
VP
1447 {
1448 /* If it's a memory location, and GDB actually needed
1449 its contents to evaluate the expression, then we
fa4727a6
DJ
1450 must watch it. If the first value returned is
1451 still lazy, that means an error occurred reading it;
1452 watch it anyway in case it becomes readable. */
a5606eee 1453 if (VALUE_LVAL (v) == lval_memory
fa4727a6 1454 && (v == val_chain || ! value_lazy (v)))
a5606eee
VP
1455 {
1456 struct type *vtype = check_typedef (value_type (v));
7270d8f2 1457
a5606eee
VP
1458 /* We only watch structs and arrays if user asked
1459 for it explicitly, never if they just happen to
1460 appear in the middle of some value chain. */
fa4727a6 1461 if (v == result
a5606eee
VP
1462 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
1463 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
1464 {
1465 CORE_ADDR addr;
1466 int len, type;
1467 struct bp_location *loc, **tmp;
1468
42ae5230 1469 addr = value_address (v);
a5606eee
VP
1470 len = TYPE_LENGTH (value_type (v));
1471 type = hw_write;
3a5c3e22 1472 if (b->base.type == bp_read_watchpoint)
a5606eee 1473 type = hw_read;
3a5c3e22 1474 else if (b->base.type == bp_access_watchpoint)
a5606eee 1475 type = hw_access;
3a5c3e22
PA
1476
1477 loc = allocate_bp_location (&b->base);
1478 for (tmp = &(b->base.loc); *tmp != NULL; tmp = &((*tmp)->next))
a5606eee
VP
1479 ;
1480 *tmp = loc;
a6d9a66e 1481 loc->gdbarch = get_type_arch (value_type (v));
6c95b8df
PA
1482
1483 loc->pspace = frame_pspace;
a5606eee
VP
1484 loc->address = addr;
1485 loc->length = len;
1486 loc->watchpoint_type = type;
1487 }
1488 }
9fa40276
TJB
1489 }
1490
1491 /* Change the type of breakpoint between hardware assisted or
1492 an ordinary watchpoint depending on the hardware support
1493 and free hardware slots. REPARSE is set when the inferior
1494 is started. */
a9634178 1495 if (reparse)
9fa40276 1496 {
e09342b5 1497 int reg_cnt;
9fa40276
TJB
1498 enum bp_loc_type loc_type;
1499 struct bp_location *bl;
a5606eee 1500
a9634178 1501 reg_cnt = can_use_hardware_watchpoint (val_chain);
e09342b5
TJB
1502
1503 if (reg_cnt)
9fa40276
TJB
1504 {
1505 int i, target_resources_ok, other_type_used;
a1398e0c 1506 enum bptype type;
9fa40276 1507
a9634178
TJB
1508 /* Use an exact watchpoint when there's only one memory region to be
1509 watched, and only one debug register is needed to watch it. */
1510 b->exact = target_exact_watchpoints && reg_cnt == 1;
1511
9fa40276 1512 /* We need to determine how many resources are already
e09342b5
TJB
1513 used for all other hardware watchpoints plus this one
1514 to see if we still have enough resources to also fit
a1398e0c
PA
1515 this watchpoint in as well. */
1516
1517 /* If this is a software watchpoint, we try to turn it
1518 to a hardware one -- count resources as if B was of
1519 hardware watchpoint type. */
1520 type = b->base.type;
1521 if (type == bp_watchpoint)
1522 type = bp_hardware_watchpoint;
1523
1524 /* This watchpoint may or may not have been placed on
1525 the list yet at this point (it won't be in the list
1526 if we're trying to create it for the first time,
1527 through watch_command), so always account for it
1528 manually. */
1529
1530 /* Count resources used by all watchpoints except B. */
1531 i = hw_watchpoint_used_count_others (&b->base, type, &other_type_used);
1532
1533 /* Add in the resources needed for B. */
1534 i += hw_watchpoint_use_count (&b->base);
1535
1536 target_resources_ok
1537 = target_can_use_hardware_watchpoint (type, i, other_type_used);
e09342b5 1538 if (target_resources_ok <= 0)
a9634178 1539 {
3a5c3e22 1540 int sw_mode = b->base.ops->works_in_software_mode (&b->base);
9c06b0b4
TJB
1541
1542 if (target_resources_ok == 0 && !sw_mode)
a9634178
TJB
1543 error (_("Target does not support this type of "
1544 "hardware watchpoint."));
9c06b0b4
TJB
1545 else if (target_resources_ok < 0 && !sw_mode)
1546 error (_("There are not enough available hardware "
1547 "resources for this watchpoint."));
a1398e0c
PA
1548
1549 /* Downgrade to software watchpoint. */
1550 b->base.type = bp_watchpoint;
1551 }
1552 else
1553 {
1554 /* If this was a software watchpoint, we've just
1555 found we have enough resources to turn it to a
1556 hardware watchpoint. Otherwise, this is a
1557 nop. */
1558 b->base.type = type;
a9634178 1559 }
9fa40276 1560 }
3a5c3e22 1561 else if (!b->base.ops->works_in_software_mode (&b->base))
a9634178
TJB
1562 error (_("Expression cannot be implemented with "
1563 "read/access watchpoint."));
9fa40276 1564 else
3a5c3e22 1565 b->base.type = bp_watchpoint;
9fa40276 1566
3a5c3e22 1567 loc_type = (b->base.type == bp_watchpoint? bp_loc_other
9fa40276 1568 : bp_loc_hardware_watchpoint);
3a5c3e22 1569 for (bl = b->base.loc; bl; bl = bl->next)
9fa40276
TJB
1570 bl->loc_type = loc_type;
1571 }
1572
1573 for (v = val_chain; v; v = next)
1574 {
a5606eee
VP
1575 next = value_next (v);
1576 if (v != b->val)
1577 value_free (v);
1578 }
1579
c7437ca6
PA
1580 /* If a software watchpoint is not watching any memory, then the
1581 above left it without any location set up. But,
1582 bpstat_stop_status requires a location to be able to report
1583 stops, so make sure there's at least a dummy one. */
3a5c3e22 1584 if (b->base.type == bp_watchpoint && b->base.loc == NULL)
c7437ca6 1585 {
3a5c3e22
PA
1586 struct breakpoint *base = &b->base;
1587 base->loc = allocate_bp_location (base);
1588 base->loc->pspace = frame_pspace;
1589 base->loc->address = -1;
1590 base->loc->length = -1;
1591 base->loc->watchpoint_type = -1;
c7437ca6 1592 }
a5606eee
VP
1593 }
1594 else if (!within_current_scope)
7270d8f2 1595 {
ac74f770
MS
1596 printf_filtered (_("\
1597Watchpoint %d deleted because the program has left the block\n\
1598in which its expression is valid.\n"),
3a5c3e22 1599 b->base.number);
d0fb5eae 1600 watchpoint_del_at_next_stop (b);
7270d8f2 1601 }
a5606eee
VP
1602
1603 /* Restore the selected frame. */
66076460
DJ
1604 if (frame_saved)
1605 select_frame (frame_find_by_id (saved_frame_id));
7270d8f2
OF
1606}
1607
a5606eee 1608
74960c60 1609/* Returns 1 iff breakpoint location should be
1e4d1764
YQ
1610 inserted in the inferior. We don't differentiate the type of BL's owner
1611 (breakpoint vs. tracepoint), although insert_location in tracepoint's
1612 breakpoint_ops is not defined, because in insert_bp_location,
1613 tracepoint's insert_location will not be called. */
74960c60 1614static int
35df4500 1615should_be_inserted (struct bp_location *bl)
74960c60 1616{
35df4500 1617 if (bl->owner == NULL || !breakpoint_enabled (bl->owner))
74960c60
VP
1618 return 0;
1619
35df4500 1620 if (bl->owner->disposition == disp_del_at_next_stop)
74960c60
VP
1621 return 0;
1622
35df4500 1623 if (!bl->enabled || bl->shlib_disabled || bl->duplicate)
74960c60
VP
1624 return 0;
1625
f8eba3c6
TT
1626 if (user_breakpoint_p (bl->owner) && bl->pspace->executing_startup)
1627 return 0;
1628
56710373
PA
1629 /* This is set for example, when we're attached to the parent of a
1630 vfork, and have detached from the child. The child is running
1631 free, and we expect it to do an exec or exit, at which point the
1632 OS makes the parent schedulable again (and the target reports
1633 that the vfork is done). Until the child is done with the shared
1634 memory region, do not insert breakpoints in the parent, otherwise
1635 the child could still trip on the parent's breakpoints. Since
1636 the parent is blocked anyway, it won't miss any breakpoint. */
35df4500 1637 if (bl->pspace->breakpoints_not_allowed)
56710373
PA
1638 return 0;
1639
74960c60
VP
1640 return 1;
1641}
1642
934709f0
PW
1643/* Same as should_be_inserted but does the check assuming
1644 that the location is not duplicated. */
1645
1646static int
1647unduplicated_should_be_inserted (struct bp_location *bl)
1648{
1649 int result;
1650 const int save_duplicate = bl->duplicate;
1651
1652 bl->duplicate = 0;
1653 result = should_be_inserted (bl);
1654 bl->duplicate = save_duplicate;
1655 return result;
1656}
1657
35df4500
TJB
1658/* Insert a low-level "breakpoint" of some type. BL is the breakpoint
1659 location. Any error messages are printed to TMP_ERROR_STREAM; and
3fbb6ffa 1660 DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems.
c30eee59
TJB
1661 Returns 0 for success, 1 if the bp_location type is not supported or
1662 -1 for failure.
879bfdc2 1663
4a64f543
MS
1664 NOTE drow/2003-09-09: This routine could be broken down to an
1665 object-style method for each breakpoint or catchpoint type. */
26bb91f3 1666static int
35df4500 1667insert_bp_location (struct bp_location *bl,
26bb91f3 1668 struct ui_file *tmp_error_stream,
3fbb6ffa 1669 int *disabled_breaks,
26bb91f3 1670 int *hw_breakpoint_error)
879bfdc2
DJ
1671{
1672 int val = 0;
1673
35df4500 1674 if (!should_be_inserted (bl) || bl->inserted)
879bfdc2
DJ
1675 return 0;
1676
8181d85f 1677 /* Initialize the target-specific information. */
35df4500
TJB
1678 memset (&bl->target_info, 0, sizeof (bl->target_info));
1679 bl->target_info.placed_address = bl->address;
1680 bl->target_info.placed_address_space = bl->pspace->aspace;
f1310107 1681 bl->target_info.length = bl->length;
8181d85f 1682
35df4500
TJB
1683 if (bl->loc_type == bp_loc_software_breakpoint
1684 || bl->loc_type == bp_loc_hardware_breakpoint)
879bfdc2 1685 {
35df4500 1686 if (bl->owner->type != bp_hardware_breakpoint)
765dc015
VP
1687 {
1688 /* If the explicitly specified breakpoint type
1689 is not hardware breakpoint, check the memory map to see
1690 if the breakpoint address is in read only memory or not.
4a64f543 1691
765dc015
VP
1692 Two important cases are:
1693 - location type is not hardware breakpoint, memory
1694 is readonly. We change the type of the location to
1695 hardware breakpoint.
4a64f543
MS
1696 - location type is hardware breakpoint, memory is
1697 read-write. This means we've previously made the
1698 location hardware one, but then the memory map changed,
1699 so we undo.
765dc015 1700
4a64f543
MS
1701 When breakpoints are removed, remove_breakpoints will use
1702 location types we've just set here, the only possible
1703 problem is that memory map has changed during running
1704 program, but it's not going to work anyway with current
1705 gdb. */
765dc015 1706 struct mem_region *mr
35df4500 1707 = lookup_mem_region (bl->target_info.placed_address);
765dc015
VP
1708
1709 if (mr)
1710 {
1711 if (automatic_hardware_breakpoints)
1712 {
765dc015
VP
1713 enum bp_loc_type new_type;
1714
1715 if (mr->attrib.mode != MEM_RW)
1716 new_type = bp_loc_hardware_breakpoint;
1717 else
1718 new_type = bp_loc_software_breakpoint;
1719
35df4500 1720 if (new_type != bl->loc_type)
765dc015
VP
1721 {
1722 static int said = 0;
cc59ec59 1723
35df4500 1724 bl->loc_type = new_type;
765dc015
VP
1725 if (!said)
1726 {
3e43a32a
MS
1727 fprintf_filtered (gdb_stdout,
1728 _("Note: automatically using "
1729 "hardware breakpoints for "
1730 "read-only addresses.\n"));
765dc015
VP
1731 said = 1;
1732 }
1733 }
1734 }
35df4500 1735 else if (bl->loc_type == bp_loc_software_breakpoint
765dc015 1736 && mr->attrib.mode != MEM_RW)
3e43a32a
MS
1737 warning (_("cannot set software breakpoint "
1738 "at readonly address %s"),
35df4500 1739 paddress (bl->gdbarch, bl->address));
765dc015
VP
1740 }
1741 }
1742
879bfdc2
DJ
1743 /* First check to see if we have to handle an overlay. */
1744 if (overlay_debugging == ovly_off
35df4500
TJB
1745 || bl->section == NULL
1746 || !(section_is_overlay (bl->section)))
879bfdc2
DJ
1747 {
1748 /* No overlay handling: just set the breakpoint. */
1749
348d480f 1750 val = bl->owner->ops->insert_location (bl);
879bfdc2
DJ
1751 }
1752 else
1753 {
4a64f543 1754 /* This breakpoint is in an overlay section.
879bfdc2
DJ
1755 Shall we set a breakpoint at the LMA? */
1756 if (!overlay_events_enabled)
1757 {
1758 /* Yes -- overlay event support is not active,
1759 so we must try to set a breakpoint at the LMA.
1760 This will not work for a hardware breakpoint. */
35df4500 1761 if (bl->loc_type == bp_loc_hardware_breakpoint)
8a3fe4f8 1762 warning (_("hardware breakpoint %d not supported in overlay!"),
35df4500 1763 bl->owner->number);
879bfdc2
DJ
1764 else
1765 {
35df4500
TJB
1766 CORE_ADDR addr = overlay_unmapped_address (bl->address,
1767 bl->section);
879bfdc2 1768 /* Set a software (trap) breakpoint at the LMA. */
35df4500
TJB
1769 bl->overlay_target_info = bl->target_info;
1770 bl->overlay_target_info.placed_address = addr;
1771 val = target_insert_breakpoint (bl->gdbarch,
1772 &bl->overlay_target_info);
879bfdc2 1773 if (val != 0)
99361f52 1774 fprintf_unfiltered (tmp_error_stream,
3e43a32a
MS
1775 "Overlay breakpoint %d "
1776 "failed: in ROM?\n",
35df4500 1777 bl->owner->number);
879bfdc2
DJ
1778 }
1779 }
1780 /* Shall we set a breakpoint at the VMA? */
35df4500 1781 if (section_is_mapped (bl->section))
879bfdc2
DJ
1782 {
1783 /* Yes. This overlay section is mapped into memory. */
348d480f 1784 val = bl->owner->ops->insert_location (bl);
879bfdc2
DJ
1785 }
1786 else
1787 {
1788 /* No. This breakpoint will not be inserted.
1789 No error, but do not mark the bp as 'inserted'. */
1790 return 0;
1791 }
1792 }
1793
1794 if (val)
1795 {
1796 /* Can't set the breakpoint. */
35df4500 1797 if (solib_name_from_address (bl->pspace, bl->address))
879bfdc2 1798 {
4a64f543 1799 /* See also: disable_breakpoints_in_shlibs. */
879bfdc2 1800 val = 0;
35df4500 1801 bl->shlib_disabled = 1;
8d3788bd 1802 observer_notify_breakpoint_modified (bl->owner);
3fbb6ffa
TJB
1803 if (!*disabled_breaks)
1804 {
1805 fprintf_unfiltered (tmp_error_stream,
1806 "Cannot insert breakpoint %d.\n",
1807 bl->owner->number);
1808 fprintf_unfiltered (tmp_error_stream,
1809 "Temporarily disabling shared "
1810 "library breakpoints:\n");
1811 }
1812 *disabled_breaks = 1;
879bfdc2 1813 fprintf_unfiltered (tmp_error_stream,
35df4500 1814 "breakpoint #%d\n", bl->owner->number);
879bfdc2
DJ
1815 }
1816 else
879bfdc2 1817 {
35df4500 1818 if (bl->loc_type == bp_loc_hardware_breakpoint)
879bfdc2
DJ
1819 {
1820 *hw_breakpoint_error = 1;
3e43a32a
MS
1821 fprintf_unfiltered (tmp_error_stream,
1822 "Cannot insert hardware "
1823 "breakpoint %d.\n",
35df4500 1824 bl->owner->number);
879bfdc2
DJ
1825 }
1826 else
1827 {
1828 fprintf_unfiltered (tmp_error_stream,
1829 "Cannot insert breakpoint %d.\n",
35df4500 1830 bl->owner->number);
879bfdc2
DJ
1831 fprintf_filtered (tmp_error_stream,
1832 "Error accessing memory address ");
35df4500 1833 fputs_filtered (paddress (bl->gdbarch, bl->address),
5af949e3 1834 tmp_error_stream);
879bfdc2
DJ
1835 fprintf_filtered (tmp_error_stream, ": %s.\n",
1836 safe_strerror (val));
1837 }
1838
1839 }
1840 }
1841 else
35df4500 1842 bl->inserted = 1;
879bfdc2
DJ
1843
1844 return val;
1845 }
1846
35df4500 1847 else if (bl->loc_type == bp_loc_hardware_watchpoint
879bfdc2 1848 /* NOTE drow/2003-09-08: This state only exists for removing
4a64f543 1849 watchpoints. It's not clear that it's necessary... */
35df4500 1850 && bl->owner->disposition != disp_del_at_next_stop)
879bfdc2 1851 {
77b06cd7
TJB
1852 gdb_assert (bl->owner->ops != NULL
1853 && bl->owner->ops->insert_location != NULL);
1854
1855 val = bl->owner->ops->insert_location (bl);
85d721b8
PA
1856
1857 /* If trying to set a read-watchpoint, and it turns out it's not
1858 supported, try emulating one with an access watchpoint. */
35df4500 1859 if (val == 1 && bl->watchpoint_type == hw_read)
85d721b8
PA
1860 {
1861 struct bp_location *loc, **loc_temp;
1862
1863 /* But don't try to insert it, if there's already another
1864 hw_access location that would be considered a duplicate
1865 of this one. */
1866 ALL_BP_LOCATIONS (loc, loc_temp)
35df4500 1867 if (loc != bl
85d721b8 1868 && loc->watchpoint_type == hw_access
35df4500 1869 && watchpoint_locations_match (bl, loc))
85d721b8 1870 {
35df4500
TJB
1871 bl->duplicate = 1;
1872 bl->inserted = 1;
1873 bl->target_info = loc->target_info;
1874 bl->watchpoint_type = hw_access;
85d721b8
PA
1875 val = 0;
1876 break;
1877 }
1878
1879 if (val == 1)
1880 {
77b06cd7
TJB
1881 bl->watchpoint_type = hw_access;
1882 val = bl->owner->ops->insert_location (bl);
1883
1884 if (val)
1885 /* Back to the original value. */
1886 bl->watchpoint_type = hw_read;
85d721b8
PA
1887 }
1888 }
1889
35df4500 1890 bl->inserted = (val == 0);
879bfdc2
DJ
1891 }
1892
35df4500 1893 else if (bl->owner->type == bp_catchpoint)
879bfdc2 1894 {
77b06cd7
TJB
1895 gdb_assert (bl->owner->ops != NULL
1896 && bl->owner->ops->insert_location != NULL);
1897
1898 val = bl->owner->ops->insert_location (bl);
1899 if (val)
1900 {
1901 bl->owner->enable_state = bp_disabled;
1902
1903 if (val == 1)
1904 warning (_("\
1905Error inserting catchpoint %d: Your system does not support this type\n\
1906of catchpoint."), bl->owner->number);
1907 else
1908 warning (_("Error inserting catchpoint %d."), bl->owner->number);
1909 }
1910
1911 bl->inserted = (val == 0);
1640b821
DJ
1912
1913 /* We've already printed an error message if there was a problem
1914 inserting this catchpoint, and we've disabled the catchpoint,
1915 so just return success. */
1916 return 0;
879bfdc2
DJ
1917 }
1918
1919 return 0;
1920}
1921
6c95b8df
PA
1922/* This function is called when program space PSPACE is about to be
1923 deleted. It takes care of updating breakpoints to not reference
1924 PSPACE anymore. */
1925
1926void
1927breakpoint_program_space_exit (struct program_space *pspace)
1928{
1929 struct breakpoint *b, *b_temp;
876fa593 1930 struct bp_location *loc, **loc_temp;
6c95b8df
PA
1931
1932 /* Remove any breakpoint that was set through this program space. */
1933 ALL_BREAKPOINTS_SAFE (b, b_temp)
1934 {
1935 if (b->pspace == pspace)
1936 delete_breakpoint (b);
1937 }
1938
1939 /* Breakpoints set through other program spaces could have locations
1940 bound to PSPACE as well. Remove those. */
876fa593 1941 ALL_BP_LOCATIONS (loc, loc_temp)
6c95b8df
PA
1942 {
1943 struct bp_location *tmp;
1944
1945 if (loc->pspace == pspace)
1946 {
2bdf28a0 1947 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
6c95b8df
PA
1948 if (loc->owner->loc == loc)
1949 loc->owner->loc = loc->next;
1950 else
1951 for (tmp = loc->owner->loc; tmp->next != NULL; tmp = tmp->next)
1952 if (tmp->next == loc)
1953 {
1954 tmp->next = loc->next;
1955 break;
1956 }
1957 }
1958 }
1959
1960 /* Now update the global location list to permanently delete the
1961 removed locations above. */
1962 update_global_location_list (0);
1963}
1964
74960c60
VP
1965/* Make sure all breakpoints are inserted in inferior.
1966 Throws exception on any error.
1967 A breakpoint that is already inserted won't be inserted
1968 again, so calling this function twice is safe. */
1969void
1970insert_breakpoints (void)
1971{
1972 struct breakpoint *bpt;
1973
1974 ALL_BREAKPOINTS (bpt)
1975 if (is_hardware_watchpoint (bpt))
3a5c3e22
PA
1976 {
1977 struct watchpoint *w = (struct watchpoint *) bpt;
1978
1979 update_watchpoint (w, 0 /* don't reparse. */);
1980 }
74960c60 1981
b60e7edf 1982 update_global_location_list (1);
74960c60 1983
c35b1492
PA
1984 /* update_global_location_list does not insert breakpoints when
1985 always_inserted_mode is not enabled. Explicitly insert them
1986 now. */
1987 if (!breakpoints_always_inserted_mode ())
74960c60
VP
1988 insert_breakpoint_locations ();
1989}
1990
c30eee59 1991/* Used when starting or continuing the program. */
c906108c 1992
74960c60
VP
1993static void
1994insert_breakpoint_locations (void)
c906108c 1995{
a5606eee 1996 struct breakpoint *bpt;
35df4500 1997 struct bp_location *bl, **blp_tmp;
eacd795a 1998 int error_flag = 0;
c906108c 1999 int val = 0;
3fbb6ffa 2000 int disabled_breaks = 0;
81d0cc19 2001 int hw_breakpoint_error = 0;
c906108c 2002
81d0cc19 2003 struct ui_file *tmp_error_stream = mem_fileopen ();
f7545552 2004 struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_error_stream);
74960c60 2005
81d0cc19
GS
2006 /* Explicitly mark the warning -- this will only be printed if
2007 there was an error. */
2008 fprintf_unfiltered (tmp_error_stream, "Warning:\n");
6c95b8df
PA
2009
2010 save_current_space_and_thread ();
2011
35df4500 2012 ALL_BP_LOCATIONS (bl, blp_tmp)
879bfdc2 2013 {
35df4500 2014 if (!should_be_inserted (bl) || bl->inserted)
879bfdc2
DJ
2015 continue;
2016
4a64f543
MS
2017 /* There is no point inserting thread-specific breakpoints if
2018 the thread no longer exists. ALL_BP_LOCATIONS bp_location
2019 has BL->OWNER always non-NULL. */
35df4500
TJB
2020 if (bl->owner->thread != -1
2021 && !valid_thread_id (bl->owner->thread))
f365de73
AS
2022 continue;
2023
35df4500 2024 switch_to_program_space_and_thread (bl->pspace);
6c95b8df
PA
2025
2026 /* For targets that support global breakpoints, there's no need
2027 to select an inferior to insert breakpoint to. In fact, even
2028 if we aren't attached to any process yet, we should still
2029 insert breakpoints. */
2030 if (!gdbarch_has_global_breakpoints (target_gdbarch)
2031 && ptid_equal (inferior_ptid, null_ptid))
2032 continue;
2033
3fbb6ffa
TJB
2034 val = insert_bp_location (bl, tmp_error_stream, &disabled_breaks,
2035 &hw_breakpoint_error);
879bfdc2 2036 if (val)
eacd795a 2037 error_flag = val;
879bfdc2 2038 }
c906108c 2039
4a64f543
MS
2040 /* If we failed to insert all locations of a watchpoint, remove
2041 them, as half-inserted watchpoint is of limited use. */
a5606eee
VP
2042 ALL_BREAKPOINTS (bpt)
2043 {
2044 int some_failed = 0;
2045 struct bp_location *loc;
2046
2047 if (!is_hardware_watchpoint (bpt))
2048 continue;
2049
d6b74ac4 2050 if (!breakpoint_enabled (bpt))
a5606eee 2051 continue;
74960c60
VP
2052
2053 if (bpt->disposition == disp_del_at_next_stop)
2054 continue;
a5606eee
VP
2055
2056 for (loc = bpt->loc; loc; loc = loc->next)
56710373 2057 if (!loc->inserted && should_be_inserted (loc))
a5606eee
VP
2058 {
2059 some_failed = 1;
2060 break;
2061 }
2062 if (some_failed)
2063 {
2064 for (loc = bpt->loc; loc; loc = loc->next)
2065 if (loc->inserted)
2066 remove_breakpoint (loc, mark_uninserted);
2067
2068 hw_breakpoint_error = 1;
2069 fprintf_unfiltered (tmp_error_stream,
2070 "Could not insert hardware watchpoint %d.\n",
2071 bpt->number);
eacd795a 2072 error_flag = -1;
a5606eee
VP
2073 }
2074 }
2075
eacd795a 2076 if (error_flag)
81d0cc19
GS
2077 {
2078 /* If a hardware breakpoint or watchpoint was inserted, add a
2079 message about possibly exhausted resources. */
879bfdc2 2080 if (hw_breakpoint_error)
81d0cc19 2081 {
c6510018
MS
2082 fprintf_unfiltered (tmp_error_stream,
2083 "Could not insert hardware breakpoints:\n\
2084You may have requested too many hardware breakpoints/watchpoints.\n");
81d0cc19 2085 }
81d0cc19
GS
2086 target_terminal_ours_for_output ();
2087 error_stream (tmp_error_stream);
2088 }
f7545552
TT
2089
2090 do_cleanups (cleanups);
c906108c
SS
2091}
2092
c30eee59
TJB
2093/* Used when the program stops.
2094 Returns zero if successful, or non-zero if there was a problem
2095 removing a breakpoint location. */
2096
c906108c 2097int
fba45db2 2098remove_breakpoints (void)
c906108c 2099{
35df4500 2100 struct bp_location *bl, **blp_tmp;
3a1bae8e 2101 int val = 0;
c906108c 2102
35df4500 2103 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 2104 {
1e4d1764 2105 if (bl->inserted && !is_tracepoint (bl->owner))
35df4500 2106 val |= remove_breakpoint (bl, mark_uninserted);
c5aa993b 2107 }
3a1bae8e 2108 return val;
c906108c
SS
2109}
2110
6c95b8df
PA
2111/* Remove breakpoints of process PID. */
2112
2113int
2114remove_breakpoints_pid (int pid)
2115{
35df4500 2116 struct bp_location *bl, **blp_tmp;
6c95b8df
PA
2117 int val;
2118 struct inferior *inf = find_inferior_pid (pid);
2119
35df4500 2120 ALL_BP_LOCATIONS (bl, blp_tmp)
6c95b8df 2121 {
35df4500 2122 if (bl->pspace != inf->pspace)
6c95b8df
PA
2123 continue;
2124
35df4500 2125 if (bl->inserted)
6c95b8df 2126 {
35df4500 2127 val = remove_breakpoint (bl, mark_uninserted);
6c95b8df
PA
2128 if (val != 0)
2129 return val;
2130 }
2131 }
2132 return 0;
2133}
2134
c906108c 2135int
fba45db2 2136reattach_breakpoints (int pid)
c906108c 2137{
6c95b8df 2138 struct cleanup *old_chain;
35df4500 2139 struct bp_location *bl, **blp_tmp;
c906108c 2140 int val;
86b887df 2141 struct ui_file *tmp_error_stream;
3fbb6ffa 2142 int dummy1 = 0, dummy2 = 0;
6c95b8df
PA
2143 struct inferior *inf;
2144 struct thread_info *tp;
2145
2146 tp = any_live_thread_of_process (pid);
2147 if (tp == NULL)
2148 return 1;
2149
2150 inf = find_inferior_pid (pid);
2151 old_chain = save_inferior_ptid ();
2152
2153 inferior_ptid = tp->ptid;
a4954f26 2154
86b887df 2155 tmp_error_stream = mem_fileopen ();
a4954f26 2156 make_cleanup_ui_file_delete (tmp_error_stream);
c906108c 2157
35df4500 2158 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 2159 {
35df4500 2160 if (bl->pspace != inf->pspace)
6c95b8df
PA
2161 continue;
2162
35df4500 2163 if (bl->inserted)
c5aa993b 2164 {
35df4500 2165 bl->inserted = 0;
3fbb6ffa 2166 val = insert_bp_location (bl, tmp_error_stream, &dummy1, &dummy2);
c5aa993b
JM
2167 if (val != 0)
2168 {
ce696e05 2169 do_cleanups (old_chain);
c5aa993b
JM
2170 return val;
2171 }
2172 }
2173 }
ce696e05 2174 do_cleanups (old_chain);
c906108c
SS
2175 return 0;
2176}
2177
e58b0e63
PA
2178static int internal_breakpoint_number = -1;
2179
84f4c1fe
PM
2180/* Set the breakpoint number of B, depending on the value of INTERNAL.
2181 If INTERNAL is non-zero, the breakpoint number will be populated
2182 from internal_breakpoint_number and that variable decremented.
e5dd4106 2183 Otherwise the breakpoint number will be populated from
84f4c1fe
PM
2184 breakpoint_count and that value incremented. Internal breakpoints
2185 do not set the internal var bpnum. */
2186static void
2187set_breakpoint_number (int internal, struct breakpoint *b)
2188{
2189 if (internal)
2190 b->number = internal_breakpoint_number--;
2191 else
2192 {
2193 set_breakpoint_count (breakpoint_count + 1);
2194 b->number = breakpoint_count;
2195 }
2196}
2197
e62c965a 2198static struct breakpoint *
a6d9a66e 2199create_internal_breakpoint (struct gdbarch *gdbarch,
06edf0c0 2200 CORE_ADDR address, enum bptype type,
c0a91b2b 2201 const struct breakpoint_ops *ops)
e62c965a 2202{
e62c965a
PP
2203 struct symtab_and_line sal;
2204 struct breakpoint *b;
2205
4a64f543 2206 init_sal (&sal); /* Initialize to zeroes. */
e62c965a
PP
2207
2208 sal.pc = address;
2209 sal.section = find_pc_overlay (sal.pc);
6c95b8df 2210 sal.pspace = current_program_space;
e62c965a 2211
06edf0c0 2212 b = set_raw_breakpoint (gdbarch, sal, type, ops);
e62c965a
PP
2213 b->number = internal_breakpoint_number--;
2214 b->disposition = disp_donttouch;
2215
2216 return b;
2217}
2218
17450429
PP
2219static const char *const longjmp_names[] =
2220 {
2221 "longjmp", "_longjmp", "siglongjmp", "_siglongjmp"
2222 };
2223#define NUM_LONGJMP_NAMES ARRAY_SIZE(longjmp_names)
2224
2225/* Per-objfile data private to breakpoint.c. */
2226struct breakpoint_objfile_data
2227{
2228 /* Minimal symbol for "_ovly_debug_event" (if any). */
2229 struct minimal_symbol *overlay_msym;
2230
2231 /* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any). */
2232 struct minimal_symbol *longjmp_msym[NUM_LONGJMP_NAMES];
2233
2234 /* Minimal symbol for "std::terminate()" (if any). */
2235 struct minimal_symbol *terminate_msym;
2236
2237 /* Minimal symbol for "_Unwind_DebugHook" (if any). */
2238 struct minimal_symbol *exception_msym;
2239};
2240
2241static const struct objfile_data *breakpoint_objfile_key;
2242
2243/* Minimal symbol not found sentinel. */
2244static struct minimal_symbol msym_not_found;
2245
2246/* Returns TRUE if MSYM point to the "not found" sentinel. */
2247
2248static int
2249msym_not_found_p (const struct minimal_symbol *msym)
2250{
2251 return msym == &msym_not_found;
2252}
2253
2254/* Return per-objfile data needed by breakpoint.c.
2255 Allocate the data if necessary. */
2256
2257static struct breakpoint_objfile_data *
2258get_breakpoint_objfile_data (struct objfile *objfile)
2259{
2260 struct breakpoint_objfile_data *bp_objfile_data;
2261
2262 bp_objfile_data = objfile_data (objfile, breakpoint_objfile_key);
2263 if (bp_objfile_data == NULL)
2264 {
2265 bp_objfile_data = obstack_alloc (&objfile->objfile_obstack,
2266 sizeof (*bp_objfile_data));
2267
2268 memset (bp_objfile_data, 0, sizeof (*bp_objfile_data));
2269 set_objfile_data (objfile, breakpoint_objfile_key, bp_objfile_data);
2270 }
2271 return bp_objfile_data;
2272}
2273
e62c965a 2274static void
af02033e 2275create_overlay_event_breakpoint (void)
e62c965a 2276{
69de3c6a 2277 struct objfile *objfile;
af02033e 2278 const char *const func_name = "_ovly_debug_event";
e62c965a 2279
69de3c6a
PP
2280 ALL_OBJFILES (objfile)
2281 {
2282 struct breakpoint *b;
17450429
PP
2283 struct breakpoint_objfile_data *bp_objfile_data;
2284 CORE_ADDR addr;
69de3c6a 2285
17450429
PP
2286 bp_objfile_data = get_breakpoint_objfile_data (objfile);
2287
2288 if (msym_not_found_p (bp_objfile_data->overlay_msym))
2289 continue;
2290
2291 if (bp_objfile_data->overlay_msym == NULL)
2292 {
2293 struct minimal_symbol *m;
2294
2295 m = lookup_minimal_symbol_text (func_name, objfile);
2296 if (m == NULL)
2297 {
2298 /* Avoid future lookups in this objfile. */
2299 bp_objfile_data->overlay_msym = &msym_not_found;
2300 continue;
2301 }
2302 bp_objfile_data->overlay_msym = m;
2303 }
e62c965a 2304
17450429
PP
2305 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym);
2306 b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
06edf0c0
PA
2307 bp_overlay_event,
2308 &internal_breakpoint_ops);
69de3c6a 2309 b->addr_string = xstrdup (func_name);
e62c965a 2310
69de3c6a
PP
2311 if (overlay_debugging == ovly_auto)
2312 {
2313 b->enable_state = bp_enabled;
2314 overlay_events_enabled = 1;
2315 }
2316 else
2317 {
2318 b->enable_state = bp_disabled;
2319 overlay_events_enabled = 0;
2320 }
e62c965a
PP
2321 }
2322 update_global_location_list (1);
2323}
2324
0fd8e87f 2325static void
af02033e 2326create_longjmp_master_breakpoint (void)
0fd8e87f 2327{
6c95b8df 2328 struct program_space *pspace;
6c95b8df
PA
2329 struct cleanup *old_chain;
2330
2331 old_chain = save_current_program_space ();
0fd8e87f 2332
6c95b8df 2333 ALL_PSPACES (pspace)
af02033e
PP
2334 {
2335 struct objfile *objfile;
2336
2337 set_current_program_space (pspace);
2338
2339 ALL_OBJFILES (objfile)
0fd8e87f 2340 {
af02033e
PP
2341 int i;
2342 struct gdbarch *gdbarch;
17450429 2343 struct breakpoint_objfile_data *bp_objfile_data;
0fd8e87f 2344
af02033e
PP
2345 gdbarch = get_objfile_arch (objfile);
2346 if (!gdbarch_get_longjmp_target_p (gdbarch))
0fd8e87f
UW
2347 continue;
2348
17450429
PP
2349 bp_objfile_data = get_breakpoint_objfile_data (objfile);
2350
2351 for (i = 0; i < NUM_LONGJMP_NAMES; i++)
af02033e
PP
2352 {
2353 struct breakpoint *b;
af02033e 2354 const char *func_name;
17450429 2355 CORE_ADDR addr;
6c95b8df 2356
17450429 2357 if (msym_not_found_p (bp_objfile_data->longjmp_msym[i]))
af02033e 2358 continue;
0fd8e87f 2359
17450429
PP
2360 func_name = longjmp_names[i];
2361 if (bp_objfile_data->longjmp_msym[i] == NULL)
2362 {
2363 struct minimal_symbol *m;
2364
2365 m = lookup_minimal_symbol_text (func_name, objfile);
2366 if (m == NULL)
2367 {
2368 /* Prevent future lookups in this objfile. */
2369 bp_objfile_data->longjmp_msym[i] = &msym_not_found;
2370 continue;
2371 }
2372 bp_objfile_data->longjmp_msym[i] = m;
2373 }
2374
2375 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]);
06edf0c0
PA
2376 b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master,
2377 &internal_breakpoint_ops);
af02033e
PP
2378 b->addr_string = xstrdup (func_name);
2379 b->enable_state = bp_disabled;
2380 }
0fd8e87f 2381 }
af02033e 2382 }
0fd8e87f 2383 update_global_location_list (1);
6c95b8df
PA
2384
2385 do_cleanups (old_chain);
0fd8e87f
UW
2386}
2387
af02033e 2388/* Create a master std::terminate breakpoint. */
aa7d318d 2389static void
af02033e 2390create_std_terminate_master_breakpoint (void)
aa7d318d
TT
2391{
2392 struct program_space *pspace;
aa7d318d 2393 struct cleanup *old_chain;
af02033e 2394 const char *const func_name = "std::terminate()";
aa7d318d
TT
2395
2396 old_chain = save_current_program_space ();
2397
2398 ALL_PSPACES (pspace)
17450429
PP
2399 {
2400 struct objfile *objfile;
2401 CORE_ADDR addr;
2402
2403 set_current_program_space (pspace);
2404
aa7d318d
TT
2405 ALL_OBJFILES (objfile)
2406 {
2407 struct breakpoint *b;
17450429 2408 struct breakpoint_objfile_data *bp_objfile_data;
aa7d318d 2409
17450429 2410 bp_objfile_data = get_breakpoint_objfile_data (objfile);
aa7d318d 2411
17450429
PP
2412 if (msym_not_found_p (bp_objfile_data->terminate_msym))
2413 continue;
2414
2415 if (bp_objfile_data->terminate_msym == NULL)
2416 {
2417 struct minimal_symbol *m;
2418
2419 m = lookup_minimal_symbol (func_name, NULL, objfile);
2420 if (m == NULL || (MSYMBOL_TYPE (m) != mst_text
2421 && MSYMBOL_TYPE (m) != mst_file_text))
2422 {
2423 /* Prevent future lookups in this objfile. */
2424 bp_objfile_data->terminate_msym = &msym_not_found;
2425 continue;
2426 }
2427 bp_objfile_data->terminate_msym = m;
2428 }
aa7d318d 2429
17450429
PP
2430 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym);
2431 b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
06edf0c0
PA
2432 bp_std_terminate_master,
2433 &internal_breakpoint_ops);
aa7d318d
TT
2434 b->addr_string = xstrdup (func_name);
2435 b->enable_state = bp_disabled;
2436 }
17450429
PP
2437 }
2438
aa7d318d
TT
2439 update_global_location_list (1);
2440
2441 do_cleanups (old_chain);
2442}
2443
186c406b
TT
2444/* Install a master breakpoint on the unwinder's debug hook. */
2445
2446void
2447create_exception_master_breakpoint (void)
2448{
2449 struct objfile *objfile;
17450429 2450 const char *const func_name = "_Unwind_DebugHook";
186c406b
TT
2451
2452 ALL_OBJFILES (objfile)
2453 {
17450429
PP
2454 struct breakpoint *b;
2455 struct gdbarch *gdbarch;
2456 struct breakpoint_objfile_data *bp_objfile_data;
2457 CORE_ADDR addr;
2458
2459 bp_objfile_data = get_breakpoint_objfile_data (objfile);
2460
2461 if (msym_not_found_p (bp_objfile_data->exception_msym))
2462 continue;
2463
2464 gdbarch = get_objfile_arch (objfile);
186c406b 2465
17450429 2466 if (bp_objfile_data->exception_msym == NULL)
186c406b 2467 {
17450429 2468 struct minimal_symbol *debug_hook;
186c406b 2469
17450429
PP
2470 debug_hook = lookup_minimal_symbol (func_name, NULL, objfile);
2471 if (debug_hook == NULL)
2472 {
2473 bp_objfile_data->exception_msym = &msym_not_found;
2474 continue;
2475 }
2476
2477 bp_objfile_data->exception_msym = debug_hook;
186c406b 2478 }
17450429
PP
2479
2480 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
2481 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
2482 &current_target);
06edf0c0
PA
2483 b = create_internal_breakpoint (gdbarch, addr, bp_exception_master,
2484 &internal_breakpoint_ops);
17450429
PP
2485 b->addr_string = xstrdup (func_name);
2486 b->enable_state = bp_disabled;
186c406b
TT
2487 }
2488
2489 update_global_location_list (1);
2490}
2491
c906108c 2492void
fba45db2 2493update_breakpoints_after_exec (void)
c906108c 2494{
35df4500 2495 struct breakpoint *b, *b_tmp;
876fa593 2496 struct bp_location *bploc, **bplocp_tmp;
c906108c 2497
25b22b0a
PA
2498 /* We're about to delete breakpoints from GDB's lists. If the
2499 INSERTED flag is true, GDB will try to lift the breakpoints by
2500 writing the breakpoints' "shadow contents" back into memory. The
2501 "shadow contents" are NOT valid after an exec, so GDB should not
2502 do that. Instead, the target is responsible from marking
2503 breakpoints out as soon as it detects an exec. We don't do that
2504 here instead, because there may be other attempts to delete
2505 breakpoints after detecting an exec and before reaching here. */
876fa593 2506 ALL_BP_LOCATIONS (bploc, bplocp_tmp)
6c95b8df
PA
2507 if (bploc->pspace == current_program_space)
2508 gdb_assert (!bploc->inserted);
c906108c 2509
35df4500 2510 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 2511 {
6c95b8df
PA
2512 if (b->pspace != current_program_space)
2513 continue;
2514
4a64f543 2515 /* Solib breakpoints must be explicitly reset after an exec(). */
c5aa993b
JM
2516 if (b->type == bp_shlib_event)
2517 {
2518 delete_breakpoint (b);
2519 continue;
2520 }
c906108c 2521
4a64f543 2522 /* JIT breakpoints must be explicitly reset after an exec(). */
4efc6507
DE
2523 if (b->type == bp_jit_event)
2524 {
2525 delete_breakpoint (b);
2526 continue;
2527 }
2528
1900040c 2529 /* Thread event breakpoints must be set anew after an exec(),
0fd8e87f
UW
2530 as must overlay event and longjmp master breakpoints. */
2531 if (b->type == bp_thread_event || b->type == bp_overlay_event
186c406b
TT
2532 || b->type == bp_longjmp_master || b->type == bp_std_terminate_master
2533 || b->type == bp_exception_master)
c4093a6a
JM
2534 {
2535 delete_breakpoint (b);
2536 continue;
2537 }
2538
4a64f543 2539 /* Step-resume breakpoints are meaningless after an exec(). */
2c03e5be 2540 if (b->type == bp_step_resume || b->type == bp_hp_step_resume)
c5aa993b
JM
2541 {
2542 delete_breakpoint (b);
2543 continue;
2544 }
2545
611c83ae
PA
2546 /* Longjmp and longjmp-resume breakpoints are also meaningless
2547 after an exec. */
186c406b
TT
2548 if (b->type == bp_longjmp || b->type == bp_longjmp_resume
2549 || b->type == bp_exception || b->type == bp_exception_resume)
611c83ae
PA
2550 {
2551 delete_breakpoint (b);
2552 continue;
2553 }
2554
ce78b96d
JB
2555 if (b->type == bp_catchpoint)
2556 {
2557 /* For now, none of the bp_catchpoint breakpoints need to
2558 do anything at this point. In the future, if some of
2559 the catchpoints need to something, we will need to add
2560 a new method, and call this method from here. */
2561 continue;
2562 }
2563
c5aa993b
JM
2564 /* bp_finish is a special case. The only way we ought to be able
2565 to see one of these when an exec() has happened, is if the user
2566 caught a vfork, and then said "finish". Ordinarily a finish just
2567 carries them to the call-site of the current callee, by setting
2568 a temporary bp there and resuming. But in this case, the finish
2569 will carry them entirely through the vfork & exec.
2570
2571 We don't want to allow a bp_finish to remain inserted now. But
2572 we can't safely delete it, 'cause finish_command has a handle to
2573 the bp on a bpstat, and will later want to delete it. There's a
2574 chance (and I've seen it happen) that if we delete the bp_finish
2575 here, that its storage will get reused by the time finish_command
2576 gets 'round to deleting the "use to be a bp_finish" breakpoint.
2577 We really must allow finish_command to delete a bp_finish.
2578
e5dd4106 2579 In the absence of a general solution for the "how do we know
53a5351d
JM
2580 it's safe to delete something others may have handles to?"
2581 problem, what we'll do here is just uninsert the bp_finish, and
2582 let finish_command delete it.
2583
2584 (We know the bp_finish is "doomed" in the sense that it's
2585 momentary, and will be deleted as soon as finish_command sees
2586 the inferior stopped. So it doesn't matter that the bp's
2587 address is probably bogus in the new a.out, unlike e.g., the
2588 solib breakpoints.) */
c5aa993b 2589
c5aa993b
JM
2590 if (b->type == bp_finish)
2591 {
2592 continue;
2593 }
2594
2595 /* Without a symbolic address, we have little hope of the
2596 pre-exec() address meaning the same thing in the post-exec()
4a64f543 2597 a.out. */
c5aa993b
JM
2598 if (b->addr_string == NULL)
2599 {
2600 delete_breakpoint (b);
2601 continue;
2602 }
c5aa993b 2603 }
1900040c 2604 /* FIXME what about longjmp breakpoints? Re-create them here? */
af02033e
PP
2605 create_overlay_event_breakpoint ();
2606 create_longjmp_master_breakpoint ();
2607 create_std_terminate_master_breakpoint ();
186c406b 2608 create_exception_master_breakpoint ();
c906108c
SS
2609}
2610
2611int
fba45db2 2612detach_breakpoints (int pid)
c906108c 2613{
35df4500 2614 struct bp_location *bl, **blp_tmp;
3a1bae8e 2615 int val = 0;
ce696e05 2616 struct cleanup *old_chain = save_inferior_ptid ();
6c95b8df 2617 struct inferior *inf = current_inferior ();
c5aa993b 2618
39f77062 2619 if (pid == PIDGET (inferior_ptid))
8a3fe4f8 2620 error (_("Cannot detach breakpoints of inferior_ptid"));
c5aa993b 2621
6c95b8df 2622 /* Set inferior_ptid; remove_breakpoint_1 uses this global. */
ce696e05 2623 inferior_ptid = pid_to_ptid (pid);
35df4500 2624 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 2625 {
35df4500 2626 if (bl->pspace != inf->pspace)
6c95b8df
PA
2627 continue;
2628
35df4500
TJB
2629 if (bl->inserted)
2630 val |= remove_breakpoint_1 (bl, mark_inserted);
c5aa993b 2631 }
d03285ec
UW
2632
2633 /* Detach single-step breakpoints as well. */
2634 detach_single_step_breakpoints ();
2635
ce696e05 2636 do_cleanups (old_chain);
3a1bae8e 2637 return val;
c906108c
SS
2638}
2639
35df4500 2640/* Remove the breakpoint location BL from the current address space.
6c95b8df
PA
2641 Note that this is used to detach breakpoints from a child fork.
2642 When we get here, the child isn't in the inferior list, and neither
2643 do we have objects to represent its address space --- we should
35df4500 2644 *not* look at bl->pspace->aspace here. */
6c95b8df 2645
c906108c 2646static int
35df4500 2647remove_breakpoint_1 (struct bp_location *bl, insertion_state_t is)
c906108c
SS
2648{
2649 int val;
c5aa993b 2650
35df4500
TJB
2651 /* BL is never in moribund_locations by our callers. */
2652 gdb_assert (bl->owner != NULL);
2bdf28a0 2653
35df4500 2654 if (bl->owner->enable_state == bp_permanent)
c2c6d25f
JM
2655 /* Permanent breakpoints cannot be inserted or removed. */
2656 return 0;
2657
74960c60
VP
2658 /* The type of none suggests that owner is actually deleted.
2659 This should not ever happen. */
35df4500 2660 gdb_assert (bl->owner->type != bp_none);
0bde7532 2661
35df4500
TJB
2662 if (bl->loc_type == bp_loc_software_breakpoint
2663 || bl->loc_type == bp_loc_hardware_breakpoint)
c906108c 2664 {
c02f5703
MS
2665 /* "Normal" instruction breakpoint: either the standard
2666 trap-instruction bp (bp_breakpoint), or a
2667 bp_hardware_breakpoint. */
2668
2669 /* First check to see if we have to handle an overlay. */
2670 if (overlay_debugging == ovly_off
35df4500
TJB
2671 || bl->section == NULL
2672 || !(section_is_overlay (bl->section)))
c02f5703
MS
2673 {
2674 /* No overlay handling: just remove the breakpoint. */
348d480f 2675 val = bl->owner->ops->remove_location (bl);
c02f5703 2676 }
c906108c
SS
2677 else
2678 {
4a64f543 2679 /* This breakpoint is in an overlay section.
c02f5703
MS
2680 Did we set a breakpoint at the LMA? */
2681 if (!overlay_events_enabled)
2682 {
2683 /* Yes -- overlay event support is not active, so we
2684 should have set a breakpoint at the LMA. Remove it.
2685 */
c02f5703
MS
2686 /* Ignore any failures: if the LMA is in ROM, we will
2687 have already warned when we failed to insert it. */
35df4500
TJB
2688 if (bl->loc_type == bp_loc_hardware_breakpoint)
2689 target_remove_hw_breakpoint (bl->gdbarch,
2690 &bl->overlay_target_info);
c02f5703 2691 else
35df4500
TJB
2692 target_remove_breakpoint (bl->gdbarch,
2693 &bl->overlay_target_info);
c02f5703
MS
2694 }
2695 /* Did we set a breakpoint at the VMA?
2696 If so, we will have marked the breakpoint 'inserted'. */
35df4500 2697 if (bl->inserted)
c906108c 2698 {
c02f5703
MS
2699 /* Yes -- remove it. Previously we did not bother to
2700 remove the breakpoint if the section had been
2701 unmapped, but let's not rely on that being safe. We
2702 don't know what the overlay manager might do. */
aa67235e
UW
2703
2704 /* However, we should remove *software* breakpoints only
2705 if the section is still mapped, or else we overwrite
2706 wrong code with the saved shadow contents. */
348d480f
PA
2707 if (bl->loc_type == bp_loc_hardware_breakpoint
2708 || section_is_mapped (bl->section))
2709 val = bl->owner->ops->remove_location (bl);
aa67235e
UW
2710 else
2711 val = 0;
c906108c 2712 }
c02f5703
MS
2713 else
2714 {
2715 /* No -- not inserted, so no need to remove. No error. */
2716 val = 0;
2717 }
c906108c 2718 }
879d1e6b
UW
2719
2720 /* In some cases, we might not be able to remove a breakpoint
2721 in a shared library that has already been removed, but we
2722 have not yet processed the shlib unload event. */
35df4500 2723 if (val && solib_name_from_address (bl->pspace, bl->address))
879d1e6b
UW
2724 val = 0;
2725
c906108c
SS
2726 if (val)
2727 return val;
35df4500 2728 bl->inserted = (is == mark_inserted);
c906108c 2729 }
35df4500 2730 else if (bl->loc_type == bp_loc_hardware_watchpoint)
c906108c 2731 {
77b06cd7
TJB
2732 gdb_assert (bl->owner->ops != NULL
2733 && bl->owner->ops->remove_location != NULL);
2734
35df4500 2735 bl->inserted = (is == mark_inserted);
77b06cd7 2736 bl->owner->ops->remove_location (bl);
2e70b7b9 2737
c906108c 2738 /* Failure to remove any of the hardware watchpoints comes here. */
35df4500 2739 if ((is == mark_uninserted) && (bl->inserted))
8a3fe4f8 2740 warning (_("Could not remove hardware watchpoint %d."),
35df4500 2741 bl->owner->number);
c906108c 2742 }
35df4500
TJB
2743 else if (bl->owner->type == bp_catchpoint
2744 && breakpoint_enabled (bl->owner)
2745 && !bl->duplicate)
ce78b96d 2746 {
77b06cd7
TJB
2747 gdb_assert (bl->owner->ops != NULL
2748 && bl->owner->ops->remove_location != NULL);
ce78b96d 2749
77b06cd7 2750 val = bl->owner->ops->remove_location (bl);
ce78b96d
JB
2751 if (val)
2752 return val;
77b06cd7 2753
35df4500 2754 bl->inserted = (is == mark_inserted);
ce78b96d 2755 }
c906108c
SS
2756
2757 return 0;
2758}
2759
6c95b8df 2760static int
35df4500 2761remove_breakpoint (struct bp_location *bl, insertion_state_t is)
6c95b8df
PA
2762{
2763 int ret;
2764 struct cleanup *old_chain;
2765
35df4500
TJB
2766 /* BL is never in moribund_locations by our callers. */
2767 gdb_assert (bl->owner != NULL);
2bdf28a0 2768
35df4500 2769 if (bl->owner->enable_state == bp_permanent)
6c95b8df
PA
2770 /* Permanent breakpoints cannot be inserted or removed. */
2771 return 0;
2772
2773 /* The type of none suggests that owner is actually deleted.
2774 This should not ever happen. */
35df4500 2775 gdb_assert (bl->owner->type != bp_none);
6c95b8df
PA
2776
2777 old_chain = save_current_space_and_thread ();
2778
35df4500 2779 switch_to_program_space_and_thread (bl->pspace);
6c95b8df 2780
35df4500 2781 ret = remove_breakpoint_1 (bl, is);
6c95b8df
PA
2782
2783 do_cleanups (old_chain);
2784 return ret;
2785}
2786
c906108c
SS
2787/* Clear the "inserted" flag in all breakpoints. */
2788
25b22b0a 2789void
fba45db2 2790mark_breakpoints_out (void)
c906108c 2791{
35df4500 2792 struct bp_location *bl, **blp_tmp;
c906108c 2793
35df4500
TJB
2794 ALL_BP_LOCATIONS (bl, blp_tmp)
2795 if (bl->pspace == current_program_space)
2796 bl->inserted = 0;
c906108c
SS
2797}
2798
53a5351d
JM
2799/* Clear the "inserted" flag in all breakpoints and delete any
2800 breakpoints which should go away between runs of the program.
c906108c
SS
2801
2802 Plus other such housekeeping that has to be done for breakpoints
2803 between runs.
2804
53a5351d
JM
2805 Note: this function gets called at the end of a run (by
2806 generic_mourn_inferior) and when a run begins (by
4a64f543 2807 init_wait_for_inferior). */
c906108c
SS
2808
2809
2810
2811void
fba45db2 2812breakpoint_init_inferior (enum inf_context context)
c906108c 2813{
35df4500
TJB
2814 struct breakpoint *b, *b_tmp;
2815 struct bp_location *bl, **blp_tmp;
1c5cfe86 2816 int ix;
6c95b8df 2817 struct program_space *pspace = current_program_space;
c906108c 2818
50c71eaf
PA
2819 /* If breakpoint locations are shared across processes, then there's
2820 nothing to do. */
2567c7d9 2821 if (gdbarch_has_global_breakpoints (target_gdbarch))
50c71eaf
PA
2822 return;
2823
35df4500 2824 ALL_BP_LOCATIONS (bl, blp_tmp)
6c95b8df 2825 {
35df4500
TJB
2826 /* ALL_BP_LOCATIONS bp_location has BL->OWNER always non-NULL. */
2827 if (bl->pspace == pspace
2828 && bl->owner->enable_state != bp_permanent)
2829 bl->inserted = 0;
6c95b8df 2830 }
075f6582 2831
35df4500 2832 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 2833 {
6c95b8df
PA
2834 if (b->loc && b->loc->pspace != pspace)
2835 continue;
2836
c5aa993b
JM
2837 switch (b->type)
2838 {
2839 case bp_call_dummy:
c906108c 2840
c5aa993b 2841 /* If the call dummy breakpoint is at the entry point it will
ab92d69b
PA
2842 cause problems when the inferior is rerun, so we better get
2843 rid of it. */
2844
2845 case bp_watchpoint_scope:
2846
2847 /* Also get rid of scope breakpoints. */
2848
2849 case bp_shlib_event:
2850
2851 /* Also remove solib event breakpoints. Their addresses may
2852 have changed since the last time we ran the program.
2853 Actually we may now be debugging against different target;
2854 and so the solib backend that installed this breakpoint may
2855 not be used in by the target. E.g.,
2856
2857 (gdb) file prog-linux
2858 (gdb) run # native linux target
2859 ...
2860 (gdb) kill
2861 (gdb) file prog-win.exe
2862 (gdb) tar rem :9999 # remote Windows gdbserver.
2863 */
c906108c 2864
c5aa993b
JM
2865 delete_breakpoint (b);
2866 break;
c906108c 2867
c5aa993b
JM
2868 case bp_watchpoint:
2869 case bp_hardware_watchpoint:
2870 case bp_read_watchpoint:
2871 case bp_access_watchpoint:
3a5c3e22
PA
2872 {
2873 struct watchpoint *w = (struct watchpoint *) b;
c906108c 2874
3a5c3e22
PA
2875 /* Likewise for watchpoints on local expressions. */
2876 if (w->exp_valid_block != NULL)
2877 delete_breakpoint (b);
2878 else if (context == inf_starting)
2879 {
2880 /* Reset val field to force reread of starting value in
2881 insert_breakpoints. */
2882 if (w->val)
2883 value_free (w->val);
2884 w->val = NULL;
2885 w->val_valid = 0;
c860120c 2886 }
3a5c3e22 2887 }
c5aa993b
JM
2888 break;
2889 default:
c5aa993b
JM
2890 break;
2891 }
2892 }
1c5cfe86
PA
2893
2894 /* Get rid of the moribund locations. */
35df4500
TJB
2895 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, bl); ++ix)
2896 decref_bp_location (&bl);
1c5cfe86 2897 VEC_free (bp_location_p, moribund_locations);
c906108c
SS
2898}
2899
6c95b8df
PA
2900/* These functions concern about actual breakpoints inserted in the
2901 target --- to e.g. check if we need to do decr_pc adjustment or if
2902 we need to hop over the bkpt --- so we check for address space
2903 match, not program space. */
2904
c2c6d25f
JM
2905/* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint
2906 exists at PC. It returns ordinary_breakpoint_here if it's an
2907 ordinary breakpoint, or permanent_breakpoint_here if it's a
2908 permanent breakpoint.
2909 - When continuing from a location with an ordinary breakpoint, we
2910 actually single step once before calling insert_breakpoints.
e5dd4106 2911 - When continuing from a location with a permanent breakpoint, we
c2c6d25f
JM
2912 need to use the `SKIP_PERMANENT_BREAKPOINT' macro, provided by
2913 the target, to advance the PC past the breakpoint. */
c906108c 2914
c2c6d25f 2915enum breakpoint_here
6c95b8df 2916breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
c906108c 2917{
35df4500 2918 struct bp_location *bl, **blp_tmp;
c2c6d25f 2919 int any_breakpoint_here = 0;
c906108c 2920
35df4500 2921 ALL_BP_LOCATIONS (bl, blp_tmp)
075f6582 2922 {
35df4500
TJB
2923 if (bl->loc_type != bp_loc_software_breakpoint
2924 && bl->loc_type != bp_loc_hardware_breakpoint)
075f6582
DJ
2925 continue;
2926
f1310107 2927 /* ALL_BP_LOCATIONS bp_location has BL->OWNER always non-NULL. */
35df4500
TJB
2928 if ((breakpoint_enabled (bl->owner)
2929 || bl->owner->enable_state == bp_permanent)
f1310107 2930 && breakpoint_location_address_match (bl, aspace, pc))
075f6582
DJ
2931 {
2932 if (overlay_debugging
35df4500
TJB
2933 && section_is_overlay (bl->section)
2934 && !section_is_mapped (bl->section))
075f6582 2935 continue; /* unmapped overlay -- can't be a match */
35df4500 2936 else if (bl->owner->enable_state == bp_permanent)
075f6582
DJ
2937 return permanent_breakpoint_here;
2938 else
2939 any_breakpoint_here = 1;
2940 }
2941 }
c906108c 2942
c2c6d25f 2943 return any_breakpoint_here ? ordinary_breakpoint_here : 0;
c906108c
SS
2944}
2945
1c5cfe86
PA
2946/* Return true if there's a moribund breakpoint at PC. */
2947
2948int
6c95b8df 2949moribund_breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
1c5cfe86
PA
2950{
2951 struct bp_location *loc;
2952 int ix;
2953
2954 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
f1310107 2955 if (breakpoint_location_address_match (loc, aspace, pc))
1c5cfe86
PA
2956 return 1;
2957
2958 return 0;
2959}
c2c6d25f 2960
c36b740a 2961/* Returns non-zero if there's a breakpoint inserted at PC, which is
4a64f543
MS
2962 inserted using regular breakpoint_chain / bp_location array
2963 mechanism. This does not check for single-step breakpoints, which
2964 are inserted and removed using direct target manipulation. */
c906108c
SS
2965
2966int
4a64f543
MS
2967regular_breakpoint_inserted_here_p (struct address_space *aspace,
2968 CORE_ADDR pc)
c906108c 2969{
35df4500 2970 struct bp_location *bl, **blp_tmp;
c906108c 2971
35df4500 2972 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 2973 {
35df4500
TJB
2974 if (bl->loc_type != bp_loc_software_breakpoint
2975 && bl->loc_type != bp_loc_hardware_breakpoint)
075f6582
DJ
2976 continue;
2977
35df4500 2978 if (bl->inserted
f1310107 2979 && breakpoint_location_address_match (bl, aspace, pc))
075f6582
DJ
2980 {
2981 if (overlay_debugging
35df4500
TJB
2982 && section_is_overlay (bl->section)
2983 && !section_is_mapped (bl->section))
075f6582
DJ
2984 continue; /* unmapped overlay -- can't be a match */
2985 else
2986 return 1;
2987 }
c5aa993b 2988 }
c36b740a
VP
2989 return 0;
2990}
2991
2992/* Returns non-zero iff there's either regular breakpoint
2993 or a single step breakpoint inserted at PC. */
2994
2995int
6c95b8df 2996breakpoint_inserted_here_p (struct address_space *aspace, CORE_ADDR pc)
c36b740a 2997{
6c95b8df 2998 if (regular_breakpoint_inserted_here_p (aspace, pc))
c36b740a 2999 return 1;
c906108c 3000
6c95b8df 3001 if (single_step_breakpoint_inserted_here_p (aspace, pc))
1aafd4da
UW
3002 return 1;
3003
c906108c
SS
3004 return 0;
3005}
3006
4fa8626c
DJ
3007/* This function returns non-zero iff there is a software breakpoint
3008 inserted at PC. */
3009
3010int
3e43a32a
MS
3011software_breakpoint_inserted_here_p (struct address_space *aspace,
3012 CORE_ADDR pc)
4fa8626c 3013{
35df4500 3014 struct bp_location *bl, **blp_tmp;
4fa8626c 3015
35df4500 3016 ALL_BP_LOCATIONS (bl, blp_tmp)
4fa8626c 3017 {
35df4500 3018 if (bl->loc_type != bp_loc_software_breakpoint)
4fa8626c
DJ
3019 continue;
3020
35df4500
TJB
3021 if (bl->inserted
3022 && breakpoint_address_match (bl->pspace->aspace, bl->address,
6c95b8df 3023 aspace, pc))
4fa8626c
DJ
3024 {
3025 if (overlay_debugging
35df4500
TJB
3026 && section_is_overlay (bl->section)
3027 && !section_is_mapped (bl->section))
4fa8626c
DJ
3028 continue; /* unmapped overlay -- can't be a match */
3029 else
3030 return 1;
3031 }
3032 }
3033
1aafd4da 3034 /* Also check for software single-step breakpoints. */
6c95b8df 3035 if (single_step_breakpoint_inserted_here_p (aspace, pc))
1aafd4da
UW
3036 return 1;
3037
4fa8626c
DJ
3038 return 0;
3039}
3040
9093389c
PA
3041int
3042hardware_watchpoint_inserted_in_range (struct address_space *aspace,
3043 CORE_ADDR addr, ULONGEST len)
3044{
3045 struct breakpoint *bpt;
3046
3047 ALL_BREAKPOINTS (bpt)
3048 {
3049 struct bp_location *loc;
3050
3051 if (bpt->type != bp_hardware_watchpoint
3052 && bpt->type != bp_access_watchpoint)
3053 continue;
3054
3055 if (!breakpoint_enabled (bpt))
3056 continue;
3057
3058 for (loc = bpt->loc; loc; loc = loc->next)
3059 if (loc->pspace->aspace == aspace && loc->inserted)
3060 {
3061 CORE_ADDR l, h;
3062
3063 /* Check for intersection. */
3064 l = max (loc->address, addr);
3065 h = min (loc->address + loc->length, addr + len);
3066 if (l < h)
3067 return 1;
3068 }
3069 }
3070 return 0;
3071}
3072
075f6582
DJ
3073/* breakpoint_thread_match (PC, PTID) returns true if the breakpoint at
3074 PC is valid for process/thread PTID. */
c906108c
SS
3075
3076int
6c95b8df
PA
3077breakpoint_thread_match (struct address_space *aspace, CORE_ADDR pc,
3078 ptid_t ptid)
c906108c 3079{
35df4500 3080 struct bp_location *bl, **blp_tmp;
4a306c9a 3081 /* The thread and task IDs associated to PTID, computed lazily. */
a6f1cd96 3082 int thread = -1;
4a306c9a 3083 int task = 0;
a6f1cd96 3084
35df4500 3085 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 3086 {
35df4500
TJB
3087 if (bl->loc_type != bp_loc_software_breakpoint
3088 && bl->loc_type != bp_loc_hardware_breakpoint)
075f6582
DJ
3089 continue;
3090
35df4500
TJB
3091 /* ALL_BP_LOCATIONS bp_location has bl->OWNER always non-NULL. */
3092 if (!breakpoint_enabled (bl->owner)
3093 && bl->owner->enable_state != bp_permanent)
a6f1cd96
JB
3094 continue;
3095
f1310107 3096 if (!breakpoint_location_address_match (bl, aspace, pc))
a6f1cd96
JB
3097 continue;
3098
35df4500 3099 if (bl->owner->thread != -1)
075f6582 3100 {
a6f1cd96
JB
3101 /* This is a thread-specific breakpoint. Check that ptid
3102 matches that thread. If thread hasn't been computed yet,
3103 it is now time to do so. */
3104 if (thread == -1)
3105 thread = pid_to_thread_id (ptid);
35df4500 3106 if (bl->owner->thread != thread)
a6f1cd96 3107 continue;
075f6582 3108 }
a6f1cd96 3109
35df4500 3110 if (bl->owner->task != 0)
4a306c9a
JB
3111 {
3112 /* This is a task-specific breakpoint. Check that ptid
3113 matches that task. If task hasn't been computed yet,
3114 it is now time to do so. */
3115 if (task == 0)
3116 task = ada_get_task_number (ptid);
35df4500 3117 if (bl->owner->task != task)
4a306c9a
JB
3118 continue;
3119 }
3120
a6f1cd96 3121 if (overlay_debugging
35df4500
TJB
3122 && section_is_overlay (bl->section)
3123 && !section_is_mapped (bl->section))
a6f1cd96
JB
3124 continue; /* unmapped overlay -- can't be a match */
3125
3126 return 1;
c5aa993b 3127 }
c906108c
SS
3128
3129 return 0;
3130}
c906108c 3131\f
c5aa993b 3132
c906108c
SS
3133/* bpstat stuff. External routines' interfaces are documented
3134 in breakpoint.h. */
3135
3136int
fba45db2 3137ep_is_catchpoint (struct breakpoint *ep)
c906108c 3138{
533be4dd 3139 return (ep->type == bp_catchpoint);
c906108c
SS
3140}
3141
f431efe5
PA
3142/* Frees any storage that is part of a bpstat. Does not walk the
3143 'next' chain. */
3144
3145static void
198757a8
VP
3146bpstat_free (bpstat bs)
3147{
3148 if (bs->old_val != NULL)
3149 value_free (bs->old_val);
9add0f1b 3150 decref_counted_command_line (&bs->commands);
f431efe5 3151 decref_bp_location (&bs->bp_location_at);
198757a8
VP
3152 xfree (bs);
3153}
3154
c906108c
SS
3155/* Clear a bpstat so that it says we are not at any breakpoint.
3156 Also free any storage that is part of a bpstat. */
3157
3158void
fba45db2 3159bpstat_clear (bpstat *bsp)
c906108c
SS
3160{
3161 bpstat p;
3162 bpstat q;
3163
3164 if (bsp == 0)
3165 return;
3166 p = *bsp;
3167 while (p != NULL)
3168 {
3169 q = p->next;
198757a8 3170 bpstat_free (p);
c906108c
SS
3171 p = q;
3172 }
3173 *bsp = NULL;
3174}
3175
3176/* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
3177 is part of the bpstat is copied as well. */
3178
3179bpstat
fba45db2 3180bpstat_copy (bpstat bs)
c906108c
SS
3181{
3182 bpstat p = NULL;
3183 bpstat tmp;
3184 bpstat retval = NULL;
3185
3186 if (bs == NULL)
3187 return bs;
3188
3189 for (; bs != NULL; bs = bs->next)
3190 {
3191 tmp = (bpstat) xmalloc (sizeof (*tmp));
3192 memcpy (tmp, bs, sizeof (*tmp));
9add0f1b 3193 incref_counted_command_line (tmp->commands);
f431efe5 3194 incref_bp_location (tmp->bp_location_at);
31cc81e9 3195 if (bs->old_val != NULL)
3c3185ac
JK
3196 {
3197 tmp->old_val = value_copy (bs->old_val);
3198 release_value (tmp->old_val);
3199 }
31cc81e9 3200
c906108c
SS
3201 if (p == NULL)
3202 /* This is the first thing in the chain. */
3203 retval = tmp;
3204 else
3205 p->next = tmp;
3206 p = tmp;
3207 }
3208 p->next = NULL;
3209 return retval;
3210}
3211
4a64f543 3212/* Find the bpstat associated with this breakpoint. */
c906108c
SS
3213
3214bpstat
fba45db2 3215bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
c906108c 3216{
c5aa993b
JM
3217 if (bsp == NULL)
3218 return NULL;
c906108c 3219
c5aa993b
JM
3220 for (; bsp != NULL; bsp = bsp->next)
3221 {
f431efe5 3222 if (bsp->breakpoint_at == breakpoint)
c5aa993b
JM
3223 return bsp;
3224 }
c906108c
SS
3225 return NULL;
3226}
3227
4a64f543
MS
3228/* Put in *NUM the breakpoint number of the first breakpoint we are
3229 stopped at. *BSP upon return is a bpstat which points to the
3230 remaining breakpoints stopped at (but which is not guaranteed to be
3231 good for anything but further calls to bpstat_num).
3232
8671a17b
PA
3233 Return 0 if passed a bpstat which does not indicate any breakpoints.
3234 Return -1 if stopped at a breakpoint that has been deleted since
3235 we set it.
3236 Return 1 otherwise. */
c906108c
SS
3237
3238int
8671a17b 3239bpstat_num (bpstat *bsp, int *num)
c906108c
SS
3240{
3241 struct breakpoint *b;
3242
3243 if ((*bsp) == NULL)
3244 return 0; /* No more breakpoint values */
8671a17b 3245
4a64f543
MS
3246 /* We assume we'll never have several bpstats that correspond to a
3247 single breakpoint -- otherwise, this function might return the
3248 same number more than once and this will look ugly. */
f431efe5 3249 b = (*bsp)->breakpoint_at;
8671a17b
PA
3250 *bsp = (*bsp)->next;
3251 if (b == NULL)
3252 return -1; /* breakpoint that's been deleted since */
3253
3254 *num = b->number; /* We have its number */
3255 return 1;
c906108c
SS
3256}
3257
e93ca019 3258/* See breakpoint.h. */
c906108c
SS
3259
3260void
e93ca019 3261bpstat_clear_actions (void)
c906108c 3262{
e93ca019
JK
3263 struct thread_info *tp;
3264 bpstat bs;
3265
3266 if (ptid_equal (inferior_ptid, null_ptid))
3267 return;
3268
3269 tp = find_thread_ptid (inferior_ptid);
3270 if (tp == NULL)
3271 return;
3272
3273 for (bs = tp->control.stop_bpstat; bs != NULL; bs = bs->next)
c906108c 3274 {
9add0f1b 3275 decref_counted_command_line (&bs->commands);
abf85f46 3276
c906108c
SS
3277 if (bs->old_val != NULL)
3278 {
3279 value_free (bs->old_val);
3280 bs->old_val = NULL;
3281 }
3282 }
3283}
3284
f3b1572e
PA
3285/* Called when a command is about to proceed the inferior. */
3286
3287static void
3288breakpoint_about_to_proceed (void)
3289{
3290 if (!ptid_equal (inferior_ptid, null_ptid))
3291 {
3292 struct thread_info *tp = inferior_thread ();
3293
3294 /* Allow inferior function calls in breakpoint commands to not
3295 interrupt the command list. When the call finishes
3296 successfully, the inferior will be standing at the same
3297 breakpoint as if nothing happened. */
16c381f0 3298 if (tp->control.in_infcall)
f3b1572e
PA
3299 return;
3300 }
3301
3302 breakpoint_proceeded = 1;
3303}
3304
4a64f543
MS
3305/* Stub for cleaning up our state if we error-out of a breakpoint
3306 command. */
c906108c 3307static void
4efb68b1 3308cleanup_executing_breakpoints (void *ignore)
c906108c
SS
3309{
3310 executing_breakpoint_commands = 0;
3311}
3312
abf85f46
JK
3313/* Return non-zero iff CMD as the first line of a command sequence is `silent'
3314 or its equivalent. */
3315
3316static int
3317command_line_is_silent (struct command_line *cmd)
3318{
3319 return cmd && (strcmp ("silent", cmd->line) == 0
3320 || (xdb_commands && strcmp ("Q", cmd->line) == 0));
3321}
3322
4a64f543
MS
3323/* Execute all the commands associated with all the breakpoints at
3324 this location. Any of these commands could cause the process to
3325 proceed beyond this point, etc. We look out for such changes by
3326 checking the global "breakpoint_proceeded" after each command.
c906108c 3327
347bddb7
PA
3328 Returns true if a breakpoint command resumed the inferior. In that
3329 case, it is the caller's responsibility to recall it again with the
3330 bpstat of the current thread. */
3331
3332static int
3333bpstat_do_actions_1 (bpstat *bsp)
c906108c
SS
3334{
3335 bpstat bs;
3336 struct cleanup *old_chain;
347bddb7 3337 int again = 0;
c906108c
SS
3338
3339 /* Avoid endless recursion if a `source' command is contained
3340 in bs->commands. */
3341 if (executing_breakpoint_commands)
347bddb7 3342 return 0;
c906108c
SS
3343
3344 executing_breakpoint_commands = 1;
3345 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
3346
cf6c5ffb
TT
3347 prevent_dont_repeat ();
3348
4a64f543 3349 /* This pointer will iterate over the list of bpstat's. */
c906108c
SS
3350 bs = *bsp;
3351
3352 breakpoint_proceeded = 0;
3353 for (; bs != NULL; bs = bs->next)
3354 {
9add0f1b 3355 struct counted_command_line *ccmd;
6c50ab1c
JB
3356 struct command_line *cmd;
3357 struct cleanup *this_cmd_tree_chain;
3358
3359 /* Take ownership of the BSP's command tree, if it has one.
3360
3361 The command tree could legitimately contain commands like
3362 'step' and 'next', which call clear_proceed_status, which
3363 frees stop_bpstat's command tree. To make sure this doesn't
3364 free the tree we're executing out from under us, we need to
3365 take ownership of the tree ourselves. Since a given bpstat's
3366 commands are only executed once, we don't need to copy it; we
3367 can clear the pointer in the bpstat, and make sure we free
3368 the tree when we're done. */
9add0f1b
TT
3369 ccmd = bs->commands;
3370 bs->commands = NULL;
abf85f46
JK
3371 this_cmd_tree_chain = make_cleanup_decref_counted_command_line (&ccmd);
3372 cmd = ccmd ? ccmd->commands : NULL;
3373 if (command_line_is_silent (cmd))
3374 {
3375 /* The action has been already done by bpstat_stop_status. */
3376 cmd = cmd->next;
3377 }
6c50ab1c 3378
c906108c
SS
3379 while (cmd != NULL)
3380 {
3381 execute_control_command (cmd);
3382
3383 if (breakpoint_proceeded)
3384 break;
3385 else
3386 cmd = cmd->next;
3387 }
6c50ab1c
JB
3388
3389 /* We can free this command tree now. */
3390 do_cleanups (this_cmd_tree_chain);
3391
c906108c 3392 if (breakpoint_proceeded)
32c1e744
VP
3393 {
3394 if (target_can_async_p ())
347bddb7
PA
3395 /* If we are in async mode, then the target might be still
3396 running, not stopped at any breakpoint, so nothing for
3397 us to do here -- just return to the event loop. */
3398 ;
32c1e744
VP
3399 else
3400 /* In sync mode, when execute_control_command returns
3401 we're already standing on the next breakpoint.
347bddb7
PA
3402 Breakpoint commands for that stop were not run, since
3403 execute_command does not run breakpoint commands --
3404 only command_line_handler does, but that one is not
3405 involved in execution of breakpoint commands. So, we
3406 can now execute breakpoint commands. It should be
3407 noted that making execute_command do bpstat actions is
3408 not an option -- in this case we'll have recursive
3409 invocation of bpstat for each breakpoint with a
3410 command, and can easily blow up GDB stack. Instead, we
3411 return true, which will trigger the caller to recall us
3412 with the new stop_bpstat. */
3413 again = 1;
3414 break;
32c1e744 3415 }
c906108c 3416 }
c2b8ed2c 3417 do_cleanups (old_chain);
347bddb7
PA
3418 return again;
3419}
3420
3421void
3422bpstat_do_actions (void)
3423{
353d1d73
JK
3424 struct cleanup *cleanup_if_error = make_bpstat_clear_actions_cleanup ();
3425
347bddb7
PA
3426 /* Do any commands attached to breakpoint we are stopped at. */
3427 while (!ptid_equal (inferior_ptid, null_ptid)
3428 && target_has_execution
3429 && !is_exited (inferior_ptid)
3430 && !is_executing (inferior_ptid))
3431 /* Since in sync mode, bpstat_do_actions may resume the inferior,
3432 and only return when it is stopped at the next breakpoint, we
3433 keep doing breakpoint actions until it returns false to
3434 indicate the inferior was not resumed. */
16c381f0 3435 if (!bpstat_do_actions_1 (&inferior_thread ()->control.stop_bpstat))
347bddb7 3436 break;
353d1d73
JK
3437
3438 discard_cleanups (cleanup_if_error);
c906108c
SS
3439}
3440
fa4727a6
DJ
3441/* Print out the (old or new) value associated with a watchpoint. */
3442
3443static void
3444watchpoint_value_print (struct value *val, struct ui_file *stream)
3445{
3446 if (val == NULL)
3447 fprintf_unfiltered (stream, _("<unreadable>"));
3448 else
79a45b7d
TT
3449 {
3450 struct value_print_options opts;
3451 get_user_print_options (&opts);
3452 value_print (val, stream, &opts);
3453 }
fa4727a6
DJ
3454}
3455
e514a9d6 3456/* Generic routine for printing messages indicating why we
4a64f543 3457 stopped. The behavior of this function depends on the value
e514a9d6
JM
3458 'print_it' in the bpstat structure. Under some circumstances we
3459 may decide not to print anything here and delegate the task to
4a64f543 3460 normal_stop(). */
e514a9d6
JM
3461
3462static enum print_stop_action
3463print_bp_stop_message (bpstat bs)
3464{
3465 switch (bs->print_it)
3466 {
3467 case print_it_noop:
4a64f543 3468 /* Nothing should be printed for this bpstat entry. */
e514a9d6
JM
3469 return PRINT_UNKNOWN;
3470 break;
3471
3472 case print_it_done:
3473 /* We still want to print the frame, but we already printed the
4a64f543 3474 relevant messages. */
e514a9d6
JM
3475 return PRINT_SRC_AND_LOC;
3476 break;
3477
3478 case print_it_normal:
4f8d1dc6 3479 {
f431efe5
PA
3480 struct breakpoint *b = bs->breakpoint_at;
3481
1a6a67de
TJB
3482 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
3483 which has since been deleted. */
3484 if (b == NULL)
3485 return PRINT_UNKNOWN;
3486
348d480f
PA
3487 /* Normal case. Call the breakpoint's print_it method. */
3488 return b->ops->print_it (bs);
4f8d1dc6 3489 }
348d480f 3490 break;
3086aeae 3491
e514a9d6 3492 default:
8e65ff28 3493 internal_error (__FILE__, __LINE__,
e2e0b3e5 3494 _("print_bp_stop_message: unrecognized enum value"));
e514a9d6 3495 break;
c906108c 3496 }
c906108c
SS
3497}
3498
edcc5120
TT
3499/* A helper function that prints a shared library stopped event. */
3500
3501static void
3502print_solib_event (int is_catchpoint)
3503{
3504 int any_deleted
3505 = !VEC_empty (char_ptr, current_program_space->deleted_solibs);
3506 int any_added
3507 = !VEC_empty (so_list_ptr, current_program_space->added_solibs);
3508
3509 if (!is_catchpoint)
3510 {
3511 if (any_added || any_deleted)
3512 ui_out_text (current_uiout,
3513 _("Stopped due to shared library event:\n"));
3514 else
3515 ui_out_text (current_uiout,
3516 _("Stopped due to shared library event (no "
3517 "libraries added or removed)\n"));
3518 }
3519
3520 if (ui_out_is_mi_like_p (current_uiout))
3521 ui_out_field_string (current_uiout, "reason",
3522 async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
3523
3524 if (any_deleted)
3525 {
3526 struct cleanup *cleanup;
3527 char *name;
3528 int ix;
3529
3530 ui_out_text (current_uiout, _(" Inferior unloaded "));
3531 cleanup = make_cleanup_ui_out_list_begin_end (current_uiout,
3532 "removed");
3533 for (ix = 0;
3534 VEC_iterate (char_ptr, current_program_space->deleted_solibs,
3535 ix, name);
3536 ++ix)
3537 {
3538 if (ix > 0)
3539 ui_out_text (current_uiout, " ");
3540 ui_out_field_string (current_uiout, "library", name);
3541 ui_out_text (current_uiout, "\n");
3542 }
3543
3544 do_cleanups (cleanup);
3545 }
3546
3547 if (any_added)
3548 {
3549 struct so_list *iter;
3550 int ix;
3551 struct cleanup *cleanup;
3552
3553 ui_out_text (current_uiout, _(" Inferior loaded "));
3554 cleanup = make_cleanup_ui_out_list_begin_end (current_uiout,
3555 "added");
3556 for (ix = 0;
3557 VEC_iterate (so_list_ptr, current_program_space->added_solibs,
3558 ix, iter);
3559 ++ix)
3560 {
3561 if (ix > 0)
3562 ui_out_text (current_uiout, " ");
3563 ui_out_field_string (current_uiout, "library", iter->so_name);
3564 ui_out_text (current_uiout, "\n");
3565 }
3566
3567 do_cleanups (cleanup);
3568 }
3569}
3570
e514a9d6
JM
3571/* Print a message indicating what happened. This is called from
3572 normal_stop(). The input to this routine is the head of the bpstat
36dfb11c
TT
3573 list - a list of the eventpoints that caused this stop. KIND is
3574 the target_waitkind for the stopping event. This
e514a9d6
JM
3575 routine calls the generic print routine for printing a message
3576 about reasons for stopping. This will print (for example) the
3577 "Breakpoint n," part of the output. The return value of this
3578 routine is one of:
c906108c 3579
4a64f543 3580 PRINT_UNKNOWN: Means we printed nothing.
917317f4 3581 PRINT_SRC_AND_LOC: Means we printed something, and expect subsequent
4a64f543 3582 code to print the location. An example is
c5aa993b
JM
3583 "Breakpoint 1, " which should be followed by
3584 the location.
917317f4 3585 PRINT_SRC_ONLY: Means we printed something, but there is no need
c5aa993b
JM
3586 to also print the location part of the message.
3587 An example is the catch/throw messages, which
4a64f543 3588 don't require a location appended to the end.
917317f4 3589 PRINT_NOTHING: We have done some printing and we don't need any
4a64f543 3590 further info to be printed. */
c906108c 3591
917317f4 3592enum print_stop_action
36dfb11c 3593bpstat_print (bpstat bs, int kind)
c906108c
SS
3594{
3595 int val;
c5aa993b 3596
c906108c 3597 /* Maybe another breakpoint in the chain caused us to stop.
53a5351d
JM
3598 (Currently all watchpoints go on the bpstat whether hit or not.
3599 That probably could (should) be changed, provided care is taken
c906108c 3600 with respect to bpstat_explains_signal). */
e514a9d6
JM
3601 for (; bs; bs = bs->next)
3602 {
3603 val = print_bp_stop_message (bs);
3604 if (val == PRINT_SRC_ONLY
3605 || val == PRINT_SRC_AND_LOC
3606 || val == PRINT_NOTHING)
3607 return val;
3608 }
c906108c 3609
36dfb11c
TT
3610 /* If we had hit a shared library event breakpoint,
3611 print_bp_stop_message would print out this message. If we hit an
3612 OS-level shared library event, do the same thing. */
3613 if (kind == TARGET_WAITKIND_LOADED)
3614 {
edcc5120 3615 print_solib_event (0);
36dfb11c
TT
3616 return PRINT_NOTHING;
3617 }
3618
e514a9d6 3619 /* We reached the end of the chain, or we got a null BS to start
4a64f543 3620 with and nothing was printed. */
917317f4 3621 return PRINT_UNKNOWN;
c906108c
SS
3622}
3623
4a64f543
MS
3624/* Evaluate the expression EXP and return 1 if value is zero. This is
3625 used inside a catch_errors to evaluate the breakpoint condition.
3626 The argument is a "struct expression *" that has been cast to a
3627 "char *" to make it pass through catch_errors. */
c906108c
SS
3628
3629static int
4efb68b1 3630breakpoint_cond_eval (void *exp)
c906108c 3631{
278cd55f 3632 struct value *mark = value_mark ();
c5aa993b 3633 int i = !value_true (evaluate_expression ((struct expression *) exp));
cc59ec59 3634
c906108c
SS
3635 value_free_to_mark (mark);
3636 return i;
3637}
3638
5760d0ab 3639/* Allocate a new bpstat. Link it to the FIFO list by BS_LINK_POINTER. */
c906108c
SS
3640
3641static bpstat
5760d0ab 3642bpstat_alloc (struct bp_location *bl, bpstat **bs_link_pointer)
c906108c
SS
3643{
3644 bpstat bs;
3645
3646 bs = (bpstat) xmalloc (sizeof (*bs));
5760d0ab
JK
3647 bs->next = NULL;
3648 **bs_link_pointer = bs;
3649 *bs_link_pointer = &bs->next;
f431efe5
PA
3650 bs->breakpoint_at = bl->owner;
3651 bs->bp_location_at = bl;
3652 incref_bp_location (bl);
c906108c
SS
3653 /* If the condition is false, etc., don't do the commands. */
3654 bs->commands = NULL;
3655 bs->old_val = NULL;
3656 bs->print_it = print_it_normal;
3657 return bs;
3658}
3659\f
d983da9c
DJ
3660/* The target has stopped with waitstatus WS. Check if any hardware
3661 watchpoints have triggered, according to the target. */
3662
3663int
3664watchpoints_triggered (struct target_waitstatus *ws)
3665{
d92524f1 3666 int stopped_by_watchpoint = target_stopped_by_watchpoint ();
d983da9c
DJ
3667 CORE_ADDR addr;
3668 struct breakpoint *b;
3669
3670 if (!stopped_by_watchpoint)
3671 {
3672 /* We were not stopped by a watchpoint. Mark all watchpoints
3673 as not triggered. */
3674 ALL_BREAKPOINTS (b)
cc60f2e3 3675 if (is_hardware_watchpoint (b))
3a5c3e22
PA
3676 {
3677 struct watchpoint *w = (struct watchpoint *) b;
3678
3679 w->watchpoint_triggered = watch_triggered_no;
3680 }
d983da9c
DJ
3681
3682 return 0;
3683 }
3684
3685 if (!target_stopped_data_address (&current_target, &addr))
3686 {
3687 /* We were stopped by a watchpoint, but we don't know where.
3688 Mark all watchpoints as unknown. */
3689 ALL_BREAKPOINTS (b)
cc60f2e3 3690 if (is_hardware_watchpoint (b))
3a5c3e22
PA
3691 {
3692 struct watchpoint *w = (struct watchpoint *) b;
3693
3694 w->watchpoint_triggered = watch_triggered_unknown;
3695 }
d983da9c
DJ
3696
3697 return stopped_by_watchpoint;
3698 }
3699
3700 /* The target could report the data address. Mark watchpoints
3701 affected by this data address as triggered, and all others as not
3702 triggered. */
3703
3704 ALL_BREAKPOINTS (b)
cc60f2e3 3705 if (is_hardware_watchpoint (b))
d983da9c 3706 {
3a5c3e22 3707 struct watchpoint *w = (struct watchpoint *) b;
a5606eee 3708 struct bp_location *loc;
d983da9c 3709
3a5c3e22 3710 w->watchpoint_triggered = watch_triggered_no;
a5606eee 3711 for (loc = b->loc; loc; loc = loc->next)
9c06b0b4 3712 {
3a5c3e22 3713 if (is_masked_watchpoint (b))
9c06b0b4 3714 {
3a5c3e22
PA
3715 CORE_ADDR newaddr = addr & w->hw_wp_mask;
3716 CORE_ADDR start = loc->address & w->hw_wp_mask;
9c06b0b4
TJB
3717
3718 if (newaddr == start)
3719 {
3a5c3e22 3720 w->watchpoint_triggered = watch_triggered_yes;
9c06b0b4
TJB
3721 break;
3722 }
3723 }
3724 /* Exact match not required. Within range is sufficient. */
3725 else if (target_watchpoint_addr_within_range (&current_target,
3726 addr, loc->address,
3727 loc->length))
3728 {
3a5c3e22 3729 w->watchpoint_triggered = watch_triggered_yes;
9c06b0b4
TJB
3730 break;
3731 }
3732 }
d983da9c
DJ
3733 }
3734
3735 return 1;
3736}
3737
c906108c
SS
3738/* Possible return values for watchpoint_check (this can't be an enum
3739 because of check_errors). */
3740/* The watchpoint has been deleted. */
3741#define WP_DELETED 1
3742/* The value has changed. */
3743#define WP_VALUE_CHANGED 2
3744/* The value has not changed. */
3745#define WP_VALUE_NOT_CHANGED 3
60e1c644
PA
3746/* Ignore this watchpoint, no matter if the value changed or not. */
3747#define WP_IGNORE 4
c906108c
SS
3748
3749#define BP_TEMPFLAG 1
3750#define BP_HARDWAREFLAG 2
3751
4a64f543
MS
3752/* Evaluate watchpoint condition expression and check if its value
3753 changed.
553e4c11
JB
3754
3755 P should be a pointer to struct bpstat, but is defined as a void *
3756 in order for this function to be usable with catch_errors. */
c906108c
SS
3757
3758static int
4efb68b1 3759watchpoint_check (void *p)
c906108c
SS
3760{
3761 bpstat bs = (bpstat) p;
3a5c3e22 3762 struct watchpoint *b;
c906108c
SS
3763 struct frame_info *fr;
3764 int within_current_scope;
3765
f431efe5 3766 /* BS is built from an existing struct breakpoint. */
2bdf28a0 3767 gdb_assert (bs->breakpoint_at != NULL);
3a5c3e22 3768 b = (struct watchpoint *) bs->breakpoint_at;
d0fb5eae 3769
f6bc2008
PA
3770 /* If this is a local watchpoint, we only want to check if the
3771 watchpoint frame is in scope if the current thread is the thread
3772 that was used to create the watchpoint. */
3773 if (!watchpoint_in_thread_scope (b))
60e1c644 3774 return WP_IGNORE;
f6bc2008 3775
c906108c
SS
3776 if (b->exp_valid_block == NULL)
3777 within_current_scope = 1;
3778 else
3779 {
edb3359d
DJ
3780 struct frame_info *frame = get_current_frame ();
3781 struct gdbarch *frame_arch = get_frame_arch (frame);
3782 CORE_ADDR frame_pc = get_frame_pc (frame);
3783
4a64f543
MS
3784 /* in_function_epilogue_p() returns a non-zero value if we're
3785 still in the function but the stack frame has already been
3786 invalidated. Since we can't rely on the values of local
3787 variables after the stack has been destroyed, we are treating
3788 the watchpoint in that state as `not changed' without further
3789 checking. Don't mark watchpoints as changed if the current
3790 frame is in an epilogue - even if they are in some other
3791 frame, our view of the stack is likely to be wrong and
3792 frame_find_by_id could error out. */
a0f49112 3793 if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc))
60e1c644 3794 return WP_IGNORE;
a0f49112 3795
101dcfbe 3796 fr = frame_find_by_id (b->watchpoint_frame);
c906108c 3797 within_current_scope = (fr != NULL);
69fbadd5
DJ
3798
3799 /* If we've gotten confused in the unwinder, we might have
3800 returned a frame that can't describe this variable. */
edb3359d
DJ
3801 if (within_current_scope)
3802 {
3803 struct symbol *function;
3804
3805 function = get_frame_function (fr);
3806 if (function == NULL
3807 || !contained_in (b->exp_valid_block,
3808 SYMBOL_BLOCK_VALUE (function)))
3809 within_current_scope = 0;
3810 }
69fbadd5 3811
edb3359d 3812 if (within_current_scope)
c906108c
SS
3813 /* If we end up stopping, the current frame will get selected
3814 in normal_stop. So this call to select_frame won't affect
3815 the user. */
0f7d239c 3816 select_frame (fr);
c906108c 3817 }
c5aa993b 3818
c906108c
SS
3819 if (within_current_scope)
3820 {
4a64f543
MS
3821 /* We use value_{,free_to_}mark because it could be a *long*
3822 time before we return to the command level and call
3823 free_all_values. We can't call free_all_values because we
3824 might be in the middle of evaluating a function call. */
c906108c 3825
0cf6dd15 3826 int pc = 0;
9c06b0b4 3827 struct value *mark;
fa4727a6
DJ
3828 struct value *new_val;
3829
3a5c3e22 3830 if (is_masked_watchpoint (&b->base))
9c06b0b4
TJB
3831 /* Since we don't know the exact trigger address (from
3832 stopped_data_address), just tell the user we've triggered
3833 a mask watchpoint. */
3834 return WP_VALUE_CHANGED;
3835
3836 mark = value_mark ();
0cf6dd15 3837 fetch_subexp_value (b->exp, &pc, &new_val, NULL, NULL);
218d2fc6 3838
4a64f543
MS
3839 /* We use value_equal_contents instead of value_equal because
3840 the latter coerces an array to a pointer, thus comparing just
3841 the address of the array instead of its contents. This is
3842 not what we want. */
fa4727a6 3843 if ((b->val != NULL) != (new_val != NULL)
218d2fc6 3844 || (b->val != NULL && !value_equal_contents (b->val, new_val)))
c906108c 3845 {
fa4727a6
DJ
3846 if (new_val != NULL)
3847 {
3848 release_value (new_val);
3849 value_free_to_mark (mark);
3850 }
c906108c
SS
3851 bs->old_val = b->val;
3852 b->val = new_val;
fa4727a6 3853 b->val_valid = 1;
c906108c
SS
3854 return WP_VALUE_CHANGED;
3855 }
3856 else
3857 {
60e1c644 3858 /* Nothing changed. */
c906108c 3859 value_free_to_mark (mark);
c906108c
SS
3860 return WP_VALUE_NOT_CHANGED;
3861 }
3862 }
3863 else
3864 {
79a45e25
PA
3865 struct ui_out *uiout = current_uiout;
3866
c906108c 3867 /* This seems like the only logical thing to do because
c5aa993b
JM
3868 if we temporarily ignored the watchpoint, then when
3869 we reenter the block in which it is valid it contains
3870 garbage (in the case of a function, it may have two
3871 garbage values, one before and one after the prologue).
3872 So we can't even detect the first assignment to it and
3873 watch after that (since the garbage may or may not equal
3874 the first value assigned). */
348d480f
PA
3875 /* We print all the stop information in
3876 breakpoint_ops->print_it, but in this case, by the time we
3877 call breakpoint_ops->print_it this bp will be deleted
3878 already. So we have no choice but print the information
3879 here. */
9dc5e2a9 3880 if (ui_out_is_mi_like_p (uiout))
034dad6f
BR
3881 ui_out_field_string
3882 (uiout, "reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_SCOPE));
8b93c638 3883 ui_out_text (uiout, "\nWatchpoint ");
3a5c3e22 3884 ui_out_field_int (uiout, "wpnum", b->base.number);
3e43a32a
MS
3885 ui_out_text (uiout,
3886 " deleted because the program has left the block in\n\
8b93c638 3887which its expression is valid.\n");
4ce44c66 3888
cdac0397 3889 /* Make sure the watchpoint's commands aren't executed. */
3a5c3e22 3890 decref_counted_command_line (&b->base.commands);
d0fb5eae 3891 watchpoint_del_at_next_stop (b);
c906108c
SS
3892
3893 return WP_DELETED;
3894 }
3895}
3896
18a18393 3897/* Return true if it looks like target has stopped due to hitting
348d480f
PA
3898 breakpoint location BL. This function does not check if we should
3899 stop, only if BL explains the stop. */
3900
18a18393 3901static int
6c95b8df 3902bpstat_check_location (const struct bp_location *bl,
09ac7c10
TT
3903 struct address_space *aspace, CORE_ADDR bp_addr,
3904 const struct target_waitstatus *ws)
18a18393
VP
3905{
3906 struct breakpoint *b = bl->owner;
3907
348d480f 3908 /* BL is from an existing breakpoint. */
2bdf28a0
JK
3909 gdb_assert (b != NULL);
3910
09ac7c10 3911 return b->ops->breakpoint_hit (bl, aspace, bp_addr, ws);
18a18393
VP
3912}
3913
3a5c3e22
PA
3914/* Determine if the watched values have actually changed, and we
3915 should stop. If not, set BS->stop to 0. */
3916
18a18393
VP
3917static void
3918bpstat_check_watchpoint (bpstat bs)
3919{
2bdf28a0 3920 const struct bp_location *bl;
3a5c3e22 3921 struct watchpoint *b;
2bdf28a0
JK
3922
3923 /* BS is built for existing struct breakpoint. */
f431efe5 3924 bl = bs->bp_location_at;
2bdf28a0 3925 gdb_assert (bl != NULL);
3a5c3e22 3926 b = (struct watchpoint *) bs->breakpoint_at;
2bdf28a0 3927 gdb_assert (b != NULL);
18a18393 3928
18a18393 3929 {
18a18393
VP
3930 int must_check_value = 0;
3931
3a5c3e22 3932 if (b->base.type == bp_watchpoint)
18a18393
VP
3933 /* For a software watchpoint, we must always check the
3934 watched value. */
3935 must_check_value = 1;
3936 else if (b->watchpoint_triggered == watch_triggered_yes)
3937 /* We have a hardware watchpoint (read, write, or access)
3938 and the target earlier reported an address watched by
3939 this watchpoint. */
3940 must_check_value = 1;
3941 else if (b->watchpoint_triggered == watch_triggered_unknown
3a5c3e22 3942 && b->base.type == bp_hardware_watchpoint)
18a18393
VP
3943 /* We were stopped by a hardware watchpoint, but the target could
3944 not report the data address. We must check the watchpoint's
3945 value. Access and read watchpoints are out of luck; without
3946 a data address, we can't figure it out. */
3947 must_check_value = 1;
3a5c3e22 3948
18a18393
VP
3949 if (must_check_value)
3950 {
3e43a32a
MS
3951 char *message
3952 = xstrprintf ("Error evaluating expression for watchpoint %d\n",
3a5c3e22 3953 b->base.number);
18a18393
VP
3954 struct cleanup *cleanups = make_cleanup (xfree, message);
3955 int e = catch_errors (watchpoint_check, bs, message,
3956 RETURN_MASK_ALL);
3957 do_cleanups (cleanups);
3958 switch (e)
3959 {
3960 case WP_DELETED:
3961 /* We've already printed what needs to be printed. */
3962 bs->print_it = print_it_done;
3963 /* Stop. */
3964 break;
60e1c644
PA
3965 case WP_IGNORE:
3966 bs->print_it = print_it_noop;
3967 bs->stop = 0;
3968 break;
18a18393 3969 case WP_VALUE_CHANGED:
3a5c3e22 3970 if (b->base.type == bp_read_watchpoint)
18a18393 3971 {
85d721b8
PA
3972 /* There are two cases to consider here:
3973
4a64f543 3974 1. We're watching the triggered memory for reads.
85d721b8
PA
3975 In that case, trust the target, and always report
3976 the watchpoint hit to the user. Even though
3977 reads don't cause value changes, the value may
3978 have changed since the last time it was read, and
3979 since we're not trapping writes, we will not see
3980 those, and as such we should ignore our notion of
3981 old value.
3982
4a64f543 3983 2. We're watching the triggered memory for both
85d721b8
PA
3984 reads and writes. There are two ways this may
3985 happen:
3986
4a64f543 3987 2.1. This is a target that can't break on data
85d721b8
PA
3988 reads only, but can break on accesses (reads or
3989 writes), such as e.g., x86. We detect this case
3990 at the time we try to insert read watchpoints.
3991
4a64f543 3992 2.2. Otherwise, the target supports read
85d721b8
PA
3993 watchpoints, but, the user set an access or write
3994 watchpoint watching the same memory as this read
3995 watchpoint.
3996
3997 If we're watching memory writes as well as reads,
3998 ignore watchpoint hits when we find that the
3999 value hasn't changed, as reads don't cause
4000 changes. This still gives false positives when
4001 the program writes the same value to memory as
4002 what there was already in memory (we will confuse
4003 it for a read), but it's much better than
4004 nothing. */
4005
4006 int other_write_watchpoint = 0;
4007
4008 if (bl->watchpoint_type == hw_read)
4009 {
4010 struct breakpoint *other_b;
4011
4012 ALL_BREAKPOINTS (other_b)
3a5c3e22
PA
4013 if (other_b->type == bp_hardware_watchpoint
4014 || other_b->type == bp_access_watchpoint)
85d721b8 4015 {
3a5c3e22
PA
4016 struct watchpoint *other_w =
4017 (struct watchpoint *) other_b;
4018
4019 if (other_w->watchpoint_triggered
4020 == watch_triggered_yes)
4021 {
4022 other_write_watchpoint = 1;
4023 break;
4024 }
85d721b8
PA
4025 }
4026 }
4027
4028 if (other_write_watchpoint
4029 || bl->watchpoint_type == hw_access)
4030 {
4031 /* We're watching the same memory for writes,
4032 and the value changed since the last time we
4033 updated it, so this trap must be for a write.
4034 Ignore it. */
4035 bs->print_it = print_it_noop;
4036 bs->stop = 0;
4037 }
18a18393
VP
4038 }
4039 break;
4040 case WP_VALUE_NOT_CHANGED:
3a5c3e22
PA
4041 if (b->base.type == bp_hardware_watchpoint
4042 || b->base.type == bp_watchpoint)
18a18393
VP
4043 {
4044 /* Don't stop: write watchpoints shouldn't fire if
4045 the value hasn't changed. */
4046 bs->print_it = print_it_noop;
4047 bs->stop = 0;
4048 }
4049 /* Stop. */
4050 break;
4051 default:
4052 /* Can't happen. */
4053 case 0:
4054 /* Error from catch_errors. */
3a5c3e22 4055 printf_filtered (_("Watchpoint %d deleted.\n"), b->base.number);
d0fb5eae 4056 watchpoint_del_at_next_stop (b);
18a18393
VP
4057 /* We've already printed what needs to be printed. */
4058 bs->print_it = print_it_done;
4059 break;
4060 }
4061 }
4062 else /* must_check_value == 0 */
4063 {
4064 /* This is a case where some watchpoint(s) triggered, but
4065 not at the address of this watchpoint, or else no
4066 watchpoint triggered after all. So don't print
4067 anything for this watchpoint. */
4068 bs->print_it = print_it_noop;
4069 bs->stop = 0;
4070 }
4071 }
4072}
4073
4074
4075/* Check conditions (condition proper, frame, thread and ignore count)
4076 of breakpoint referred to by BS. If we should not stop for this
4077 breakpoint, set BS->stop to 0. */
f431efe5 4078
18a18393
VP
4079static void
4080bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
4081{
4082 int thread_id = pid_to_thread_id (ptid);
2bdf28a0
JK
4083 const struct bp_location *bl;
4084 struct breakpoint *b;
4085
4086 /* BS is built for existing struct breakpoint. */
f431efe5 4087 bl = bs->bp_location_at;
2bdf28a0 4088 gdb_assert (bl != NULL);
f431efe5 4089 b = bs->breakpoint_at;
2bdf28a0 4090 gdb_assert (b != NULL);
18a18393
VP
4091
4092 if (frame_id_p (b->frame_id)
edb3359d 4093 && !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ())))
18a18393
VP
4094 bs->stop = 0;
4095 else if (bs->stop)
4096 {
4097 int value_is_zero = 0;
60e1c644
PA
4098 struct expression *cond;
4099
7371cf6d
PM
4100 /* Evaluate Python breakpoints that have a "stop"
4101 method implemented. */
4102 if (b->py_bp_object)
4103 bs->stop = gdbpy_should_stop (b->py_bp_object);
4104
60e1c644 4105 if (is_watchpoint (b))
3a5c3e22
PA
4106 {
4107 struct watchpoint *w = (struct watchpoint *) b;
4108
4109 cond = w->cond_exp;
4110 }
60e1c644
PA
4111 else
4112 cond = bl->cond;
4113
f431efe5 4114 if (cond && b->disposition != disp_del_at_next_stop)
18a18393 4115 {
60e1c644 4116 int within_current_scope = 1;
3a5c3e22 4117 struct watchpoint * w;
60e1c644 4118
c5bc3a77
DJ
4119 /* We use value_mark and value_free_to_mark because it could
4120 be a long time before we return to the command level and
4121 call free_all_values. We can't call free_all_values
4122 because we might be in the middle of evaluating a
4123 function call. */
4124 struct value *mark = value_mark ();
4125
3a5c3e22
PA
4126 if (is_watchpoint (b))
4127 w = (struct watchpoint *) b;
4128 else
4129 w = NULL;
4130
edb3359d
DJ
4131 /* Need to select the frame, with all that implies so that
4132 the conditions will have the right context. Because we
4133 use the frame, we will not see an inlined function's
4134 variables when we arrive at a breakpoint at the start
4135 of the inlined function; the current frame will be the
4136 call site. */
3a5c3e22 4137 if (w == NULL || w->cond_exp_valid_block == NULL)
60e1c644
PA
4138 select_frame (get_current_frame ());
4139 else
4140 {
4141 struct frame_info *frame;
4142
4143 /* For local watchpoint expressions, which particular
4144 instance of a local is being watched matters, so we
4145 keep track of the frame to evaluate the expression
4146 in. To evaluate the condition however, it doesn't
4147 really matter which instantiation of the function
4148 where the condition makes sense triggers the
4149 watchpoint. This allows an expression like "watch
4150 global if q > 10" set in `func', catch writes to
4151 global on all threads that call `func', or catch
4152 writes on all recursive calls of `func' by a single
4153 thread. We simply always evaluate the condition in
4154 the innermost frame that's executing where it makes
4155 sense to evaluate the condition. It seems
4156 intuitive. */
3a5c3e22 4157 frame = block_innermost_frame (w->cond_exp_valid_block);
60e1c644
PA
4158 if (frame != NULL)
4159 select_frame (frame);
4160 else
4161 within_current_scope = 0;
4162 }
4163 if (within_current_scope)
4164 value_is_zero
4165 = catch_errors (breakpoint_cond_eval, cond,
4166 "Error in testing breakpoint condition:\n",
4167 RETURN_MASK_ALL);
4168 else
4169 {
4170 warning (_("Watchpoint condition cannot be tested "
4171 "in the current scope"));
4172 /* If we failed to set the right context for this
4173 watchpoint, unconditionally report it. */
4174 value_is_zero = 0;
4175 }
4a64f543 4176 /* FIXME-someday, should give breakpoint #. */
c5bc3a77 4177 value_free_to_mark (mark);
18a18393 4178 }
60e1c644
PA
4179
4180 if (cond && value_is_zero)
18a18393
VP
4181 {
4182 bs->stop = 0;
4183 }
4184 else if (b->thread != -1 && b->thread != thread_id)
4185 {
4186 bs->stop = 0;
4187 }
4188 else if (b->ignore_count > 0)
4189 {
4190 b->ignore_count--;
4191 annotate_ignore_count_change ();
4192 bs->stop = 0;
4a64f543 4193 /* Increase the hit count even though we don't stop. */
18a18393 4194 ++(b->hit_count);
8d3788bd 4195 observer_notify_breakpoint_modified (b);
18a18393
VP
4196 }
4197 }
4198}
4199
4200
9709f61c 4201/* Get a bpstat associated with having just stopped at address
d983da9c 4202 BP_ADDR in thread PTID.
c906108c 4203
d983da9c 4204 Determine whether we stopped at a breakpoint, etc, or whether we
4a64f543
MS
4205 don't understand this stop. Result is a chain of bpstat's such
4206 that:
c906108c 4207
c5aa993b 4208 if we don't understand the stop, the result is a null pointer.
c906108c 4209
c5aa993b 4210 if we understand why we stopped, the result is not null.
c906108c 4211
c5aa993b
JM
4212 Each element of the chain refers to a particular breakpoint or
4213 watchpoint at which we have stopped. (We may have stopped for
4214 several reasons concurrently.)
c906108c 4215
c5aa993b
JM
4216 Each element of the chain has valid next, breakpoint_at,
4217 commands, FIXME??? fields. */
c906108c
SS
4218
4219bpstat
6c95b8df 4220bpstat_stop_status (struct address_space *aspace,
09ac7c10
TT
4221 CORE_ADDR bp_addr, ptid_t ptid,
4222 const struct target_waitstatus *ws)
c906108c 4223{
0d381245 4224 struct breakpoint *b = NULL;
afe38095 4225 struct bp_location *bl;
20874c92 4226 struct bp_location *loc;
5760d0ab
JK
4227 /* First item of allocated bpstat's. */
4228 bpstat bs_head = NULL, *bs_link = &bs_head;
c906108c 4229 /* Pointer to the last thing in the chain currently. */
5760d0ab 4230 bpstat bs;
20874c92 4231 int ix;
429374b8 4232 int need_remove_insert;
f431efe5 4233 int removed_any;
c906108c 4234
f431efe5
PA
4235 /* First, build the bpstat chain with locations that explain a
4236 target stop, while being careful to not set the target running,
4237 as that may invalidate locations (in particular watchpoint
4238 locations are recreated). Resuming will happen here with
4239 breakpoint conditions or watchpoint expressions that include
4240 inferior function calls. */
c5aa993b 4241
429374b8
JK
4242 ALL_BREAKPOINTS (b)
4243 {
4244 if (!breakpoint_enabled (b) && b->enable_state != bp_permanent)
4245 continue;
a5606eee 4246
429374b8
JK
4247 for (bl = b->loc; bl != NULL; bl = bl->next)
4248 {
4a64f543
MS
4249 /* For hardware watchpoints, we look only at the first
4250 location. The watchpoint_check function will work on the
4251 entire expression, not the individual locations. For
4252 read watchpoints, the watchpoints_triggered function has
4253 checked all locations already. */
429374b8
JK
4254 if (b->type == bp_hardware_watchpoint && bl != b->loc)
4255 break;
18a18393 4256
429374b8
JK
4257 if (bl->shlib_disabled)
4258 continue;
c5aa993b 4259
09ac7c10 4260 if (!bpstat_check_location (bl, aspace, bp_addr, ws))
429374b8 4261 continue;
c5aa993b 4262
4a64f543
MS
4263 /* Come here if it's a watchpoint, or if the break address
4264 matches. */
c5aa993b 4265
4a64f543
MS
4266 bs = bpstat_alloc (bl, &bs_link); /* Alloc a bpstat to
4267 explain stop. */
c5aa993b 4268
f431efe5
PA
4269 /* Assume we stop. Should we find a watchpoint that is not
4270 actually triggered, or if the condition of the breakpoint
4271 evaluates as false, we'll reset 'stop' to 0. */
429374b8
JK
4272 bs->stop = 1;
4273 bs->print = 1;
d983da9c 4274
f431efe5
PA
4275 /* If this is a scope breakpoint, mark the associated
4276 watchpoint as triggered so that we will handle the
4277 out-of-scope event. We'll get to the watchpoint next
4278 iteration. */
d0fb5eae 4279 if (b->type == bp_watchpoint_scope && b->related_breakpoint != b)
3a5c3e22
PA
4280 {
4281 struct watchpoint *w = (struct watchpoint *) b->related_breakpoint;
4282
4283 w->watchpoint_triggered = watch_triggered_yes;
4284 }
f431efe5
PA
4285 }
4286 }
4287
4288 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
4289 {
f1310107 4290 if (breakpoint_location_address_match (loc, aspace, bp_addr))
f431efe5 4291 {
5760d0ab 4292 bs = bpstat_alloc (loc, &bs_link);
f431efe5
PA
4293 /* For hits of moribund locations, we should just proceed. */
4294 bs->stop = 0;
4295 bs->print = 0;
4296 bs->print_it = print_it_noop;
4297 }
4298 }
4299
edcc5120
TT
4300 /* A bit of special processing for shlib breakpoints. We need to
4301 process solib loading here, so that the lists of loaded and
4302 unloaded libraries are correct before we handle "catch load" and
4303 "catch unload". */
4304 for (bs = bs_head; bs != NULL; bs = bs->next)
4305 {
5d268276 4306 if (bs->breakpoint_at && bs->breakpoint_at->type == bp_shlib_event)
edcc5120
TT
4307 {
4308 handle_solib_event ();
4309 break;
4310 }
4311 }
4312
f431efe5
PA
4313 /* Now go through the locations that caused the target to stop, and
4314 check whether we're interested in reporting this stop to higher
4315 layers, or whether we should resume the target transparently. */
4316
4317 removed_any = 0;
4318
5760d0ab 4319 for (bs = bs_head; bs != NULL; bs = bs->next)
f431efe5
PA
4320 {
4321 if (!bs->stop)
4322 continue;
4323
f431efe5 4324 b = bs->breakpoint_at;
348d480f
PA
4325 b->ops->check_status (bs);
4326 if (bs->stop)
28010a5d 4327 {
348d480f 4328 bpstat_check_breakpoint_conditions (bs, ptid);
f431efe5 4329
429374b8
JK
4330 if (bs->stop)
4331 {
4332 ++(b->hit_count);
8d3788bd 4333 observer_notify_breakpoint_modified (b);
c906108c 4334
4a64f543 4335 /* We will stop here. */
429374b8
JK
4336 if (b->disposition == disp_disable)
4337 {
4338 if (b->enable_state != bp_permanent)
4339 b->enable_state = bp_disabled;
f431efe5 4340 removed_any = 1;
429374b8
JK
4341 }
4342 if (b->silent)
4343 bs->print = 0;
4344 bs->commands = b->commands;
9add0f1b 4345 incref_counted_command_line (bs->commands);
abf85f46
JK
4346 if (command_line_is_silent (bs->commands
4347 ? bs->commands->commands : NULL))
4348 bs->print = 0;
429374b8
JK
4349 }
4350
348d480f 4351 }
a9b3a50f
PA
4352
4353 /* Print nothing for this entry if we don't stop or don't
4354 print. */
4355 if (!bs->stop || !bs->print)
4356 bs->print_it = print_it_noop;
429374b8 4357 }
876fa593 4358
d983da9c
DJ
4359 /* If we aren't stopping, the value of some hardware watchpoint may
4360 not have changed, but the intermediate memory locations we are
4361 watching may have. Don't bother if we're stopping; this will get
4362 done later. */
d832cb68 4363 need_remove_insert = 0;
5760d0ab
JK
4364 if (! bpstat_causes_stop (bs_head))
4365 for (bs = bs_head; bs != NULL; bs = bs->next)
d983da9c 4366 if (!bs->stop
f431efe5
PA
4367 && bs->breakpoint_at
4368 && is_hardware_watchpoint (bs->breakpoint_at))
d983da9c 4369 {
3a5c3e22
PA
4370 struct watchpoint *w = (struct watchpoint *) bs->breakpoint_at;
4371
4372 update_watchpoint (w, 0 /* don't reparse. */);
d832cb68 4373 need_remove_insert = 1;
d983da9c
DJ
4374 }
4375
d832cb68 4376 if (need_remove_insert)
2d134ed3 4377 update_global_location_list (1);
f431efe5
PA
4378 else if (removed_any)
4379 update_global_location_list (0);
d832cb68 4380
5760d0ab 4381 return bs_head;
c906108c 4382}
628fe4e4
JK
4383
4384static void
4385handle_jit_event (void)
4386{
4387 struct frame_info *frame;
4388 struct gdbarch *gdbarch;
4389
4390 /* Switch terminal for any messages produced by
4391 breakpoint_re_set. */
4392 target_terminal_ours_for_output ();
4393
4394 frame = get_current_frame ();
4395 gdbarch = get_frame_arch (frame);
4396
4397 jit_event_handler (gdbarch);
4398
4399 target_terminal_inferior ();
4400}
4401
edcc5120
TT
4402/* Handle an solib event by calling solib_add. */
4403
4404void
4405handle_solib_event (void)
4406{
4407 clear_program_space_solib_cache (current_inferior ()->pspace);
4408
4409 /* Check for any newly added shared libraries if we're supposed to
4410 be adding them automatically. Switch terminal for any messages
4411 produced by breakpoint_re_set. */
4412 target_terminal_ours_for_output ();
4413#ifdef SOLIB_ADD
4414 SOLIB_ADD (NULL, 0, &current_target, auto_solib_add);
4415#else
4416 solib_add (NULL, 0, &current_target, auto_solib_add);
4417#endif
4418 target_terminal_inferior ();
4419}
4420
628fe4e4
JK
4421/* Prepare WHAT final decision for infrun. */
4422
4423/* Decide what infrun needs to do with this bpstat. */
4424
c906108c 4425struct bpstat_what
0e30163f 4426bpstat_what (bpstat bs_head)
c906108c 4427{
c906108c 4428 struct bpstat_what retval;
628fe4e4 4429 int jit_event = 0;
0e30163f 4430 bpstat bs;
c906108c 4431
628fe4e4 4432 retval.main_action = BPSTAT_WHAT_KEEP_CHECKING;
aa7d318d 4433 retval.call_dummy = STOP_NONE;
186c406b 4434 retval.is_longjmp = 0;
628fe4e4 4435
0e30163f 4436 for (bs = bs_head; bs != NULL; bs = bs->next)
c906108c 4437 {
628fe4e4
JK
4438 /* Extract this BS's action. After processing each BS, we check
4439 if its action overrides all we've seem so far. */
4440 enum bpstat_what_main_action this_action = BPSTAT_WHAT_KEEP_CHECKING;
4441 enum bptype bptype;
4442
c906108c 4443 if (bs->breakpoint_at == NULL)
628fe4e4
JK
4444 {
4445 /* I suspect this can happen if it was a momentary
4446 breakpoint which has since been deleted. */
4447 bptype = bp_none;
4448 }
20874c92 4449 else
f431efe5 4450 bptype = bs->breakpoint_at->type;
628fe4e4
JK
4451
4452 switch (bptype)
c906108c
SS
4453 {
4454 case bp_none:
628fe4e4 4455 break;
c906108c
SS
4456 case bp_breakpoint:
4457 case bp_hardware_breakpoint:
4458 case bp_until:
4459 case bp_finish:
a9b3a50f 4460 case bp_shlib_event:
c906108c
SS
4461 if (bs->stop)
4462 {
4463 if (bs->print)
628fe4e4 4464 this_action = BPSTAT_WHAT_STOP_NOISY;
c906108c 4465 else
628fe4e4 4466 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c
SS
4467 }
4468 else
628fe4e4 4469 this_action = BPSTAT_WHAT_SINGLE;
c906108c
SS
4470 break;
4471 case bp_watchpoint:
4472 case bp_hardware_watchpoint:
4473 case bp_read_watchpoint:
4474 case bp_access_watchpoint:
4475 if (bs->stop)
4476 {
4477 if (bs->print)
628fe4e4 4478 this_action = BPSTAT_WHAT_STOP_NOISY;
c906108c 4479 else
628fe4e4 4480 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c
SS
4481 }
4482 else
628fe4e4
JK
4483 {
4484 /* There was a watchpoint, but we're not stopping.
4485 This requires no further action. */
4486 }
c906108c
SS
4487 break;
4488 case bp_longjmp:
186c406b 4489 case bp_exception:
628fe4e4 4490 this_action = BPSTAT_WHAT_SET_LONGJMP_RESUME;
186c406b 4491 retval.is_longjmp = bptype == bp_longjmp;
c906108c
SS
4492 break;
4493 case bp_longjmp_resume:
186c406b 4494 case bp_exception_resume:
628fe4e4 4495 this_action = BPSTAT_WHAT_CLEAR_LONGJMP_RESUME;
186c406b 4496 retval.is_longjmp = bptype == bp_longjmp_resume;
c906108c
SS
4497 break;
4498 case bp_step_resume:
4499 if (bs->stop)
628fe4e4
JK
4500 this_action = BPSTAT_WHAT_STEP_RESUME;
4501 else
c906108c 4502 {
628fe4e4
JK
4503 /* It is for the wrong frame. */
4504 this_action = BPSTAT_WHAT_SINGLE;
c906108c 4505 }
c906108c 4506 break;
2c03e5be
PA
4507 case bp_hp_step_resume:
4508 if (bs->stop)
4509 this_action = BPSTAT_WHAT_HP_STEP_RESUME;
4510 else
4511 {
4512 /* It is for the wrong frame. */
4513 this_action = BPSTAT_WHAT_SINGLE;
4514 }
4515 break;
c906108c 4516 case bp_watchpoint_scope:
c4093a6a 4517 case bp_thread_event:
1900040c 4518 case bp_overlay_event:
0fd8e87f 4519 case bp_longjmp_master:
aa7d318d 4520 case bp_std_terminate_master:
186c406b 4521 case bp_exception_master:
628fe4e4 4522 this_action = BPSTAT_WHAT_SINGLE;
c4093a6a 4523 break;
ce78b96d 4524 case bp_catchpoint:
c5aa993b
JM
4525 if (bs->stop)
4526 {
4527 if (bs->print)
628fe4e4 4528 this_action = BPSTAT_WHAT_STOP_NOISY;
c5aa993b 4529 else
628fe4e4 4530 this_action = BPSTAT_WHAT_STOP_SILENT;
c5aa993b
JM
4531 }
4532 else
628fe4e4
JK
4533 {
4534 /* There was a catchpoint, but we're not stopping.
4535 This requires no further action. */
4536 }
4537 break;
628fe4e4
JK
4538 case bp_jit_event:
4539 jit_event = 1;
4540 this_action = BPSTAT_WHAT_SINGLE;
c5aa993b 4541 break;
c906108c 4542 case bp_call_dummy:
53a5351d
JM
4543 /* Make sure the action is stop (silent or noisy),
4544 so infrun.c pops the dummy frame. */
aa7d318d 4545 retval.call_dummy = STOP_STACK_DUMMY;
628fe4e4 4546 this_action = BPSTAT_WHAT_STOP_SILENT;
aa7d318d
TT
4547 break;
4548 case bp_std_terminate:
4549 /* Make sure the action is stop (silent or noisy),
4550 so infrun.c pops the dummy frame. */
aa7d318d 4551 retval.call_dummy = STOP_STD_TERMINATE;
628fe4e4 4552 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c 4553 break;
1042e4c0 4554 case bp_tracepoint:
7a697b8d 4555 case bp_fast_tracepoint:
0fb4aa4b 4556 case bp_static_tracepoint:
1042e4c0
SS
4557 /* Tracepoint hits should not be reported back to GDB, and
4558 if one got through somehow, it should have been filtered
4559 out already. */
4560 internal_error (__FILE__, __LINE__,
7a697b8d 4561 _("bpstat_what: tracepoint encountered"));
0e30163f
JK
4562 break;
4563 case bp_gnu_ifunc_resolver:
4564 /* Step over it (and insert bp_gnu_ifunc_resolver_return). */
4565 this_action = BPSTAT_WHAT_SINGLE;
4566 break;
4567 case bp_gnu_ifunc_resolver_return:
4568 /* The breakpoint will be removed, execution will restart from the
4569 PC of the former breakpoint. */
4570 this_action = BPSTAT_WHAT_KEEP_CHECKING;
4571 break;
628fe4e4
JK
4572 default:
4573 internal_error (__FILE__, __LINE__,
4574 _("bpstat_what: unhandled bptype %d"), (int) bptype);
c906108c 4575 }
628fe4e4
JK
4576
4577 retval.main_action = max (retval.main_action, this_action);
c906108c 4578 }
628fe4e4 4579
0e30163f
JK
4580 /* These operations may affect the bs->breakpoint_at state so they are
4581 delayed after MAIN_ACTION is decided above. */
4582
628fe4e4
JK
4583 if (jit_event)
4584 {
4585 if (debug_infrun)
4586 fprintf_unfiltered (gdb_stdlog, "bpstat_what: bp_jit_event\n");
4587
4588 handle_jit_event ();
4589 }
4590
0e30163f
JK
4591 for (bs = bs_head; bs != NULL; bs = bs->next)
4592 {
4593 struct breakpoint *b = bs->breakpoint_at;
4594
4595 if (b == NULL)
4596 continue;
4597 switch (b->type)
4598 {
4599 case bp_gnu_ifunc_resolver:
4600 gnu_ifunc_resolver_stop (b);
4601 break;
4602 case bp_gnu_ifunc_resolver_return:
4603 gnu_ifunc_resolver_return_stop (b);
4604 break;
4605 }
4606 }
4607
c906108c
SS
4608 return retval;
4609}
4610
4611/* Nonzero if we should step constantly (e.g. watchpoints on machines
4612 without hardware support). This isn't related to a specific bpstat,
4613 just to things like whether watchpoints are set. */
4614
c5aa993b 4615int
fba45db2 4616bpstat_should_step (void)
c906108c
SS
4617{
4618 struct breakpoint *b;
cc59ec59 4619
c906108c 4620 ALL_BREAKPOINTS (b)
717a8278 4621 if (breakpoint_enabled (b) && b->type == bp_watchpoint && b->loc != NULL)
3172dc30 4622 return 1;
c906108c
SS
4623 return 0;
4624}
4625
67822962
PA
4626int
4627bpstat_causes_stop (bpstat bs)
4628{
4629 for (; bs != NULL; bs = bs->next)
4630 if (bs->stop)
4631 return 1;
4632
4633 return 0;
4634}
4635
c906108c 4636\f
c5aa993b 4637
170b53b2
UW
4638/* Compute a string of spaces suitable to indent the next line
4639 so it starts at the position corresponding to the table column
4640 named COL_NAME in the currently active table of UIOUT. */
4641
4642static char *
4643wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
4644{
4645 static char wrap_indent[80];
4646 int i, total_width, width, align;
4647 char *text;
4648
4649 total_width = 0;
4650 for (i = 1; ui_out_query_field (uiout, i, &width, &align, &text); i++)
4651 {
4652 if (strcmp (text, col_name) == 0)
4653 {
4654 gdb_assert (total_width < sizeof wrap_indent);
4655 memset (wrap_indent, ' ', total_width);
4656 wrap_indent[total_width] = 0;
4657
4658 return wrap_indent;
4659 }
4660
4661 total_width += width + 1;
4662 }
4663
4664 return NULL;
4665}
4666
859825b8
JK
4667/* Print the LOC location out of the list of B->LOC locations. */
4668
170b53b2
UW
4669static void
4670print_breakpoint_location (struct breakpoint *b,
4671 struct bp_location *loc)
0d381245 4672{
79a45e25 4673 struct ui_out *uiout = current_uiout;
6c95b8df
PA
4674 struct cleanup *old_chain = save_current_program_space ();
4675
859825b8
JK
4676 if (loc != NULL && loc->shlib_disabled)
4677 loc = NULL;
4678
6c95b8df
PA
4679 if (loc != NULL)
4680 set_current_program_space (loc->pspace);
4681
56435ebe
TT
4682 if (b->display_canonical)
4683 ui_out_field_string (uiout, "what", b->addr_string);
f8eba3c6 4684 else if (loc && loc->source_file)
0d381245
VP
4685 {
4686 struct symbol *sym
4687 = find_pc_sect_function (loc->address, loc->section);
4688 if (sym)
4689 {
4690 ui_out_text (uiout, "in ");
4691 ui_out_field_string (uiout, "func",
4692 SYMBOL_PRINT_NAME (sym));
170b53b2
UW
4693 ui_out_text (uiout, " ");
4694 ui_out_wrap_hint (uiout, wrap_indent_at_field (uiout, "what"));
4695 ui_out_text (uiout, "at ");
0d381245 4696 }
f8eba3c6 4697 ui_out_field_string (uiout, "file", loc->source_file);
0d381245
VP
4698 ui_out_text (uiout, ":");
4699
4700 if (ui_out_is_mi_like_p (uiout))
4701 {
4702 struct symtab_and_line sal = find_pc_line (loc->address, 0);
4703 char *fullname = symtab_to_fullname (sal.symtab);
4704
4705 if (fullname)
4706 ui_out_field_string (uiout, "fullname", fullname);
4707 }
4708
f8eba3c6 4709 ui_out_field_int (uiout, "line", loc->line_number);
0d381245 4710 }
859825b8 4711 else if (loc)
0d381245 4712 {
170b53b2
UW
4713 struct ui_stream *stb = ui_out_stream_new (uiout);
4714 struct cleanup *stb_chain = make_cleanup_ui_out_stream_delete (stb);
4715
22e722e1
DJ
4716 print_address_symbolic (loc->gdbarch, loc->address, stb->stream,
4717 demangle, "");
0d381245 4718 ui_out_field_stream (uiout, "at", stb);
170b53b2
UW
4719
4720 do_cleanups (stb_chain);
0d381245 4721 }
859825b8
JK
4722 else
4723 ui_out_field_string (uiout, "pending", b->addr_string);
6c95b8df
PA
4724
4725 do_cleanups (old_chain);
0d381245
VP
4726}
4727
269b11a2
PA
4728static const char *
4729bptype_string (enum bptype type)
c906108c 4730{
c4093a6a
JM
4731 struct ep_type_description
4732 {
4733 enum bptype type;
4734 char *description;
4735 };
4736 static struct ep_type_description bptypes[] =
c906108c 4737 {
c5aa993b
JM
4738 {bp_none, "?deleted?"},
4739 {bp_breakpoint, "breakpoint"},
c906108c 4740 {bp_hardware_breakpoint, "hw breakpoint"},
c5aa993b
JM
4741 {bp_until, "until"},
4742 {bp_finish, "finish"},
4743 {bp_watchpoint, "watchpoint"},
c906108c 4744 {bp_hardware_watchpoint, "hw watchpoint"},
c5aa993b
JM
4745 {bp_read_watchpoint, "read watchpoint"},
4746 {bp_access_watchpoint, "acc watchpoint"},
4747 {bp_longjmp, "longjmp"},
4748 {bp_longjmp_resume, "longjmp resume"},
186c406b
TT
4749 {bp_exception, "exception"},
4750 {bp_exception_resume, "exception resume"},
c5aa993b 4751 {bp_step_resume, "step resume"},
2c03e5be 4752 {bp_hp_step_resume, "high-priority step resume"},
c5aa993b
JM
4753 {bp_watchpoint_scope, "watchpoint scope"},
4754 {bp_call_dummy, "call dummy"},
aa7d318d 4755 {bp_std_terminate, "std::terminate"},
c5aa993b 4756 {bp_shlib_event, "shlib events"},
c4093a6a 4757 {bp_thread_event, "thread events"},
1900040c 4758 {bp_overlay_event, "overlay events"},
0fd8e87f 4759 {bp_longjmp_master, "longjmp master"},
aa7d318d 4760 {bp_std_terminate_master, "std::terminate master"},
186c406b 4761 {bp_exception_master, "exception master"},
ce78b96d 4762 {bp_catchpoint, "catchpoint"},
1042e4c0 4763 {bp_tracepoint, "tracepoint"},
7a697b8d 4764 {bp_fast_tracepoint, "fast tracepoint"},
0fb4aa4b 4765 {bp_static_tracepoint, "static tracepoint"},
4efc6507 4766 {bp_jit_event, "jit events"},
0e30163f
JK
4767 {bp_gnu_ifunc_resolver, "STT_GNU_IFUNC resolver"},
4768 {bp_gnu_ifunc_resolver_return, "STT_GNU_IFUNC resolver return"},
c5aa993b 4769 };
269b11a2
PA
4770
4771 if (((int) type >= (sizeof (bptypes) / sizeof (bptypes[0])))
4772 || ((int) type != bptypes[(int) type].type))
4773 internal_error (__FILE__, __LINE__,
4774 _("bptypes table does not describe type #%d."),
4775 (int) type);
4776
4777 return bptypes[(int) type].description;
4778}
4779
4780/* Print B to gdb_stdout. */
4781
4782static void
4783print_one_breakpoint_location (struct breakpoint *b,
4784 struct bp_location *loc,
4785 int loc_number,
4786 struct bp_location **last_loc,
269b11a2
PA
4787 int allflag)
4788{
4789 struct command_line *l;
c2c6d25f 4790 static char bpenables[] = "nynny";
c906108c 4791
79a45e25 4792 struct ui_out *uiout = current_uiout;
0d381245
VP
4793 int header_of_multiple = 0;
4794 int part_of_multiple = (loc != NULL);
79a45b7d
TT
4795 struct value_print_options opts;
4796
4797 get_user_print_options (&opts);
0d381245
VP
4798
4799 gdb_assert (!loc || loc_number != 0);
4a64f543
MS
4800 /* See comment in print_one_breakpoint concerning treatment of
4801 breakpoints with single disabled location. */
0d381245
VP
4802 if (loc == NULL
4803 && (b->loc != NULL
4804 && (b->loc->next != NULL || !b->loc->enabled)))
4805 header_of_multiple = 1;
4806 if (loc == NULL)
4807 loc = b->loc;
4808
c4093a6a
JM
4809 annotate_record ();
4810
4811 /* 1 */
4812 annotate_field (0);
0d381245
VP
4813 if (part_of_multiple)
4814 {
4815 char *formatted;
0c6773c1 4816 formatted = xstrprintf ("%d.%d", b->number, loc_number);
0d381245
VP
4817 ui_out_field_string (uiout, "number", formatted);
4818 xfree (formatted);
4819 }
4820 else
4821 {
4822 ui_out_field_int (uiout, "number", b->number);
4823 }
c4093a6a
JM
4824
4825 /* 2 */
4826 annotate_field (1);
0d381245
VP
4827 if (part_of_multiple)
4828 ui_out_field_skip (uiout, "type");
269b11a2
PA
4829 else
4830 ui_out_field_string (uiout, "type", bptype_string (b->type));
c4093a6a
JM
4831
4832 /* 3 */
4833 annotate_field (2);
0d381245
VP
4834 if (part_of_multiple)
4835 ui_out_field_skip (uiout, "disp");
4836 else
2cec12e5 4837 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
0d381245 4838
c4093a6a
JM
4839
4840 /* 4 */
4841 annotate_field (3);
0d381245 4842 if (part_of_multiple)
54e52265 4843 ui_out_field_string (uiout, "enabled", loc->enabled ? "y" : "n");
0d381245 4844 else
4a64f543
MS
4845 ui_out_field_fmt (uiout, "enabled", "%c",
4846 bpenables[(int) b->enable_state]);
54e52265 4847 ui_out_spaces (uiout, 2);
0d381245 4848
c4093a6a
JM
4849
4850 /* 5 and 6 */
3086aeae 4851 if (b->ops != NULL && b->ops->print_one != NULL)
0d381245 4852 {
4a64f543
MS
4853 /* Although the print_one can possibly print all locations,
4854 calling it here is not likely to get any nice result. So,
4855 make sure there's just one location. */
0d381245 4856 gdb_assert (b->loc == NULL || b->loc->next == NULL);
a6d9a66e 4857 b->ops->print_one (b, last_loc);
0d381245 4858 }
3086aeae
DJ
4859 else
4860 switch (b->type)
4861 {
4862 case bp_none:
4863 internal_error (__FILE__, __LINE__,
e2e0b3e5 4864 _("print_one_breakpoint: bp_none encountered\n"));
3086aeae 4865 break;
c906108c 4866
3086aeae
DJ
4867 case bp_watchpoint:
4868 case bp_hardware_watchpoint:
4869 case bp_read_watchpoint:
4870 case bp_access_watchpoint:
3a5c3e22
PA
4871 {
4872 struct watchpoint *w = (struct watchpoint *) b;
4873
4874 /* Field 4, the address, is omitted (which makes the columns
4875 not line up too nicely with the headers, but the effect
4876 is relatively readable). */
4877 if (opts.addressprint)
4878 ui_out_field_skip (uiout, "addr");
4879 annotate_field (5);
4880 ui_out_field_string (uiout, "what", w->exp_string);
4881 }
3086aeae
DJ
4882 break;
4883
3086aeae
DJ
4884 case bp_breakpoint:
4885 case bp_hardware_breakpoint:
4886 case bp_until:
4887 case bp_finish:
4888 case bp_longjmp:
4889 case bp_longjmp_resume:
186c406b
TT
4890 case bp_exception:
4891 case bp_exception_resume:
3086aeae 4892 case bp_step_resume:
2c03e5be 4893 case bp_hp_step_resume:
3086aeae
DJ
4894 case bp_watchpoint_scope:
4895 case bp_call_dummy:
aa7d318d 4896 case bp_std_terminate:
3086aeae
DJ
4897 case bp_shlib_event:
4898 case bp_thread_event:
4899 case bp_overlay_event:
0fd8e87f 4900 case bp_longjmp_master:
aa7d318d 4901 case bp_std_terminate_master:
186c406b 4902 case bp_exception_master:
1042e4c0 4903 case bp_tracepoint:
7a697b8d 4904 case bp_fast_tracepoint:
0fb4aa4b 4905 case bp_static_tracepoint:
4efc6507 4906 case bp_jit_event:
0e30163f
JK
4907 case bp_gnu_ifunc_resolver:
4908 case bp_gnu_ifunc_resolver_return:
79a45b7d 4909 if (opts.addressprint)
3086aeae
DJ
4910 {
4911 annotate_field (4);
54e52265 4912 if (header_of_multiple)
0d381245 4913 ui_out_field_string (uiout, "addr", "<MULTIPLE>");
e9bbd7c5 4914 else if (b->loc == NULL || loc->shlib_disabled)
54e52265 4915 ui_out_field_string (uiout, "addr", "<PENDING>");
0101ce28 4916 else
5af949e3
UW
4917 ui_out_field_core_addr (uiout, "addr",
4918 loc->gdbarch, loc->address);
3086aeae
DJ
4919 }
4920 annotate_field (5);
0d381245 4921 if (!header_of_multiple)
170b53b2 4922 print_breakpoint_location (b, loc);
0d381245 4923 if (b->loc)
a6d9a66e 4924 *last_loc = b->loc;
3086aeae
DJ
4925 break;
4926 }
c906108c 4927
6c95b8df
PA
4928
4929 /* For backward compatibility, don't display inferiors unless there
4930 are several. */
4931 if (loc != NULL
4932 && !header_of_multiple
4933 && (allflag
4934 || (!gdbarch_has_global_breakpoints (target_gdbarch)
4935 && (number_of_program_spaces () > 1
4936 || number_of_inferiors () > 1)
4a64f543
MS
4937 /* LOC is for existing B, it cannot be in
4938 moribund_locations and thus having NULL OWNER. */
6c95b8df
PA
4939 && loc->owner->type != bp_catchpoint)))
4940 {
4941 struct inferior *inf;
4942 int first = 1;
4943
4944 for (inf = inferior_list; inf != NULL; inf = inf->next)
4945 {
4946 if (inf->pspace == loc->pspace)
4947 {
4948 if (first)
4949 {
4950 first = 0;
4951 ui_out_text (uiout, " inf ");
4952 }
4953 else
4954 ui_out_text (uiout, ", ");
4955 ui_out_text (uiout, plongest (inf->num));
4956 }
4957 }
4958 }
4959
4a306c9a 4960 if (!part_of_multiple)
c4093a6a 4961 {
4a306c9a
JB
4962 if (b->thread != -1)
4963 {
4964 /* FIXME: This seems to be redundant and lost here; see the
4a64f543 4965 "stop only in" line a little further down. */
4a306c9a
JB
4966 ui_out_text (uiout, " thread ");
4967 ui_out_field_int (uiout, "thread", b->thread);
4968 }
4969 else if (b->task != 0)
4970 {
4971 ui_out_text (uiout, " task ");
4972 ui_out_field_int (uiout, "task", b->task);
4973 }
c4093a6a 4974 }
f1310107 4975
8b93c638 4976 ui_out_text (uiout, "\n");
f1310107 4977
348d480f 4978 if (!part_of_multiple)
f1310107
TJB
4979 b->ops->print_one_detail (b, uiout);
4980
0d381245 4981 if (part_of_multiple && frame_id_p (b->frame_id))
c4093a6a
JM
4982 {
4983 annotate_field (6);
8b93c638 4984 ui_out_text (uiout, "\tstop only in stack frame at ");
e5dd4106 4985 /* FIXME: cagney/2002-12-01: Shouldn't be poking around inside
818dd999 4986 the frame ID. */
5af949e3
UW
4987 ui_out_field_core_addr (uiout, "frame",
4988 b->gdbarch, b->frame_id.stack_addr);
8b93c638 4989 ui_out_text (uiout, "\n");
c4093a6a
JM
4990 }
4991
28010a5d 4992 if (!part_of_multiple && b->cond_string)
c4093a6a
JM
4993 {
4994 annotate_field (7);
d77f58be 4995 if (is_tracepoint (b))
1042e4c0
SS
4996 ui_out_text (uiout, "\ttrace only if ");
4997 else
4998 ui_out_text (uiout, "\tstop only if ");
0101ce28
JJ
4999 ui_out_field_string (uiout, "cond", b->cond_string);
5000 ui_out_text (uiout, "\n");
5001 }
5002
0d381245 5003 if (!part_of_multiple && b->thread != -1)
c4093a6a 5004 {
4a64f543 5005 /* FIXME should make an annotation for this. */
8b93c638
JM
5006 ui_out_text (uiout, "\tstop only in thread ");
5007 ui_out_field_int (uiout, "thread", b->thread);
5008 ui_out_text (uiout, "\n");
c4093a6a
JM
5009 }
5010
63c715c6 5011 if (!part_of_multiple && b->hit_count)
c4093a6a 5012 {
4a64f543 5013 /* FIXME should make an annotation for this. */
8b93c638
JM
5014 if (ep_is_catchpoint (b))
5015 ui_out_text (uiout, "\tcatchpoint");
f196051f
SS
5016 else if (is_tracepoint (b))
5017 ui_out_text (uiout, "\ttracepoint");
8b93c638
JM
5018 else
5019 ui_out_text (uiout, "\tbreakpoint");
5020 ui_out_text (uiout, " already hit ");
5021 ui_out_field_int (uiout, "times", b->hit_count);
5022 if (b->hit_count == 1)
5023 ui_out_text (uiout, " time\n");
5024 else
5025 ui_out_text (uiout, " times\n");
c4093a6a
JM
5026 }
5027
4a64f543
MS
5028 /* Output the count also if it is zero, but only if this is mi.
5029 FIXME: Should have a better test for this. */
9dc5e2a9 5030 if (ui_out_is_mi_like_p (uiout))
63c715c6 5031 if (!part_of_multiple && b->hit_count == 0)
fb40c209 5032 ui_out_field_int (uiout, "times", b->hit_count);
8b93c638 5033
0d381245 5034 if (!part_of_multiple && b->ignore_count)
c4093a6a
JM
5035 {
5036 annotate_field (8);
8b93c638
JM
5037 ui_out_text (uiout, "\tignore next ");
5038 ui_out_field_int (uiout, "ignore", b->ignore_count);
5039 ui_out_text (uiout, " hits\n");
c4093a6a 5040 }
059fb39f 5041
f196051f
SS
5042 if (!part_of_multiple && is_tracepoint (b))
5043 {
5044 struct tracepoint *tp = (struct tracepoint *) b;
5045
5046 if (tp->traceframe_usage)
5047 {
5048 ui_out_text (uiout, "\ttrace buffer usage ");
5049 ui_out_field_int (uiout, "traceframe-usage", tp->traceframe_usage);
5050 ui_out_text (uiout, " bytes\n");
5051 }
5052 }
5053
9add0f1b 5054 l = b->commands ? b->commands->commands : NULL;
059fb39f 5055 if (!part_of_multiple && l)
c4093a6a 5056 {
3b31d625
EZ
5057 struct cleanup *script_chain;
5058
c4093a6a 5059 annotate_field (9);
3b31d625 5060 script_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "script");
8b93c638 5061 print_command_lines (uiout, l, 4);
3b31d625 5062 do_cleanups (script_chain);
c4093a6a 5063 }
d24317b4 5064
d9b3f62e 5065 if (is_tracepoint (b))
1042e4c0 5066 {
d9b3f62e
PA
5067 struct tracepoint *t = (struct tracepoint *) b;
5068
5069 if (!part_of_multiple && t->pass_count)
5070 {
5071 annotate_field (10);
5072 ui_out_text (uiout, "\tpass count ");
5073 ui_out_field_int (uiout, "pass", t->pass_count);
5074 ui_out_text (uiout, " \n");
5075 }
1042e4c0
SS
5076 }
5077
d24317b4
VP
5078 if (ui_out_is_mi_like_p (uiout) && !part_of_multiple)
5079 {
3a5c3e22
PA
5080 if (is_watchpoint (b))
5081 {
5082 struct watchpoint *w = (struct watchpoint *) b;
5083
5084 ui_out_field_string (uiout, "original-location", w->exp_string);
5085 }
5086 else if (b->addr_string)
d24317b4 5087 ui_out_field_string (uiout, "original-location", b->addr_string);
d24317b4 5088 }
c4093a6a 5089}
c5aa993b 5090
0d381245
VP
5091static void
5092print_one_breakpoint (struct breakpoint *b,
4a64f543 5093 struct bp_location **last_loc,
6c95b8df 5094 int allflag)
0d381245 5095{
8d3788bd 5096 struct cleanup *bkpt_chain;
79a45e25 5097 struct ui_out *uiout = current_uiout;
8d3788bd
VP
5098
5099 bkpt_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "bkpt");
5100
12c5a436 5101 print_one_breakpoint_location (b, NULL, 0, last_loc, allflag);
8d3788bd 5102 do_cleanups (bkpt_chain);
0d381245
VP
5103
5104 /* If this breakpoint has custom print function,
5105 it's already printed. Otherwise, print individual
5106 locations, if any. */
5107 if (b->ops == NULL || b->ops->print_one == NULL)
5108 {
4a64f543
MS
5109 /* If breakpoint has a single location that is disabled, we
5110 print it as if it had several locations, since otherwise it's
5111 hard to represent "breakpoint enabled, location disabled"
5112 situation.
5113
5114 Note that while hardware watchpoints have several locations
a3be7890 5115 internally, that's not a property exposed to user. */
0d381245 5116 if (b->loc
a5606eee 5117 && !is_hardware_watchpoint (b)
8d3788bd 5118 && (b->loc->next || !b->loc->enabled))
0d381245
VP
5119 {
5120 struct bp_location *loc;
5121 int n = 1;
8d3788bd 5122
0d381245 5123 for (loc = b->loc; loc; loc = loc->next, ++n)
8d3788bd
VP
5124 {
5125 struct cleanup *inner2 =
5126 make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
5127 print_one_breakpoint_location (b, loc, n, last_loc, allflag);
5128 do_cleanups (inner2);
5129 }
0d381245
VP
5130 }
5131 }
5132}
5133
a6d9a66e
UW
5134static int
5135breakpoint_address_bits (struct breakpoint *b)
5136{
5137 int print_address_bits = 0;
5138 struct bp_location *loc;
5139
5140 for (loc = b->loc; loc; loc = loc->next)
5141 {
c7437ca6
PA
5142 int addr_bit;
5143
5144 /* Software watchpoints that aren't watching memory don't have
5145 an address to print. */
5146 if (b->type == bp_watchpoint && loc->watchpoint_type == -1)
5147 continue;
5148
5149 addr_bit = gdbarch_addr_bit (loc->gdbarch);
a6d9a66e
UW
5150 if (addr_bit > print_address_bits)
5151 print_address_bits = addr_bit;
5152 }
5153
5154 return print_address_bits;
5155}
0d381245 5156
c4093a6a
JM
5157struct captured_breakpoint_query_args
5158 {
5159 int bnum;
5160 };
c5aa993b 5161
c4093a6a 5162static int
2b65245e 5163do_captured_breakpoint_query (struct ui_out *uiout, void *data)
c4093a6a
JM
5164{
5165 struct captured_breakpoint_query_args *args = data;
52f0bd74 5166 struct breakpoint *b;
a6d9a66e 5167 struct bp_location *dummy_loc = NULL;
cc59ec59 5168
c4093a6a
JM
5169 ALL_BREAKPOINTS (b)
5170 {
5171 if (args->bnum == b->number)
c5aa993b 5172 {
12c5a436 5173 print_one_breakpoint (b, &dummy_loc, 0);
c4093a6a 5174 return GDB_RC_OK;
c5aa993b 5175 }
c4093a6a
JM
5176 }
5177 return GDB_RC_NONE;
5178}
c5aa993b 5179
c4093a6a 5180enum gdb_rc
4a64f543
MS
5181gdb_breakpoint_query (struct ui_out *uiout, int bnum,
5182 char **error_message)
c4093a6a
JM
5183{
5184 struct captured_breakpoint_query_args args;
cc59ec59 5185
c4093a6a
JM
5186 args.bnum = bnum;
5187 /* For the moment we don't trust print_one_breakpoint() to not throw
4a64f543 5188 an error. */
b0b13bb4
DJ
5189 if (catch_exceptions_with_msg (uiout, do_captured_breakpoint_query, &args,
5190 error_message, RETURN_MASK_ALL) < 0)
5191 return GDB_RC_FAIL;
5192 else
5193 return GDB_RC_OK;
c4093a6a 5194}
c5aa993b 5195
09d682a4
TT
5196/* Return true if this breakpoint was set by the user, false if it is
5197 internal or momentary. */
5198
5199int
5200user_breakpoint_p (struct breakpoint *b)
5201{
46c6471b 5202 return b->number > 0;
09d682a4
TT
5203}
5204
7f3b0473 5205/* Print information on user settable breakpoint (watchpoint, etc)
d77f58be
SS
5206 number BNUM. If BNUM is -1 print all user-settable breakpoints.
5207 If ALLFLAG is non-zero, include non-user-settable breakpoints. If
5208 FILTER is non-NULL, call it on each breakpoint and only include the
5209 ones for which it returns non-zero. Return the total number of
5210 breakpoints listed. */
c906108c 5211
d77f58be 5212static int
e5a67952 5213breakpoint_1 (char *args, int allflag,
4a64f543 5214 int (*filter) (const struct breakpoint *))
c4093a6a 5215{
52f0bd74 5216 struct breakpoint *b;
a6d9a66e 5217 struct bp_location *last_loc = NULL;
7f3b0473 5218 int nr_printable_breakpoints;
3b31d625 5219 struct cleanup *bkpttbl_chain;
79a45b7d 5220 struct value_print_options opts;
a6d9a66e 5221 int print_address_bits = 0;
269b11a2 5222 int print_type_col_width = 14;
79a45e25 5223 struct ui_out *uiout = current_uiout;
269b11a2 5224
79a45b7d
TT
5225 get_user_print_options (&opts);
5226
4a64f543
MS
5227 /* Compute the number of rows in the table, as well as the size
5228 required for address fields. */
7f3b0473
AC
5229 nr_printable_breakpoints = 0;
5230 ALL_BREAKPOINTS (b)
e5a67952
MS
5231 {
5232 /* If we have a filter, only list the breakpoints it accepts. */
5233 if (filter && !filter (b))
5234 continue;
5235
5236 /* If we have an "args" string, it is a list of breakpoints to
5237 accept. Skip the others. */
5238 if (args != NULL && *args != '\0')
5239 {
5240 if (allflag && parse_and_eval_long (args) != b->number)
5241 continue;
5242 if (!allflag && !number_is_in_list (args, b->number))
5243 continue;
5244 }
269b11a2 5245
e5a67952
MS
5246 if (allflag || user_breakpoint_p (b))
5247 {
5248 int addr_bit, type_len;
a6d9a66e 5249
e5a67952
MS
5250 addr_bit = breakpoint_address_bits (b);
5251 if (addr_bit > print_address_bits)
5252 print_address_bits = addr_bit;
269b11a2 5253
e5a67952
MS
5254 type_len = strlen (bptype_string (b->type));
5255 if (type_len > print_type_col_width)
5256 print_type_col_width = type_len;
5257
5258 nr_printable_breakpoints++;
5259 }
5260 }
7f3b0473 5261
79a45b7d 5262 if (opts.addressprint)
3b31d625 5263 bkpttbl_chain
3e43a32a
MS
5264 = make_cleanup_ui_out_table_begin_end (uiout, 6,
5265 nr_printable_breakpoints,
3b31d625 5266 "BreakpointTable");
8b93c638 5267 else
3b31d625 5268 bkpttbl_chain
3e43a32a
MS
5269 = make_cleanup_ui_out_table_begin_end (uiout, 5,
5270 nr_printable_breakpoints,
3b31d625 5271 "BreakpointTable");
8b93c638 5272
7f3b0473 5273 if (nr_printable_breakpoints > 0)
d7faa9e7
AC
5274 annotate_breakpoints_headers ();
5275 if (nr_printable_breakpoints > 0)
5276 annotate_field (0);
4a64f543 5277 ui_out_table_header (uiout, 7, ui_left, "number", "Num"); /* 1 */
d7faa9e7
AC
5278 if (nr_printable_breakpoints > 0)
5279 annotate_field (1);
269b11a2 5280 ui_out_table_header (uiout, print_type_col_width, ui_left,
4a64f543 5281 "type", "Type"); /* 2 */
d7faa9e7
AC
5282 if (nr_printable_breakpoints > 0)
5283 annotate_field (2);
4a64f543 5284 ui_out_table_header (uiout, 4, ui_left, "disp", "Disp"); /* 3 */
d7faa9e7
AC
5285 if (nr_printable_breakpoints > 0)
5286 annotate_field (3);
54e52265 5287 ui_out_table_header (uiout, 3, ui_left, "enabled", "Enb"); /* 4 */
79a45b7d 5288 if (opts.addressprint)
e5a67952
MS
5289 {
5290 if (nr_printable_breakpoints > 0)
5291 annotate_field (4);
5292 if (print_address_bits <= 32)
5293 ui_out_table_header (uiout, 10, ui_left,
5294 "addr", "Address"); /* 5 */
5295 else
5296 ui_out_table_header (uiout, 18, ui_left,
5297 "addr", "Address"); /* 5 */
5298 }
d7faa9e7
AC
5299 if (nr_printable_breakpoints > 0)
5300 annotate_field (5);
5301 ui_out_table_header (uiout, 40, ui_noalign, "what", "What"); /* 6 */
5302 ui_out_table_body (uiout);
5303 if (nr_printable_breakpoints > 0)
5304 annotate_breakpoints_table ();
7f3b0473 5305
c4093a6a 5306 ALL_BREAKPOINTS (b)
e5a67952
MS
5307 {
5308 QUIT;
5309 /* If we have a filter, only list the breakpoints it accepts. */
5310 if (filter && !filter (b))
5311 continue;
5312
5313 /* If we have an "args" string, it is a list of breakpoints to
5314 accept. Skip the others. */
5315
5316 if (args != NULL && *args != '\0')
5317 {
5318 if (allflag) /* maintenance info breakpoint */
5319 {
5320 if (parse_and_eval_long (args) != b->number)
5321 continue;
5322 }
5323 else /* all others */
5324 {
5325 if (!number_is_in_list (args, b->number))
5326 continue;
5327 }
5328 }
5329 /* We only print out user settable breakpoints unless the
5330 allflag is set. */
5331 if (allflag || user_breakpoint_p (b))
12c5a436 5332 print_one_breakpoint (b, &last_loc, allflag);
e5a67952
MS
5333 }
5334
3b31d625 5335 do_cleanups (bkpttbl_chain);
698384cd 5336
7f3b0473 5337 if (nr_printable_breakpoints == 0)
c906108c 5338 {
4a64f543
MS
5339 /* If there's a filter, let the caller decide how to report
5340 empty list. */
d77f58be
SS
5341 if (!filter)
5342 {
e5a67952 5343 if (args == NULL || *args == '\0')
d77f58be
SS
5344 ui_out_message (uiout, 0, "No breakpoints or watchpoints.\n");
5345 else
4a64f543 5346 ui_out_message (uiout, 0,
e5a67952
MS
5347 "No breakpoint or watchpoint matching '%s'.\n",
5348 args);
d77f58be 5349 }
c906108c
SS
5350 }
5351 else
c4093a6a 5352 {
a6d9a66e
UW
5353 if (last_loc && !server_command)
5354 set_next_address (last_loc->gdbarch, last_loc->address);
c4093a6a 5355 }
c906108c 5356
4a64f543 5357 /* FIXME? Should this be moved up so that it is only called when
c4093a6a 5358 there have been breakpoints? */
c906108c 5359 annotate_breakpoints_table_end ();
d77f58be
SS
5360
5361 return nr_printable_breakpoints;
c906108c
SS
5362}
5363
ad443146
SS
5364/* Display the value of default-collect in a way that is generally
5365 compatible with the breakpoint list. */
5366
5367static void
5368default_collect_info (void)
5369{
79a45e25
PA
5370 struct ui_out *uiout = current_uiout;
5371
ad443146
SS
5372 /* If it has no value (which is frequently the case), say nothing; a
5373 message like "No default-collect." gets in user's face when it's
5374 not wanted. */
5375 if (!*default_collect)
5376 return;
5377
5378 /* The following phrase lines up nicely with per-tracepoint collect
5379 actions. */
5380 ui_out_text (uiout, "default collect ");
5381 ui_out_field_string (uiout, "default-collect", default_collect);
5382 ui_out_text (uiout, " \n");
5383}
5384
c906108c 5385static void
e5a67952 5386breakpoints_info (char *args, int from_tty)
c906108c 5387{
e5a67952 5388 breakpoint_1 (args, 0, NULL);
ad443146
SS
5389
5390 default_collect_info ();
d77f58be
SS
5391}
5392
5393static void
e5a67952 5394watchpoints_info (char *args, int from_tty)
d77f58be 5395{
e5a67952 5396 int num_printed = breakpoint_1 (args, 0, is_watchpoint);
79a45e25 5397 struct ui_out *uiout = current_uiout;
d77f58be
SS
5398
5399 if (num_printed == 0)
5400 {
e5a67952 5401 if (args == NULL || *args == '\0')
d77f58be
SS
5402 ui_out_message (uiout, 0, "No watchpoints.\n");
5403 else
e5a67952 5404 ui_out_message (uiout, 0, "No watchpoint matching '%s'.\n", args);
d77f58be 5405 }
c906108c
SS
5406}
5407
7a292a7a 5408static void
e5a67952 5409maintenance_info_breakpoints (char *args, int from_tty)
c906108c 5410{
e5a67952 5411 breakpoint_1 (args, 1, NULL);
ad443146
SS
5412
5413 default_collect_info ();
c906108c
SS
5414}
5415
0d381245 5416static int
714835d5 5417breakpoint_has_pc (struct breakpoint *b,
6c95b8df 5418 struct program_space *pspace,
714835d5 5419 CORE_ADDR pc, struct obj_section *section)
0d381245
VP
5420{
5421 struct bp_location *bl = b->loc;
cc59ec59 5422
0d381245
VP
5423 for (; bl; bl = bl->next)
5424 {
6c95b8df
PA
5425 if (bl->pspace == pspace
5426 && bl->address == pc
0d381245
VP
5427 && (!overlay_debugging || bl->section == section))
5428 return 1;
5429 }
5430 return 0;
5431}
5432
672f9b60 5433/* Print a message describing any user-breakpoints set at PC. This
6c95b8df
PA
5434 concerns with logical breakpoints, so we match program spaces, not
5435 address spaces. */
c906108c
SS
5436
5437static void
6c95b8df
PA
5438describe_other_breakpoints (struct gdbarch *gdbarch,
5439 struct program_space *pspace, CORE_ADDR pc,
5af949e3 5440 struct obj_section *section, int thread)
c906108c 5441{
52f0bd74
AC
5442 int others = 0;
5443 struct breakpoint *b;
c906108c
SS
5444
5445 ALL_BREAKPOINTS (b)
672f9b60
KP
5446 others += (user_breakpoint_p (b)
5447 && breakpoint_has_pc (b, pspace, pc, section));
c906108c
SS
5448 if (others > 0)
5449 {
a3f17187
AC
5450 if (others == 1)
5451 printf_filtered (_("Note: breakpoint "));
5452 else /* if (others == ???) */
5453 printf_filtered (_("Note: breakpoints "));
c906108c 5454 ALL_BREAKPOINTS (b)
672f9b60 5455 if (user_breakpoint_p (b) && breakpoint_has_pc (b, pspace, pc, section))
0d381245
VP
5456 {
5457 others--;
5458 printf_filtered ("%d", b->number);
5459 if (b->thread == -1 && thread != -1)
5460 printf_filtered (" (all threads)");
5461 else if (b->thread != -1)
5462 printf_filtered (" (thread %d)", b->thread);
5463 printf_filtered ("%s%s ",
059fb39f 5464 ((b->enable_state == bp_disabled
f8eba3c6 5465 || b->enable_state == bp_call_disabled)
0d381245
VP
5466 ? " (disabled)"
5467 : b->enable_state == bp_permanent
5468 ? " (permanent)"
5469 : ""),
5470 (others > 1) ? ","
5471 : ((others == 1) ? " and" : ""));
5472 }
a3f17187 5473 printf_filtered (_("also set at pc "));
5af949e3 5474 fputs_filtered (paddress (gdbarch, pc), gdb_stdout);
c906108c
SS
5475 printf_filtered (".\n");
5476 }
5477}
5478\f
c906108c 5479
e4f237da
KB
5480/* Return true iff it is meaningful to use the address member of
5481 BPT. For some breakpoint types, the address member is irrelevant
5482 and it makes no sense to attempt to compare it to other addresses
5483 (or use it for any other purpose either).
5484
4a64f543
MS
5485 More specifically, each of the following breakpoint types will
5486 always have a zero valued address and we don't want to mark
5487 breakpoints of any of these types to be a duplicate of an actual
5488 breakpoint at address zero:
e4f237da
KB
5489
5490 bp_watchpoint
2d134ed3
PA
5491 bp_catchpoint
5492
5493*/
e4f237da
KB
5494
5495static int
5496breakpoint_address_is_meaningful (struct breakpoint *bpt)
5497{
5498 enum bptype type = bpt->type;
5499
2d134ed3
PA
5500 return (type != bp_watchpoint && type != bp_catchpoint);
5501}
5502
5503/* Assuming LOC1 and LOC2's owners are hardware watchpoints, returns
5504 true if LOC1 and LOC2 represent the same watchpoint location. */
5505
5506static int
4a64f543
MS
5507watchpoint_locations_match (struct bp_location *loc1,
5508 struct bp_location *loc2)
2d134ed3 5509{
3a5c3e22
PA
5510 struct watchpoint *w1 = (struct watchpoint *) loc1->owner;
5511 struct watchpoint *w2 = (struct watchpoint *) loc2->owner;
5512
5513 /* Both of them must exist. */
5514 gdb_assert (w1 != NULL);
5515 gdb_assert (w2 != NULL);
2bdf28a0 5516
4a64f543
MS
5517 /* If the target can evaluate the condition expression in hardware,
5518 then we we need to insert both watchpoints even if they are at
5519 the same place. Otherwise the watchpoint will only trigger when
5520 the condition of whichever watchpoint was inserted evaluates to
5521 true, not giving a chance for GDB to check the condition of the
5522 other watchpoint. */
3a5c3e22 5523 if ((w1->cond_exp
4a64f543
MS
5524 && target_can_accel_watchpoint_condition (loc1->address,
5525 loc1->length,
0cf6dd15 5526 loc1->watchpoint_type,
3a5c3e22
PA
5527 w1->cond_exp))
5528 || (w2->cond_exp
4a64f543
MS
5529 && target_can_accel_watchpoint_condition (loc2->address,
5530 loc2->length,
0cf6dd15 5531 loc2->watchpoint_type,
3a5c3e22 5532 w2->cond_exp)))
0cf6dd15
TJB
5533 return 0;
5534
85d721b8
PA
5535 /* Note that this checks the owner's type, not the location's. In
5536 case the target does not support read watchpoints, but does
5537 support access watchpoints, we'll have bp_read_watchpoint
5538 watchpoints with hw_access locations. Those should be considered
5539 duplicates of hw_read locations. The hw_read locations will
5540 become hw_access locations later. */
2d134ed3
PA
5541 return (loc1->owner->type == loc2->owner->type
5542 && loc1->pspace->aspace == loc2->pspace->aspace
5543 && loc1->address == loc2->address
5544 && loc1->length == loc2->length);
e4f237da
KB
5545}
5546
6c95b8df
PA
5547/* Returns true if {ASPACE1,ADDR1} and {ASPACE2,ADDR2} represent the
5548 same breakpoint location. In most targets, this can only be true
5549 if ASPACE1 matches ASPACE2. On targets that have global
5550 breakpoints, the address space doesn't really matter. */
5551
5552static int
5553breakpoint_address_match (struct address_space *aspace1, CORE_ADDR addr1,
5554 struct address_space *aspace2, CORE_ADDR addr2)
5555{
5556 return ((gdbarch_has_global_breakpoints (target_gdbarch)
5557 || aspace1 == aspace2)
5558 && addr1 == addr2);
5559}
5560
f1310107
TJB
5561/* Returns true if {ASPACE2,ADDR2} falls within the range determined by
5562 {ASPACE1,ADDR1,LEN1}. In most targets, this can only be true if ASPACE1
5563 matches ASPACE2. On targets that have global breakpoints, the address
5564 space doesn't really matter. */
5565
5566static int
5567breakpoint_address_match_range (struct address_space *aspace1, CORE_ADDR addr1,
5568 int len1, struct address_space *aspace2,
5569 CORE_ADDR addr2)
5570{
5571 return ((gdbarch_has_global_breakpoints (target_gdbarch)
5572 || aspace1 == aspace2)
5573 && addr2 >= addr1 && addr2 < addr1 + len1);
5574}
5575
5576/* Returns true if {ASPACE,ADDR} matches the breakpoint BL. BL may be
5577 a ranged breakpoint. In most targets, a match happens only if ASPACE
5578 matches the breakpoint's address space. On targets that have global
5579 breakpoints, the address space doesn't really matter. */
5580
5581static int
5582breakpoint_location_address_match (struct bp_location *bl,
5583 struct address_space *aspace,
5584 CORE_ADDR addr)
5585{
5586 return (breakpoint_address_match (bl->pspace->aspace, bl->address,
5587 aspace, addr)
5588 || (bl->length
5589 && breakpoint_address_match_range (bl->pspace->aspace,
5590 bl->address, bl->length,
5591 aspace, addr)));
5592}
5593
1e4d1764
YQ
5594/* If LOC1 and LOC2's owners are not tracepoints, returns false directly.
5595 Then, if LOC1 and LOC2 represent the same tracepoint location, returns
5596 true, otherwise returns false. */
5597
5598static int
5599tracepoint_locations_match (struct bp_location *loc1,
5600 struct bp_location *loc2)
5601{
5602 if (is_tracepoint (loc1->owner) && is_tracepoint (loc2->owner))
5603 /* Since tracepoint locations are never duplicated with others', tracepoint
5604 locations at the same address of different tracepoints are regarded as
5605 different locations. */
5606 return (loc1->address == loc2->address && loc1->owner == loc2->owner);
5607 else
5608 return 0;
5609}
5610
2d134ed3
PA
5611/* Assuming LOC1 and LOC2's types' have meaningful target addresses
5612 (breakpoint_address_is_meaningful), returns true if LOC1 and LOC2
5613 represent the same location. */
5614
5615static int
4a64f543
MS
5616breakpoint_locations_match (struct bp_location *loc1,
5617 struct bp_location *loc2)
2d134ed3 5618{
2bdf28a0
JK
5619 int hw_point1, hw_point2;
5620
5621 /* Both of them must not be in moribund_locations. */
5622 gdb_assert (loc1->owner != NULL);
5623 gdb_assert (loc2->owner != NULL);
5624
5625 hw_point1 = is_hardware_watchpoint (loc1->owner);
5626 hw_point2 = is_hardware_watchpoint (loc2->owner);
2d134ed3
PA
5627
5628 if (hw_point1 != hw_point2)
5629 return 0;
5630 else if (hw_point1)
5631 return watchpoint_locations_match (loc1, loc2);
1e4d1764
YQ
5632 else if (is_tracepoint (loc1->owner) || is_tracepoint (loc2->owner))
5633 return tracepoint_locations_match (loc1, loc2);
2d134ed3 5634 else
f1310107
TJB
5635 /* We compare bp_location.length in order to cover ranged breakpoints. */
5636 return (breakpoint_address_match (loc1->pspace->aspace, loc1->address,
5637 loc2->pspace->aspace, loc2->address)
5638 && loc1->length == loc2->length);
2d134ed3
PA
5639}
5640
76897487
KB
5641static void
5642breakpoint_adjustment_warning (CORE_ADDR from_addr, CORE_ADDR to_addr,
5643 int bnum, int have_bnum)
5644{
f63fbe86
MS
5645 /* The longest string possibly returned by hex_string_custom
5646 is 50 chars. These must be at least that big for safety. */
5647 char astr1[64];
5648 char astr2[64];
76897487 5649
bb599908
PH
5650 strcpy (astr1, hex_string_custom ((unsigned long) from_addr, 8));
5651 strcpy (astr2, hex_string_custom ((unsigned long) to_addr, 8));
76897487 5652 if (have_bnum)
8a3fe4f8 5653 warning (_("Breakpoint %d address previously adjusted from %s to %s."),
76897487
KB
5654 bnum, astr1, astr2);
5655 else
8a3fe4f8 5656 warning (_("Breakpoint address adjusted from %s to %s."), astr1, astr2);
76897487
KB
5657}
5658
4a64f543
MS
5659/* Adjust a breakpoint's address to account for architectural
5660 constraints on breakpoint placement. Return the adjusted address.
5661 Note: Very few targets require this kind of adjustment. For most
5662 targets, this function is simply the identity function. */
76897487
KB
5663
5664static CORE_ADDR
a6d9a66e
UW
5665adjust_breakpoint_address (struct gdbarch *gdbarch,
5666 CORE_ADDR bpaddr, enum bptype bptype)
76897487 5667{
a6d9a66e 5668 if (!gdbarch_adjust_breakpoint_address_p (gdbarch))
76897487
KB
5669 {
5670 /* Very few targets need any kind of breakpoint adjustment. */
5671 return bpaddr;
5672 }
88f7da05
KB
5673 else if (bptype == bp_watchpoint
5674 || bptype == bp_hardware_watchpoint
5675 || bptype == bp_read_watchpoint
5676 || bptype == bp_access_watchpoint
fe798b75 5677 || bptype == bp_catchpoint)
88f7da05
KB
5678 {
5679 /* Watchpoints and the various bp_catch_* eventpoints should not
5680 have their addresses modified. */
5681 return bpaddr;
5682 }
76897487
KB
5683 else
5684 {
5685 CORE_ADDR adjusted_bpaddr;
5686
5687 /* Some targets have architectural constraints on the placement
5688 of breakpoint instructions. Obtain the adjusted address. */
a6d9a66e 5689 adjusted_bpaddr = gdbarch_adjust_breakpoint_address (gdbarch, bpaddr);
76897487
KB
5690
5691 /* An adjusted breakpoint address can significantly alter
5692 a user's expectations. Print a warning if an adjustment
5693 is required. */
5694 if (adjusted_bpaddr != bpaddr)
5695 breakpoint_adjustment_warning (bpaddr, adjusted_bpaddr, 0, 0);
5696
5697 return adjusted_bpaddr;
5698 }
5699}
5700
28010a5d
PA
5701void
5702init_bp_location (struct bp_location *loc, const struct bp_location_ops *ops,
5703 struct breakpoint *owner)
7cc221ef 5704{
7cc221ef
DJ
5705 memset (loc, 0, sizeof (*loc));
5706
348d480f
PA
5707 gdb_assert (ops != NULL);
5708
28010a5d
PA
5709 loc->ops = ops;
5710 loc->owner = owner;
511a6cd4 5711 loc->cond = NULL;
0d381245
VP
5712 loc->shlib_disabled = 0;
5713 loc->enabled = 1;
e049a4b5 5714
28010a5d 5715 switch (owner->type)
e049a4b5
DJ
5716 {
5717 case bp_breakpoint:
5718 case bp_until:
5719 case bp_finish:
5720 case bp_longjmp:
5721 case bp_longjmp_resume:
186c406b
TT
5722 case bp_exception:
5723 case bp_exception_resume:
e049a4b5 5724 case bp_step_resume:
2c03e5be 5725 case bp_hp_step_resume:
e049a4b5
DJ
5726 case bp_watchpoint_scope:
5727 case bp_call_dummy:
aa7d318d 5728 case bp_std_terminate:
e049a4b5
DJ
5729 case bp_shlib_event:
5730 case bp_thread_event:
5731 case bp_overlay_event:
4efc6507 5732 case bp_jit_event:
0fd8e87f 5733 case bp_longjmp_master:
aa7d318d 5734 case bp_std_terminate_master:
186c406b 5735 case bp_exception_master:
0e30163f
JK
5736 case bp_gnu_ifunc_resolver:
5737 case bp_gnu_ifunc_resolver_return:
e049a4b5
DJ
5738 loc->loc_type = bp_loc_software_breakpoint;
5739 break;
5740 case bp_hardware_breakpoint:
5741 loc->loc_type = bp_loc_hardware_breakpoint;
5742 break;
5743 case bp_hardware_watchpoint:
5744 case bp_read_watchpoint:
5745 case bp_access_watchpoint:
5746 loc->loc_type = bp_loc_hardware_watchpoint;
5747 break;
5748 case bp_watchpoint:
ce78b96d 5749 case bp_catchpoint:
15c3d785
PA
5750 case bp_tracepoint:
5751 case bp_fast_tracepoint:
0fb4aa4b 5752 case bp_static_tracepoint:
e049a4b5
DJ
5753 loc->loc_type = bp_loc_other;
5754 break;
5755 default:
e2e0b3e5 5756 internal_error (__FILE__, __LINE__, _("unknown breakpoint type"));
e049a4b5
DJ
5757 }
5758
f431efe5 5759 loc->refc = 1;
28010a5d
PA
5760}
5761
5762/* Allocate a struct bp_location. */
5763
5764static struct bp_location *
5765allocate_bp_location (struct breakpoint *bpt)
5766{
348d480f
PA
5767 return bpt->ops->allocate_location (bpt);
5768}
7cc221ef 5769
f431efe5
PA
5770static void
5771free_bp_location (struct bp_location *loc)
fe3f5fa8 5772{
348d480f 5773 loc->ops->dtor (loc);
fe3f5fa8
VP
5774 xfree (loc);
5775}
5776
f431efe5
PA
5777/* Increment reference count. */
5778
5779static void
5780incref_bp_location (struct bp_location *bl)
5781{
5782 ++bl->refc;
5783}
5784
5785/* Decrement reference count. If the reference count reaches 0,
5786 destroy the bp_location. Sets *BLP to NULL. */
5787
5788static void
5789decref_bp_location (struct bp_location **blp)
5790{
0807b50c
PA
5791 gdb_assert ((*blp)->refc > 0);
5792
f431efe5
PA
5793 if (--(*blp)->refc == 0)
5794 free_bp_location (*blp);
5795 *blp = NULL;
5796}
5797
346774a9 5798/* Add breakpoint B at the end of the global breakpoint chain. */
c906108c 5799
346774a9
PA
5800static void
5801add_to_breakpoint_chain (struct breakpoint *b)
c906108c 5802{
346774a9 5803 struct breakpoint *b1;
c906108c 5804
346774a9
PA
5805 /* Add this breakpoint to the end of the chain so that a list of
5806 breakpoints will come out in order of increasing numbers. */
5807
5808 b1 = breakpoint_chain;
5809 if (b1 == 0)
5810 breakpoint_chain = b;
5811 else
5812 {
5813 while (b1->next)
5814 b1 = b1->next;
5815 b1->next = b;
5816 }
5817}
5818
5819/* Initializes breakpoint B with type BPTYPE and no locations yet. */
5820
5821static void
5822init_raw_breakpoint_without_location (struct breakpoint *b,
5823 struct gdbarch *gdbarch,
28010a5d 5824 enum bptype bptype,
c0a91b2b 5825 const struct breakpoint_ops *ops)
346774a9 5826{
c906108c 5827 memset (b, 0, sizeof (*b));
2219d63c 5828
348d480f
PA
5829 gdb_assert (ops != NULL);
5830
28010a5d 5831 b->ops = ops;
4d28f7a8 5832 b->type = bptype;
a6d9a66e 5833 b->gdbarch = gdbarch;
c906108c
SS
5834 b->language = current_language->la_language;
5835 b->input_radix = input_radix;
5836 b->thread = -1;
b5de0fa7 5837 b->enable_state = bp_enabled;
c906108c
SS
5838 b->next = 0;
5839 b->silent = 0;
5840 b->ignore_count = 0;
5841 b->commands = NULL;
818dd999 5842 b->frame_id = null_frame_id;
0d381245 5843 b->condition_not_parsed = 0;
84f4c1fe 5844 b->py_bp_object = NULL;
d0fb5eae 5845 b->related_breakpoint = b;
346774a9
PA
5846}
5847
5848/* Helper to set_raw_breakpoint below. Creates a breakpoint
5849 that has type BPTYPE and has no locations as yet. */
346774a9
PA
5850
5851static struct breakpoint *
5852set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
348d480f 5853 enum bptype bptype,
c0a91b2b 5854 const struct breakpoint_ops *ops)
346774a9
PA
5855{
5856 struct breakpoint *b = XNEW (struct breakpoint);
5857
348d480f 5858 init_raw_breakpoint_without_location (b, gdbarch, bptype, ops);
c56053d2 5859 add_to_breakpoint_chain (b);
0d381245
VP
5860 return b;
5861}
5862
0e30163f
JK
5863/* Initialize loc->function_name. EXPLICIT_LOC says no indirect function
5864 resolutions should be made as the user specified the location explicitly
5865 enough. */
5866
0d381245 5867static void
0e30163f 5868set_breakpoint_location_function (struct bp_location *loc, int explicit_loc)
0d381245 5869{
2bdf28a0
JK
5870 gdb_assert (loc->owner != NULL);
5871
0d381245 5872 if (loc->owner->type == bp_breakpoint
1042e4c0 5873 || loc->owner->type == bp_hardware_breakpoint
d77f58be 5874 || is_tracepoint (loc->owner))
0d381245 5875 {
0e30163f 5876 int is_gnu_ifunc;
2c02bd72 5877 const char *function_name;
0e30163f 5878
2c02bd72 5879 find_pc_partial_function_gnu_ifunc (loc->address, &function_name,
0e30163f
JK
5880 NULL, NULL, &is_gnu_ifunc);
5881
5882 if (is_gnu_ifunc && !explicit_loc)
5883 {
5884 struct breakpoint *b = loc->owner;
5885
5886 gdb_assert (loc->pspace == current_program_space);
2c02bd72 5887 if (gnu_ifunc_resolve_name (function_name,
0e30163f
JK
5888 &loc->requested_address))
5889 {
5890 /* Recalculate ADDRESS based on new REQUESTED_ADDRESS. */
5891 loc->address = adjust_breakpoint_address (loc->gdbarch,
5892 loc->requested_address,
5893 b->type);
5894 }
5895 else if (b->type == bp_breakpoint && b->loc == loc
5896 && loc->next == NULL && b->related_breakpoint == b)
5897 {
5898 /* Create only the whole new breakpoint of this type but do not
5899 mess more complicated breakpoints with multiple locations. */
5900 b->type = bp_gnu_ifunc_resolver;
5901 }
5902 }
5903
2c02bd72
DE
5904 if (function_name)
5905 loc->function_name = xstrdup (function_name);
0d381245
VP
5906 }
5907}
5908
a6d9a66e 5909/* Attempt to determine architecture of location identified by SAL. */
1bfeeb0f 5910struct gdbarch *
a6d9a66e
UW
5911get_sal_arch (struct symtab_and_line sal)
5912{
5913 if (sal.section)
5914 return get_objfile_arch (sal.section->objfile);
5915 if (sal.symtab)
5916 return get_objfile_arch (sal.symtab->objfile);
5917
5918 return NULL;
5919}
5920
346774a9
PA
5921/* Low level routine for partially initializing a breakpoint of type
5922 BPTYPE. The newly created breakpoint's address, section, source
c56053d2 5923 file name, and line number are provided by SAL.
0d381245
VP
5924
5925 It is expected that the caller will complete the initialization of
5926 the newly created breakpoint struct as well as output any status
c56053d2 5927 information regarding the creation of a new breakpoint. */
0d381245 5928
346774a9
PA
5929static void
5930init_raw_breakpoint (struct breakpoint *b, struct gdbarch *gdbarch,
28010a5d 5931 struct symtab_and_line sal, enum bptype bptype,
c0a91b2b 5932 const struct breakpoint_ops *ops)
0d381245 5933{
28010a5d 5934 init_raw_breakpoint_without_location (b, gdbarch, bptype, ops);
346774a9 5935
3742cc8b 5936 add_location_to_breakpoint (b, &sal);
0d381245 5937
6c95b8df
PA
5938 if (bptype != bp_catchpoint)
5939 gdb_assert (sal.pspace != NULL);
5940
f8eba3c6
TT
5941 /* Store the program space that was used to set the breakpoint,
5942 except for ordinary breakpoints, which are independent of the
5943 program space. */
5944 if (bptype != bp_breakpoint && bptype != bp_hardware_breakpoint)
5945 b->pspace = sal.pspace;
0d381245 5946
c906108c 5947 breakpoints_changed ();
346774a9 5948}
c906108c 5949
346774a9
PA
5950/* set_raw_breakpoint is a low level routine for allocating and
5951 partially initializing a breakpoint of type BPTYPE. The newly
5952 created breakpoint's address, section, source file name, and line
5953 number are provided by SAL. The newly created and partially
5954 initialized breakpoint is added to the breakpoint chain and
5955 is also returned as the value of this function.
5956
5957 It is expected that the caller will complete the initialization of
5958 the newly created breakpoint struct as well as output any status
5959 information regarding the creation of a new breakpoint. In
5960 particular, set_raw_breakpoint does NOT set the breakpoint
5961 number! Care should be taken to not allow an error to occur
5962 prior to completing the initialization of the breakpoint. If this
5963 should happen, a bogus breakpoint will be left on the chain. */
5964
5965struct breakpoint *
5966set_raw_breakpoint (struct gdbarch *gdbarch,
348d480f 5967 struct symtab_and_line sal, enum bptype bptype,
c0a91b2b 5968 const struct breakpoint_ops *ops)
346774a9
PA
5969{
5970 struct breakpoint *b = XNEW (struct breakpoint);
5971
348d480f 5972 init_raw_breakpoint (b, gdbarch, sal, bptype, ops);
c56053d2 5973 add_to_breakpoint_chain (b);
c906108c
SS
5974 return b;
5975}
5976
c2c6d25f
JM
5977
5978/* Note that the breakpoint object B describes a permanent breakpoint
5979 instruction, hard-wired into the inferior's code. */
5980void
5981make_breakpoint_permanent (struct breakpoint *b)
5982{
0d381245 5983 struct bp_location *bl;
cc59ec59 5984
b5de0fa7 5985 b->enable_state = bp_permanent;
c2c6d25f 5986
4a64f543
MS
5987 /* By definition, permanent breakpoints are already present in the
5988 code. Mark all locations as inserted. For now,
5989 make_breakpoint_permanent is called in just one place, so it's
5990 hard to say if it's reasonable to have permanent breakpoint with
e5dd4106 5991 multiple locations or not, but it's easy to implement. */
0d381245
VP
5992 for (bl = b->loc; bl; bl = bl->next)
5993 bl->inserted = 1;
c2c6d25f
JM
5994}
5995
53a5351d 5996/* Call this routine when stepping and nexting to enable a breakpoint
186c406b
TT
5997 if we do a longjmp() or 'throw' in TP. FRAME is the frame which
5998 initiated the operation. */
c906108c
SS
5999
6000void
186c406b 6001set_longjmp_breakpoint (struct thread_info *tp, struct frame_id frame)
c906108c 6002{
35df4500 6003 struct breakpoint *b, *b_tmp;
186c406b 6004 int thread = tp->num;
0fd8e87f
UW
6005
6006 /* To avoid having to rescan all objfile symbols at every step,
6007 we maintain a list of continually-inserted but always disabled
6008 longjmp "master" breakpoints. Here, we simply create momentary
6009 clones of those and enable them for the requested thread. */
35df4500 6010 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6c95b8df 6011 if (b->pspace == current_program_space
186c406b
TT
6012 && (b->type == bp_longjmp_master
6013 || b->type == bp_exception_master))
0fd8e87f 6014 {
06edf0c0
PA
6015 enum bptype type = b->type == bp_longjmp_master ? bp_longjmp : bp_exception;
6016 struct breakpoint *clone;
cc59ec59 6017
06edf0c0
PA
6018 clone = momentary_breakpoint_from_master (b, type,
6019 &momentary_breakpoint_ops);
0fd8e87f
UW
6020 clone->thread = thread;
6021 }
186c406b
TT
6022
6023 tp->initiating_frame = frame;
c906108c
SS
6024}
6025
611c83ae 6026/* Delete all longjmp breakpoints from THREAD. */
c906108c 6027void
611c83ae 6028delete_longjmp_breakpoint (int thread)
c906108c 6029{
35df4500 6030 struct breakpoint *b, *b_tmp;
c906108c 6031
35df4500 6032 ALL_BREAKPOINTS_SAFE (b, b_tmp)
186c406b 6033 if (b->type == bp_longjmp || b->type == bp_exception)
611c83ae
PA
6034 {
6035 if (b->thread == thread)
6036 delete_breakpoint (b);
6037 }
c906108c
SS
6038}
6039
1900040c
MS
6040void
6041enable_overlay_breakpoints (void)
6042{
52f0bd74 6043 struct breakpoint *b;
1900040c
MS
6044
6045 ALL_BREAKPOINTS (b)
6046 if (b->type == bp_overlay_event)
6047 {
6048 b->enable_state = bp_enabled;
b60e7edf 6049 update_global_location_list (1);
c02f5703 6050 overlay_events_enabled = 1;
1900040c
MS
6051 }
6052}
6053
6054void
6055disable_overlay_breakpoints (void)
6056{
52f0bd74 6057 struct breakpoint *b;
1900040c
MS
6058
6059 ALL_BREAKPOINTS (b)
6060 if (b->type == bp_overlay_event)
6061 {
6062 b->enable_state = bp_disabled;
b60e7edf 6063 update_global_location_list (0);
c02f5703 6064 overlay_events_enabled = 0;
1900040c
MS
6065 }
6066}
6067
aa7d318d
TT
6068/* Set an active std::terminate breakpoint for each std::terminate
6069 master breakpoint. */
6070void
6071set_std_terminate_breakpoint (void)
6072{
35df4500 6073 struct breakpoint *b, *b_tmp;
aa7d318d 6074
35df4500 6075 ALL_BREAKPOINTS_SAFE (b, b_tmp)
aa7d318d
TT
6076 if (b->pspace == current_program_space
6077 && b->type == bp_std_terminate_master)
6078 {
06edf0c0
PA
6079 momentary_breakpoint_from_master (b, bp_std_terminate,
6080 &momentary_breakpoint_ops);
aa7d318d
TT
6081 }
6082}
6083
6084/* Delete all the std::terminate breakpoints. */
6085void
6086delete_std_terminate_breakpoint (void)
6087{
35df4500 6088 struct breakpoint *b, *b_tmp;
aa7d318d 6089
35df4500 6090 ALL_BREAKPOINTS_SAFE (b, b_tmp)
aa7d318d
TT
6091 if (b->type == bp_std_terminate)
6092 delete_breakpoint (b);
6093}
6094
c4093a6a 6095struct breakpoint *
a6d9a66e 6096create_thread_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
c4093a6a
JM
6097{
6098 struct breakpoint *b;
c4093a6a 6099
06edf0c0
PA
6100 b = create_internal_breakpoint (gdbarch, address, bp_thread_event,
6101 &internal_breakpoint_ops);
6102
b5de0fa7 6103 b->enable_state = bp_enabled;
c4093a6a 6104 /* addr_string has to be used or breakpoint_re_set will delete me. */
5af949e3
UW
6105 b->addr_string
6106 = xstrprintf ("*%s", paddress (b->loc->gdbarch, b->loc->address));
c4093a6a 6107
b60e7edf 6108 update_global_location_list_nothrow (1);
74960c60 6109
c4093a6a
JM
6110 return b;
6111}
6112
6113void
6114remove_thread_event_breakpoints (void)
6115{
35df4500 6116 struct breakpoint *b, *b_tmp;
c4093a6a 6117
35df4500 6118 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6c95b8df
PA
6119 if (b->type == bp_thread_event
6120 && b->loc->pspace == current_program_space)
c4093a6a
JM
6121 delete_breakpoint (b);
6122}
6123
0101ce28
JJ
6124struct lang_and_radix
6125 {
6126 enum language lang;
6127 int radix;
6128 };
6129
4efc6507
DE
6130/* Create a breakpoint for JIT code registration and unregistration. */
6131
6132struct breakpoint *
6133create_jit_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
6134{
6135 struct breakpoint *b;
6136
06edf0c0
PA
6137 b = create_internal_breakpoint (gdbarch, address, bp_jit_event,
6138 &internal_breakpoint_ops);
4efc6507
DE
6139 update_global_location_list_nothrow (1);
6140 return b;
6141}
0101ce28 6142
03673fc7
PP
6143/* Remove JIT code registration and unregistration breakpoint(s). */
6144
6145void
6146remove_jit_event_breakpoints (void)
6147{
6148 struct breakpoint *b, *b_tmp;
6149
6150 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6151 if (b->type == bp_jit_event
6152 && b->loc->pspace == current_program_space)
6153 delete_breakpoint (b);
6154}
6155
cae688ec
JJ
6156void
6157remove_solib_event_breakpoints (void)
6158{
35df4500 6159 struct breakpoint *b, *b_tmp;
cae688ec 6160
35df4500 6161 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6c95b8df
PA
6162 if (b->type == bp_shlib_event
6163 && b->loc->pspace == current_program_space)
cae688ec
JJ
6164 delete_breakpoint (b);
6165}
6166
6167struct breakpoint *
a6d9a66e 6168create_solib_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
cae688ec
JJ
6169{
6170 struct breakpoint *b;
6171
06edf0c0
PA
6172 b = create_internal_breakpoint (gdbarch, address, bp_shlib_event,
6173 &internal_breakpoint_ops);
b60e7edf 6174 update_global_location_list_nothrow (1);
cae688ec
JJ
6175 return b;
6176}
6177
6178/* Disable any breakpoints that are on code in shared libraries. Only
6179 apply to enabled breakpoints, disabled ones can just stay disabled. */
6180
6181void
cb851954 6182disable_breakpoints_in_shlibs (void)
cae688ec 6183{
876fa593 6184 struct bp_location *loc, **locp_tmp;
cae688ec 6185
876fa593 6186 ALL_BP_LOCATIONS (loc, locp_tmp)
cae688ec 6187 {
2bdf28a0 6188 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
0d381245 6189 struct breakpoint *b = loc->owner;
2bdf28a0 6190
4a64f543
MS
6191 /* We apply the check to all breakpoints, including disabled for
6192 those with loc->duplicate set. This is so that when breakpoint
6193 becomes enabled, or the duplicate is removed, gdb will try to
6194 insert all breakpoints. If we don't set shlib_disabled here,
6195 we'll try to insert those breakpoints and fail. */
1042e4c0 6196 if (((b->type == bp_breakpoint)
508ccb1f 6197 || (b->type == bp_jit_event)
1042e4c0 6198 || (b->type == bp_hardware_breakpoint)
d77f58be 6199 || (is_tracepoint (b)))
6c95b8df 6200 && loc->pspace == current_program_space
0d381245 6201 && !loc->shlib_disabled
a77053c2 6202#ifdef PC_SOLIB
0d381245 6203 && PC_SOLIB (loc->address)
a77053c2 6204#else
6c95b8df 6205 && solib_name_from_address (loc->pspace, loc->address)
a77053c2
MK
6206#endif
6207 )
0d381245
VP
6208 {
6209 loc->shlib_disabled = 1;
6210 }
cae688ec
JJ
6211 }
6212}
6213
1e4d1764
YQ
6214/* Disable any breakpoints and tracepoints that are in an unloaded shared
6215 library. Only apply to enabled breakpoints, disabled ones can just stay
4a64f543 6216 disabled. */
84acb35a 6217
75149521 6218static void
84acb35a
JJ
6219disable_breakpoints_in_unloaded_shlib (struct so_list *solib)
6220{
876fa593 6221 struct bp_location *loc, **locp_tmp;
84acb35a
JJ
6222 int disabled_shlib_breaks = 0;
6223
c86cf029
VP
6224 /* SunOS a.out shared libraries are always mapped, so do not
6225 disable breakpoints; they will only be reported as unloaded
6226 through clear_solib when GDB discards its shared library
6227 list. See clear_solib for more information. */
6228 if (exec_bfd != NULL
6229 && bfd_get_flavour (exec_bfd) == bfd_target_aout_flavour)
6230 return;
6231
876fa593 6232 ALL_BP_LOCATIONS (loc, locp_tmp)
84acb35a 6233 {
2bdf28a0 6234 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
0d381245 6235 struct breakpoint *b = loc->owner;
cc59ec59 6236
1e4d1764 6237 if (solib->pspace == loc->pspace
e2dd7057 6238 && !loc->shlib_disabled
1e4d1764
YQ
6239 && (((b->type == bp_breakpoint
6240 || b->type == bp_jit_event
6241 || b->type == bp_hardware_breakpoint)
6242 && (loc->loc_type == bp_loc_hardware_breakpoint
6243 || loc->loc_type == bp_loc_software_breakpoint))
6244 || is_tracepoint (b))
e2dd7057 6245 && solib_contains_address_p (solib, loc->address))
84acb35a 6246 {
e2dd7057
PP
6247 loc->shlib_disabled = 1;
6248 /* At this point, we cannot rely on remove_breakpoint
6249 succeeding so we must mark the breakpoint as not inserted
6250 to prevent future errors occurring in remove_breakpoints. */
6251 loc->inserted = 0;
8d3788bd
VP
6252
6253 /* This may cause duplicate notifications for the same breakpoint. */
6254 observer_notify_breakpoint_modified (b);
6255
e2dd7057
PP
6256 if (!disabled_shlib_breaks)
6257 {
6258 target_terminal_ours_for_output ();
3e43a32a
MS
6259 warning (_("Temporarily disabling breakpoints "
6260 "for unloaded shared library \"%s\""),
e2dd7057 6261 solib->so_name);
84acb35a 6262 }
e2dd7057 6263 disabled_shlib_breaks = 1;
84acb35a
JJ
6264 }
6265 }
84acb35a
JJ
6266}
6267
ce78b96d
JB
6268/* FORK & VFORK catchpoints. */
6269
e29a4733
PA
6270/* An instance of this type is used to represent a fork or vfork
6271 catchpoint. It includes a "struct breakpoint" as a kind of base
6272 class; users downcast to "struct breakpoint *" when needed. A
6273 breakpoint is really of this type iff its ops pointer points to
6274 CATCH_FORK_BREAKPOINT_OPS. */
6275
6276struct fork_catchpoint
6277{
6278 /* The base class. */
6279 struct breakpoint base;
6280
6281 /* Process id of a child process whose forking triggered this
6282 catchpoint. This field is only valid immediately after this
6283 catchpoint has triggered. */
6284 ptid_t forked_inferior_pid;
6285};
6286
4a64f543
MS
6287/* Implement the "insert" breakpoint_ops method for fork
6288 catchpoints. */
ce78b96d 6289
77b06cd7
TJB
6290static int
6291insert_catch_fork (struct bp_location *bl)
ce78b96d 6292{
77b06cd7 6293 return target_insert_fork_catchpoint (PIDGET (inferior_ptid));
ce78b96d
JB
6294}
6295
4a64f543
MS
6296/* Implement the "remove" breakpoint_ops method for fork
6297 catchpoints. */
ce78b96d
JB
6298
6299static int
77b06cd7 6300remove_catch_fork (struct bp_location *bl)
ce78b96d
JB
6301{
6302 return target_remove_fork_catchpoint (PIDGET (inferior_ptid));
6303}
6304
6305/* Implement the "breakpoint_hit" breakpoint_ops method for fork
6306 catchpoints. */
6307
6308static int
f1310107 6309breakpoint_hit_catch_fork (const struct bp_location *bl,
09ac7c10
TT
6310 struct address_space *aspace, CORE_ADDR bp_addr,
6311 const struct target_waitstatus *ws)
ce78b96d 6312{
e29a4733
PA
6313 struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
6314
f90263c1
TT
6315 if (ws->kind != TARGET_WAITKIND_FORKED)
6316 return 0;
6317
6318 c->forked_inferior_pid = ws->value.related_pid;
6319 return 1;
ce78b96d
JB
6320}
6321
4a64f543
MS
6322/* Implement the "print_it" breakpoint_ops method for fork
6323 catchpoints. */
ce78b96d
JB
6324
6325static enum print_stop_action
348d480f 6326print_it_catch_fork (bpstat bs)
ce78b96d 6327{
36dfb11c 6328 struct ui_out *uiout = current_uiout;
348d480f
PA
6329 struct breakpoint *b = bs->breakpoint_at;
6330 struct fork_catchpoint *c = (struct fork_catchpoint *) bs->breakpoint_at;
e29a4733 6331
ce78b96d 6332 annotate_catchpoint (b->number);
36dfb11c
TT
6333 if (b->disposition == disp_del)
6334 ui_out_text (uiout, "\nTemporary catchpoint ");
6335 else
6336 ui_out_text (uiout, "\nCatchpoint ");
6337 if (ui_out_is_mi_like_p (uiout))
6338 {
6339 ui_out_field_string (uiout, "reason",
6340 async_reason_lookup (EXEC_ASYNC_FORK));
6341 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
6342 }
6343 ui_out_field_int (uiout, "bkptno", b->number);
6344 ui_out_text (uiout, " (forked process ");
6345 ui_out_field_int (uiout, "newpid", ptid_get_pid (c->forked_inferior_pid));
6346 ui_out_text (uiout, "), ");
ce78b96d
JB
6347 return PRINT_SRC_AND_LOC;
6348}
6349
4a64f543
MS
6350/* Implement the "print_one" breakpoint_ops method for fork
6351 catchpoints. */
ce78b96d
JB
6352
6353static void
a6d9a66e 6354print_one_catch_fork (struct breakpoint *b, struct bp_location **last_loc)
ce78b96d 6355{
e29a4733 6356 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
79a45b7d 6357 struct value_print_options opts;
79a45e25 6358 struct ui_out *uiout = current_uiout;
79a45b7d
TT
6359
6360 get_user_print_options (&opts);
6361
4a64f543
MS
6362 /* Field 4, the address, is omitted (which makes the columns not
6363 line up too nicely with the headers, but the effect is relatively
6364 readable). */
79a45b7d 6365 if (opts.addressprint)
ce78b96d
JB
6366 ui_out_field_skip (uiout, "addr");
6367 annotate_field (5);
6368 ui_out_text (uiout, "fork");
e29a4733 6369 if (!ptid_equal (c->forked_inferior_pid, null_ptid))
ce78b96d
JB
6370 {
6371 ui_out_text (uiout, ", process ");
6372 ui_out_field_int (uiout, "what",
e29a4733 6373 ptid_get_pid (c->forked_inferior_pid));
ce78b96d
JB
6374 ui_out_spaces (uiout, 1);
6375 }
6376}
6377
6378/* Implement the "print_mention" breakpoint_ops method for fork
6379 catchpoints. */
6380
6381static void
6382print_mention_catch_fork (struct breakpoint *b)
6383{
6384 printf_filtered (_("Catchpoint %d (fork)"), b->number);
6385}
6386
6149aea9
PA
6387/* Implement the "print_recreate" breakpoint_ops method for fork
6388 catchpoints. */
6389
6390static void
6391print_recreate_catch_fork (struct breakpoint *b, struct ui_file *fp)
6392{
6393 fprintf_unfiltered (fp, "catch fork");
d9b3f62e 6394 print_recreate_thread (b, fp);
6149aea9
PA
6395}
6396
ce78b96d
JB
6397/* The breakpoint_ops structure to be used in fork catchpoints. */
6398
2060206e 6399static struct breakpoint_ops catch_fork_breakpoint_ops;
ce78b96d 6400
4a64f543
MS
6401/* Implement the "insert" breakpoint_ops method for vfork
6402 catchpoints. */
ce78b96d 6403
77b06cd7
TJB
6404static int
6405insert_catch_vfork (struct bp_location *bl)
ce78b96d 6406{
77b06cd7 6407 return target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
ce78b96d
JB
6408}
6409
4a64f543
MS
6410/* Implement the "remove" breakpoint_ops method for vfork
6411 catchpoints. */
ce78b96d
JB
6412
6413static int
77b06cd7 6414remove_catch_vfork (struct bp_location *bl)
ce78b96d
JB
6415{
6416 return target_remove_vfork_catchpoint (PIDGET (inferior_ptid));
6417}
6418
6419/* Implement the "breakpoint_hit" breakpoint_ops method for vfork
6420 catchpoints. */
6421
6422static int
f1310107 6423breakpoint_hit_catch_vfork (const struct bp_location *bl,
09ac7c10
TT
6424 struct address_space *aspace, CORE_ADDR bp_addr,
6425 const struct target_waitstatus *ws)
ce78b96d 6426{
e29a4733
PA
6427 struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
6428
f90263c1
TT
6429 if (ws->kind != TARGET_WAITKIND_VFORKED)
6430 return 0;
6431
6432 c->forked_inferior_pid = ws->value.related_pid;
6433 return 1;
ce78b96d
JB
6434}
6435
4a64f543
MS
6436/* Implement the "print_it" breakpoint_ops method for vfork
6437 catchpoints. */
ce78b96d
JB
6438
6439static enum print_stop_action
348d480f 6440print_it_catch_vfork (bpstat bs)
ce78b96d 6441{
36dfb11c 6442 struct ui_out *uiout = current_uiout;
348d480f 6443 struct breakpoint *b = bs->breakpoint_at;
e29a4733
PA
6444 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
6445
ce78b96d 6446 annotate_catchpoint (b->number);
36dfb11c
TT
6447 if (b->disposition == disp_del)
6448 ui_out_text (uiout, "\nTemporary catchpoint ");
6449 else
6450 ui_out_text (uiout, "\nCatchpoint ");
6451 if (ui_out_is_mi_like_p (uiout))
6452 {
6453 ui_out_field_string (uiout, "reason",
6454 async_reason_lookup (EXEC_ASYNC_VFORK));
6455 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
6456 }
6457 ui_out_field_int (uiout, "bkptno", b->number);
6458 ui_out_text (uiout, " (vforked process ");
6459 ui_out_field_int (uiout, "newpid", ptid_get_pid (c->forked_inferior_pid));
6460 ui_out_text (uiout, "), ");
ce78b96d
JB
6461 return PRINT_SRC_AND_LOC;
6462}
6463
4a64f543
MS
6464/* Implement the "print_one" breakpoint_ops method for vfork
6465 catchpoints. */
ce78b96d
JB
6466
6467static void
a6d9a66e 6468print_one_catch_vfork (struct breakpoint *b, struct bp_location **last_loc)
ce78b96d 6469{
e29a4733 6470 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
79a45b7d 6471 struct value_print_options opts;
79a45e25 6472 struct ui_out *uiout = current_uiout;
79a45b7d
TT
6473
6474 get_user_print_options (&opts);
4a64f543
MS
6475 /* Field 4, the address, is omitted (which makes the columns not
6476 line up too nicely with the headers, but the effect is relatively
6477 readable). */
79a45b7d 6478 if (opts.addressprint)
ce78b96d
JB
6479 ui_out_field_skip (uiout, "addr");
6480 annotate_field (5);
6481 ui_out_text (uiout, "vfork");
e29a4733 6482 if (!ptid_equal (c->forked_inferior_pid, null_ptid))
ce78b96d
JB
6483 {
6484 ui_out_text (uiout, ", process ");
6485 ui_out_field_int (uiout, "what",
e29a4733 6486 ptid_get_pid (c->forked_inferior_pid));
ce78b96d
JB
6487 ui_out_spaces (uiout, 1);
6488 }
6489}
6490
6491/* Implement the "print_mention" breakpoint_ops method for vfork
6492 catchpoints. */
6493
6494static void
6495print_mention_catch_vfork (struct breakpoint *b)
6496{
6497 printf_filtered (_("Catchpoint %d (vfork)"), b->number);
6498}
6499
6149aea9
PA
6500/* Implement the "print_recreate" breakpoint_ops method for vfork
6501 catchpoints. */
6502
6503static void
6504print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
6505{
6506 fprintf_unfiltered (fp, "catch vfork");
d9b3f62e 6507 print_recreate_thread (b, fp);
6149aea9
PA
6508}
6509
ce78b96d
JB
6510/* The breakpoint_ops structure to be used in vfork catchpoints. */
6511
2060206e 6512static struct breakpoint_ops catch_vfork_breakpoint_ops;
ce78b96d 6513
edcc5120
TT
6514/* An instance of this type is used to represent an solib catchpoint.
6515 It includes a "struct breakpoint" as a kind of base class; users
6516 downcast to "struct breakpoint *" when needed. A breakpoint is
6517 really of this type iff its ops pointer points to
6518 CATCH_SOLIB_BREAKPOINT_OPS. */
6519
6520struct solib_catchpoint
6521{
6522 /* The base class. */
6523 struct breakpoint base;
6524
6525 /* True for "catch load", false for "catch unload". */
6526 unsigned char is_load;
6527
6528 /* Regular expression to match, if any. COMPILED is only valid when
6529 REGEX is non-NULL. */
6530 char *regex;
6531 regex_t compiled;
6532};
6533
6534static void
6535dtor_catch_solib (struct breakpoint *b)
6536{
6537 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
6538
6539 if (self->regex)
6540 regfree (&self->compiled);
6541 xfree (self->regex);
6542
6543 base_breakpoint_ops.dtor (b);
6544}
6545
6546static int
6547insert_catch_solib (struct bp_location *ignore)
6548{
6549 return 0;
6550}
6551
6552static int
6553remove_catch_solib (struct bp_location *ignore)
6554{
6555 return 0;
6556}
6557
6558static int
6559breakpoint_hit_catch_solib (const struct bp_location *bl,
6560 struct address_space *aspace,
6561 CORE_ADDR bp_addr,
6562 const struct target_waitstatus *ws)
6563{
6564 struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
6565 struct breakpoint *other;
6566
6567 if (ws->kind == TARGET_WAITKIND_LOADED)
6568 return 1;
6569
6570 ALL_BREAKPOINTS (other)
6571 {
6572 struct bp_location *other_bl;
6573
6574 if (other == bl->owner)
6575 continue;
6576
6577 if (other->type != bp_shlib_event)
6578 continue;
6579
6580 if (self->base.pspace != NULL && other->pspace != self->base.pspace)
6581 continue;
6582
6583 for (other_bl = other->loc; other_bl != NULL; other_bl = other_bl->next)
6584 {
6585 if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
6586 return 1;
6587 }
6588 }
6589
6590 return 0;
6591}
6592
6593static void
6594check_status_catch_solib (struct bpstats *bs)
6595{
6596 struct solib_catchpoint *self
6597 = (struct solib_catchpoint *) bs->breakpoint_at;
6598 int ix;
6599
6600 if (self->is_load)
6601 {
6602 struct so_list *iter;
6603
6604 for (ix = 0;
6605 VEC_iterate (so_list_ptr, current_program_space->added_solibs,
6606 ix, iter);
6607 ++ix)
6608 {
6609 if (!self->regex
6610 || regexec (&self->compiled, iter->so_name, 0, NULL, 0) == 0)
6611 return;
6612 }
6613 }
6614 else
6615 {
6616 char *iter;
6617
6618 for (ix = 0;
6619 VEC_iterate (char_ptr, current_program_space->deleted_solibs,
6620 ix, iter);
6621 ++ix)
6622 {
6623 if (!self->regex
6624 || regexec (&self->compiled, iter, 0, NULL, 0) == 0)
6625 return;
6626 }
6627 }
6628
6629 bs->stop = 0;
6630 bs->print_it = print_it_noop;
6631}
6632
6633static enum print_stop_action
6634print_it_catch_solib (bpstat bs)
6635{
6636 struct breakpoint *b = bs->breakpoint_at;
6637 struct ui_out *uiout = current_uiout;
6638
6639 annotate_catchpoint (b->number);
6640 if (b->disposition == disp_del)
6641 ui_out_text (uiout, "\nTemporary catchpoint ");
6642 else
6643 ui_out_text (uiout, "\nCatchpoint ");
6644 ui_out_field_int (uiout, "bkptno", b->number);
6645 ui_out_text (uiout, "\n");
6646 if (ui_out_is_mi_like_p (uiout))
6647 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
6648 print_solib_event (1);
6649 return PRINT_SRC_AND_LOC;
6650}
6651
6652static void
6653print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
6654{
6655 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
6656 struct value_print_options opts;
6657 struct ui_out *uiout = current_uiout;
6658 char *msg;
6659
6660 get_user_print_options (&opts);
6661 /* Field 4, the address, is omitted (which makes the columns not
6662 line up too nicely with the headers, but the effect is relatively
6663 readable). */
6664 if (opts.addressprint)
6665 {
6666 annotate_field (4);
6667 ui_out_field_skip (uiout, "addr");
6668 }
6669
6670 annotate_field (5);
6671 if (self->is_load)
6672 {
6673 if (self->regex)
6674 msg = xstrprintf (_("load of library matching %s"), self->regex);
6675 else
6676 msg = xstrdup (_("load of library"));
6677 }
6678 else
6679 {
6680 if (self->regex)
6681 msg = xstrprintf (_("unload of library matching %s"), self->regex);
6682 else
6683 msg = xstrdup (_("unload of library"));
6684 }
6685 ui_out_field_string (uiout, "what", msg);
6686 xfree (msg);
6687}
6688
6689static void
6690print_mention_catch_solib (struct breakpoint *b)
6691{
6692 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
6693
6694 printf_filtered (_("Catchpoint %d (%s)"), b->number,
6695 self->is_load ? "load" : "unload");
6696}
6697
6698static void
6699print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
6700{
6701 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
6702
6703 fprintf_unfiltered (fp, "%s %s",
6704 b->disposition == disp_del ? "tcatch" : "catch",
6705 self->is_load ? "load" : "unload");
6706 if (self->regex)
6707 fprintf_unfiltered (fp, " %s", self->regex);
6708 fprintf_unfiltered (fp, "\n");
6709}
6710
6711static struct breakpoint_ops catch_solib_breakpoint_ops;
6712
6713/* A helper function that does all the work for "catch load" and
6714 "catch unload". */
6715
6716static void
6717catch_load_or_unload (char *arg, int from_tty, int is_load,
6718 struct cmd_list_element *command)
6719{
6720 struct solib_catchpoint *c;
6721 struct gdbarch *gdbarch = get_current_arch ();
6722 int tempflag;
6723 regex_t compiled;
6724 struct cleanup *cleanup;
6725
6726 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
6727
6728 if (!arg)
6729 arg = "";
6730 arg = skip_spaces (arg);
6731
6732 c = XCNEW (struct solib_catchpoint);
6733 cleanup = make_cleanup (xfree, c);
6734
6735 if (*arg != '\0')
6736 {
6737 int errcode;
6738
6739 errcode = regcomp (&c->compiled, arg, REG_NOSUB);
6740 if (errcode != 0)
6741 {
6742 char *err = get_regcomp_error (errcode, &c->compiled);
6743
6744 make_cleanup (xfree, err);
6745 error (_("Invalid regexp (%s): %s"), err, arg);
6746 }
6747 c->regex = xstrdup (arg);
6748 }
6749
6750 c->is_load = is_load;
6751 init_catchpoint (&c->base, gdbarch, tempflag, NULL,
6752 &catch_solib_breakpoint_ops);
6753
6754 discard_cleanups (cleanup);
6755 install_breakpoint (0, &c->base, 1);
6756}
6757
6758static void
6759catch_load_command_1 (char *arg, int from_tty,
6760 struct cmd_list_element *command)
6761{
6762 catch_load_or_unload (arg, from_tty, 1, command);
6763}
6764
6765static void
6766catch_unload_command_1 (char *arg, int from_tty,
6767 struct cmd_list_element *command)
6768{
6769 catch_load_or_unload (arg, from_tty, 0, command);
6770}
6771
be5c67c1
PA
6772/* An instance of this type is used to represent a syscall catchpoint.
6773 It includes a "struct breakpoint" as a kind of base class; users
6774 downcast to "struct breakpoint *" when needed. A breakpoint is
6775 really of this type iff its ops pointer points to
6776 CATCH_SYSCALL_BREAKPOINT_OPS. */
6777
6778struct syscall_catchpoint
6779{
6780 /* The base class. */
6781 struct breakpoint base;
6782
6783 /* Syscall numbers used for the 'catch syscall' feature. If no
6784 syscall has been specified for filtering, its value is NULL.
6785 Otherwise, it holds a list of all syscalls to be caught. The
6786 list elements are allocated with xmalloc. */
6787 VEC(int) *syscalls_to_be_caught;
6788};
6789
6790/* Implement the "dtor" breakpoint_ops method for syscall
6791 catchpoints. */
6792
6793static void
6794dtor_catch_syscall (struct breakpoint *b)
6795{
6796 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
6797
6798 VEC_free (int, c->syscalls_to_be_caught);
348d480f 6799
2060206e 6800 base_breakpoint_ops.dtor (b);
be5c67c1
PA
6801}
6802
a96d9b2e
SDJ
6803/* Implement the "insert" breakpoint_ops method for syscall
6804 catchpoints. */
6805
77b06cd7
TJB
6806static int
6807insert_catch_syscall (struct bp_location *bl)
a96d9b2e 6808{
be5c67c1 6809 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
a96d9b2e
SDJ
6810 struct inferior *inf = current_inferior ();
6811
6812 ++inf->total_syscalls_count;
be5c67c1 6813 if (!c->syscalls_to_be_caught)
a96d9b2e
SDJ
6814 ++inf->any_syscall_count;
6815 else
6816 {
6817 int i, iter;
cc59ec59 6818
a96d9b2e 6819 for (i = 0;
be5c67c1 6820 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
6821 i++)
6822 {
6823 int elem;
cc59ec59 6824
a96d9b2e
SDJ
6825 if (iter >= VEC_length (int, inf->syscalls_counts))
6826 {
6827 int old_size = VEC_length (int, inf->syscalls_counts);
3e43a32a
MS
6828 uintptr_t vec_addr_offset
6829 = old_size * ((uintptr_t) sizeof (int));
a96d9b2e
SDJ
6830 uintptr_t vec_addr;
6831 VEC_safe_grow (int, inf->syscalls_counts, iter + 1);
6832 vec_addr = (uintptr_t) VEC_address (int, inf->syscalls_counts) +
6833 vec_addr_offset;
6834 memset ((void *) vec_addr, 0,
6835 (iter + 1 - old_size) * sizeof (int));
6836 }
6837 elem = VEC_index (int, inf->syscalls_counts, iter);
6838 VEC_replace (int, inf->syscalls_counts, iter, ++elem);
6839 }
6840 }
6841
77b06cd7
TJB
6842 return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
6843 inf->total_syscalls_count != 0,
6844 inf->any_syscall_count,
6845 VEC_length (int, inf->syscalls_counts),
6846 VEC_address (int, inf->syscalls_counts));
a96d9b2e
SDJ
6847}
6848
6849/* Implement the "remove" breakpoint_ops method for syscall
6850 catchpoints. */
6851
6852static int
77b06cd7 6853remove_catch_syscall (struct bp_location *bl)
a96d9b2e 6854{
be5c67c1 6855 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
a96d9b2e
SDJ
6856 struct inferior *inf = current_inferior ();
6857
6858 --inf->total_syscalls_count;
be5c67c1 6859 if (!c->syscalls_to_be_caught)
a96d9b2e
SDJ
6860 --inf->any_syscall_count;
6861 else
6862 {
6863 int i, iter;
cc59ec59 6864
a96d9b2e 6865 for (i = 0;
be5c67c1 6866 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
6867 i++)
6868 {
6869 int elem;
6870 if (iter >= VEC_length (int, inf->syscalls_counts))
6871 /* Shouldn't happen. */
6872 continue;
6873 elem = VEC_index (int, inf->syscalls_counts, iter);
6874 VEC_replace (int, inf->syscalls_counts, iter, --elem);
6875 }
6876 }
6877
6878 return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
6879 inf->total_syscalls_count != 0,
6880 inf->any_syscall_count,
6881 VEC_length (int, inf->syscalls_counts),
3e43a32a
MS
6882 VEC_address (int,
6883 inf->syscalls_counts));
a96d9b2e
SDJ
6884}
6885
6886/* Implement the "breakpoint_hit" breakpoint_ops method for syscall
6887 catchpoints. */
6888
6889static int
f1310107 6890breakpoint_hit_catch_syscall (const struct bp_location *bl,
09ac7c10
TT
6891 struct address_space *aspace, CORE_ADDR bp_addr,
6892 const struct target_waitstatus *ws)
a96d9b2e 6893{
4a64f543
MS
6894 /* We must check if we are catching specific syscalls in this
6895 breakpoint. If we are, then we must guarantee that the called
6896 syscall is the same syscall we are catching. */
a96d9b2e 6897 int syscall_number = 0;
be5c67c1
PA
6898 const struct syscall_catchpoint *c
6899 = (const struct syscall_catchpoint *) bl->owner;
a96d9b2e 6900
f90263c1
TT
6901 if (ws->kind != TARGET_WAITKIND_SYSCALL_ENTRY
6902 && ws->kind != TARGET_WAITKIND_SYSCALL_RETURN)
a96d9b2e
SDJ
6903 return 0;
6904
f90263c1
TT
6905 syscall_number = ws->value.syscall_number;
6906
a96d9b2e 6907 /* Now, checking if the syscall is the same. */
be5c67c1 6908 if (c->syscalls_to_be_caught)
a96d9b2e
SDJ
6909 {
6910 int i, iter;
cc59ec59 6911
a96d9b2e 6912 for (i = 0;
be5c67c1 6913 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
6914 i++)
6915 if (syscall_number == iter)
6916 break;
6917 /* Not the same. */
6918 if (!iter)
6919 return 0;
6920 }
6921
6922 return 1;
6923}
6924
6925/* Implement the "print_it" breakpoint_ops method for syscall
6926 catchpoints. */
6927
6928static enum print_stop_action
348d480f 6929print_it_catch_syscall (bpstat bs)
a96d9b2e 6930{
36dfb11c 6931 struct ui_out *uiout = current_uiout;
348d480f 6932 struct breakpoint *b = bs->breakpoint_at;
a96d9b2e
SDJ
6933 /* These are needed because we want to know in which state a
6934 syscall is. It can be in the TARGET_WAITKIND_SYSCALL_ENTRY
6935 or TARGET_WAITKIND_SYSCALL_RETURN, and depending on it we
6936 must print "called syscall" or "returned from syscall". */
6937 ptid_t ptid;
6938 struct target_waitstatus last;
6939 struct syscall s;
a96d9b2e
SDJ
6940 char *syscall_id;
6941
6942 get_last_target_status (&ptid, &last);
6943
6944 get_syscall_by_number (last.value.syscall_number, &s);
6945
6946 annotate_catchpoint (b->number);
6947
36dfb11c
TT
6948 if (b->disposition == disp_del)
6949 ui_out_text (uiout, "\nTemporary catchpoint ");
a96d9b2e 6950 else
36dfb11c
TT
6951 ui_out_text (uiout, "\nCatchpoint ");
6952 if (ui_out_is_mi_like_p (uiout))
6953 {
6954 ui_out_field_string (uiout, "reason",
6955 async_reason_lookup (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY
6956 ? EXEC_ASYNC_SYSCALL_ENTRY
6957 : EXEC_ASYNC_SYSCALL_RETURN));
6958 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
6959 }
6960 ui_out_field_int (uiout, "bkptno", b->number);
a96d9b2e
SDJ
6961
6962 if (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY)
36dfb11c
TT
6963 ui_out_text (uiout, " (call to syscall ");
6964 else
6965 ui_out_text (uiout, " (returned from syscall ");
a96d9b2e 6966
36dfb11c
TT
6967 if (s.name == NULL || ui_out_is_mi_like_p (uiout))
6968 ui_out_field_int (uiout, "syscall-number", last.value.syscall_number);
6969 if (s.name != NULL)
6970 ui_out_field_string (uiout, "syscall-name", s.name);
6971
6972 ui_out_text (uiout, "), ");
a96d9b2e
SDJ
6973
6974 return PRINT_SRC_AND_LOC;
6975}
6976
6977/* Implement the "print_one" breakpoint_ops method for syscall
6978 catchpoints. */
6979
6980static void
6981print_one_catch_syscall (struct breakpoint *b,
f1310107 6982 struct bp_location **last_loc)
a96d9b2e 6983{
be5c67c1 6984 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
a96d9b2e 6985 struct value_print_options opts;
79a45e25 6986 struct ui_out *uiout = current_uiout;
a96d9b2e
SDJ
6987
6988 get_user_print_options (&opts);
4a64f543
MS
6989 /* Field 4, the address, is omitted (which makes the columns not
6990 line up too nicely with the headers, but the effect is relatively
6991 readable). */
a96d9b2e
SDJ
6992 if (opts.addressprint)
6993 ui_out_field_skip (uiout, "addr");
6994 annotate_field (5);
6995
be5c67c1
PA
6996 if (c->syscalls_to_be_caught
6997 && VEC_length (int, c->syscalls_to_be_caught) > 1)
a96d9b2e
SDJ
6998 ui_out_text (uiout, "syscalls \"");
6999 else
7000 ui_out_text (uiout, "syscall \"");
7001
be5c67c1 7002 if (c->syscalls_to_be_caught)
a96d9b2e
SDJ
7003 {
7004 int i, iter;
7005 char *text = xstrprintf ("%s", "");
cc59ec59 7006
a96d9b2e 7007 for (i = 0;
be5c67c1 7008 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
7009 i++)
7010 {
7011 char *x = text;
7012 struct syscall s;
7013 get_syscall_by_number (iter, &s);
7014
7015 if (s.name != NULL)
7016 text = xstrprintf ("%s%s, ", text, s.name);
7017 else
7018 text = xstrprintf ("%s%d, ", text, iter);
7019
7020 /* We have to xfree the last 'text' (now stored at 'x')
e5dd4106 7021 because xstrprintf dynamically allocates new space for it
a96d9b2e
SDJ
7022 on every call. */
7023 xfree (x);
7024 }
7025 /* Remove the last comma. */
7026 text[strlen (text) - 2] = '\0';
7027 ui_out_field_string (uiout, "what", text);
7028 }
7029 else
7030 ui_out_field_string (uiout, "what", "<any syscall>");
7031 ui_out_text (uiout, "\" ");
7032}
7033
7034/* Implement the "print_mention" breakpoint_ops method for syscall
7035 catchpoints. */
7036
7037static void
7038print_mention_catch_syscall (struct breakpoint *b)
7039{
be5c67c1
PA
7040 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
7041
7042 if (c->syscalls_to_be_caught)
a96d9b2e
SDJ
7043 {
7044 int i, iter;
7045
be5c67c1 7046 if (VEC_length (int, c->syscalls_to_be_caught) > 1)
a96d9b2e
SDJ
7047 printf_filtered (_("Catchpoint %d (syscalls"), b->number);
7048 else
7049 printf_filtered (_("Catchpoint %d (syscall"), b->number);
7050
7051 for (i = 0;
be5c67c1 7052 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
7053 i++)
7054 {
7055 struct syscall s;
7056 get_syscall_by_number (iter, &s);
7057
7058 if (s.name)
7059 printf_filtered (" '%s' [%d]", s.name, s.number);
7060 else
7061 printf_filtered (" %d", s.number);
7062 }
7063 printf_filtered (")");
7064 }
7065 else
7066 printf_filtered (_("Catchpoint %d (any syscall)"),
7067 b->number);
7068}
7069
6149aea9
PA
7070/* Implement the "print_recreate" breakpoint_ops method for syscall
7071 catchpoints. */
7072
7073static void
7074print_recreate_catch_syscall (struct breakpoint *b, struct ui_file *fp)
7075{
be5c67c1
PA
7076 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
7077
6149aea9
PA
7078 fprintf_unfiltered (fp, "catch syscall");
7079
be5c67c1 7080 if (c->syscalls_to_be_caught)
6149aea9
PA
7081 {
7082 int i, iter;
7083
7084 for (i = 0;
be5c67c1 7085 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
6149aea9
PA
7086 i++)
7087 {
7088 struct syscall s;
7089
7090 get_syscall_by_number (iter, &s);
7091 if (s.name)
7092 fprintf_unfiltered (fp, " %s", s.name);
7093 else
7094 fprintf_unfiltered (fp, " %d", s.number);
7095 }
7096 }
d9b3f62e 7097 print_recreate_thread (b, fp);
6149aea9
PA
7098}
7099
a96d9b2e
SDJ
7100/* The breakpoint_ops structure to be used in syscall catchpoints. */
7101
2060206e 7102static struct breakpoint_ops catch_syscall_breakpoint_ops;
a96d9b2e
SDJ
7103
7104/* Returns non-zero if 'b' is a syscall catchpoint. */
7105
7106static int
7107syscall_catchpoint_p (struct breakpoint *b)
7108{
7109 return (b->ops == &catch_syscall_breakpoint_ops);
7110}
7111
346774a9
PA
7112/* Initialize a new breakpoint of the bp_catchpoint kind. If TEMPFLAG
7113 is non-zero, then make the breakpoint temporary. If COND_STRING is
7114 not NULL, then store it in the breakpoint. OPS, if not NULL, is
7115 the breakpoint_ops structure associated to the catchpoint. */
ce78b96d 7116
346774a9
PA
7117static void
7118init_catchpoint (struct breakpoint *b,
7119 struct gdbarch *gdbarch, int tempflag,
7120 char *cond_string,
c0a91b2b 7121 const struct breakpoint_ops *ops)
c906108c 7122{
c5aa993b 7123 struct symtab_and_line sal;
346774a9 7124
fe39c653 7125 init_sal (&sal);
6c95b8df 7126 sal.pspace = current_program_space;
c5aa993b 7127
28010a5d 7128 init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
ce78b96d 7129
1b36a34b 7130 b->cond_string = (cond_string == NULL) ? NULL : xstrdup (cond_string);
b5de0fa7 7131 b->disposition = tempflag ? disp_del : disp_donttouch;
346774a9
PA
7132}
7133
28010a5d 7134void
3ea46bff 7135install_breakpoint (int internal, struct breakpoint *b, int update_gll)
c56053d2
PA
7136{
7137 add_to_breakpoint_chain (b);
3a5c3e22
PA
7138 set_breakpoint_number (internal, b);
7139 if (!internal)
7140 mention (b);
c56053d2 7141 observer_notify_breakpoint_created (b);
3ea46bff
YQ
7142
7143 if (update_gll)
7144 update_global_location_list (1);
c56053d2
PA
7145}
7146
9b70b993 7147static void
a6d9a66e
UW
7148create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
7149 int tempflag, char *cond_string,
c0a91b2b 7150 const struct breakpoint_ops *ops)
c906108c 7151{
e29a4733 7152 struct fork_catchpoint *c = XNEW (struct fork_catchpoint);
ce78b96d 7153
e29a4733
PA
7154 init_catchpoint (&c->base, gdbarch, tempflag, cond_string, ops);
7155
7156 c->forked_inferior_pid = null_ptid;
7157
3ea46bff 7158 install_breakpoint (0, &c->base, 1);
c906108c
SS
7159}
7160
fe798b75
JB
7161/* Exec catchpoints. */
7162
b4d90040
PA
7163/* An instance of this type is used to represent an exec catchpoint.
7164 It includes a "struct breakpoint" as a kind of base class; users
7165 downcast to "struct breakpoint *" when needed. A breakpoint is
7166 really of this type iff its ops pointer points to
7167 CATCH_EXEC_BREAKPOINT_OPS. */
7168
7169struct exec_catchpoint
7170{
7171 /* The base class. */
7172 struct breakpoint base;
7173
7174 /* Filename of a program whose exec triggered this catchpoint.
7175 This field is only valid immediately after this catchpoint has
7176 triggered. */
7177 char *exec_pathname;
7178};
7179
7180/* Implement the "dtor" breakpoint_ops method for exec
7181 catchpoints. */
7182
7183static void
7184dtor_catch_exec (struct breakpoint *b)
7185{
7186 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
7187
7188 xfree (c->exec_pathname);
348d480f 7189
2060206e 7190 base_breakpoint_ops.dtor (b);
b4d90040
PA
7191}
7192
77b06cd7
TJB
7193static int
7194insert_catch_exec (struct bp_location *bl)
c906108c 7195{
77b06cd7 7196 return target_insert_exec_catchpoint (PIDGET (inferior_ptid));
fe798b75 7197}
c906108c 7198
fe798b75 7199static int
77b06cd7 7200remove_catch_exec (struct bp_location *bl)
fe798b75
JB
7201{
7202 return target_remove_exec_catchpoint (PIDGET (inferior_ptid));
7203}
c906108c 7204
fe798b75 7205static int
f1310107 7206breakpoint_hit_catch_exec (const struct bp_location *bl,
09ac7c10
TT
7207 struct address_space *aspace, CORE_ADDR bp_addr,
7208 const struct target_waitstatus *ws)
fe798b75 7209{
b4d90040
PA
7210 struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
7211
f90263c1
TT
7212 if (ws->kind != TARGET_WAITKIND_EXECD)
7213 return 0;
7214
7215 c->exec_pathname = xstrdup (ws->value.execd_pathname);
7216 return 1;
fe798b75 7217}
c906108c 7218
fe798b75 7219static enum print_stop_action
348d480f 7220print_it_catch_exec (bpstat bs)
fe798b75 7221{
36dfb11c 7222 struct ui_out *uiout = current_uiout;
348d480f 7223 struct breakpoint *b = bs->breakpoint_at;
b4d90040
PA
7224 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
7225
fe798b75 7226 annotate_catchpoint (b->number);
36dfb11c
TT
7227 if (b->disposition == disp_del)
7228 ui_out_text (uiout, "\nTemporary catchpoint ");
7229 else
7230 ui_out_text (uiout, "\nCatchpoint ");
7231 if (ui_out_is_mi_like_p (uiout))
7232 {
7233 ui_out_field_string (uiout, "reason",
7234 async_reason_lookup (EXEC_ASYNC_EXEC));
7235 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
7236 }
7237 ui_out_field_int (uiout, "bkptno", b->number);
7238 ui_out_text (uiout, " (exec'd ");
7239 ui_out_field_string (uiout, "new-exec", c->exec_pathname);
7240 ui_out_text (uiout, "), ");
7241
fe798b75 7242 return PRINT_SRC_AND_LOC;
c906108c
SS
7243}
7244
fe798b75 7245static void
a6d9a66e 7246print_one_catch_exec (struct breakpoint *b, struct bp_location **last_loc)
fe798b75 7247{
b4d90040 7248 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
fe798b75 7249 struct value_print_options opts;
79a45e25 7250 struct ui_out *uiout = current_uiout;
fe798b75
JB
7251
7252 get_user_print_options (&opts);
7253
7254 /* Field 4, the address, is omitted (which makes the columns
7255 not line up too nicely with the headers, but the effect
7256 is relatively readable). */
7257 if (opts.addressprint)
7258 ui_out_field_skip (uiout, "addr");
7259 annotate_field (5);
7260 ui_out_text (uiout, "exec");
b4d90040 7261 if (c->exec_pathname != NULL)
fe798b75
JB
7262 {
7263 ui_out_text (uiout, ", program \"");
b4d90040 7264 ui_out_field_string (uiout, "what", c->exec_pathname);
fe798b75
JB
7265 ui_out_text (uiout, "\" ");
7266 }
7267}
7268
7269static void
7270print_mention_catch_exec (struct breakpoint *b)
7271{
7272 printf_filtered (_("Catchpoint %d (exec)"), b->number);
7273}
7274
6149aea9
PA
7275/* Implement the "print_recreate" breakpoint_ops method for exec
7276 catchpoints. */
7277
7278static void
7279print_recreate_catch_exec (struct breakpoint *b, struct ui_file *fp)
7280{
7281 fprintf_unfiltered (fp, "catch exec");
d9b3f62e 7282 print_recreate_thread (b, fp);
6149aea9
PA
7283}
7284
2060206e 7285static struct breakpoint_ops catch_exec_breakpoint_ops;
fe798b75 7286
a96d9b2e
SDJ
7287static void
7288create_syscall_event_catchpoint (int tempflag, VEC(int) *filter,
c0a91b2b 7289 const struct breakpoint_ops *ops)
a96d9b2e 7290{
be5c67c1 7291 struct syscall_catchpoint *c;
a96d9b2e 7292 struct gdbarch *gdbarch = get_current_arch ();
a96d9b2e 7293
be5c67c1
PA
7294 c = XNEW (struct syscall_catchpoint);
7295 init_catchpoint (&c->base, gdbarch, tempflag, NULL, ops);
7296 c->syscalls_to_be_caught = filter;
a96d9b2e 7297
3ea46bff 7298 install_breakpoint (0, &c->base, 1);
a96d9b2e
SDJ
7299}
7300
c906108c 7301static int
fba45db2 7302hw_breakpoint_used_count (void)
c906108c 7303{
c906108c 7304 int i = 0;
f1310107
TJB
7305 struct breakpoint *b;
7306 struct bp_location *bl;
c906108c
SS
7307
7308 ALL_BREAKPOINTS (b)
c5aa993b 7309 {
d6b74ac4 7310 if (b->type == bp_hardware_breakpoint && breakpoint_enabled (b))
f1310107
TJB
7311 for (bl = b->loc; bl; bl = bl->next)
7312 {
7313 /* Special types of hardware breakpoints may use more than
7314 one register. */
348d480f 7315 i += b->ops->resources_needed (bl);
f1310107 7316 }
c5aa993b 7317 }
c906108c
SS
7318
7319 return i;
7320}
7321
a1398e0c
PA
7322/* Returns the resources B would use if it were a hardware
7323 watchpoint. */
7324
c906108c 7325static int
a1398e0c 7326hw_watchpoint_use_count (struct breakpoint *b)
c906108c 7327{
c906108c 7328 int i = 0;
e09342b5 7329 struct bp_location *bl;
c906108c 7330
a1398e0c
PA
7331 if (!breakpoint_enabled (b))
7332 return 0;
7333
7334 for (bl = b->loc; bl; bl = bl->next)
7335 {
7336 /* Special types of hardware watchpoints may use more than
7337 one register. */
7338 i += b->ops->resources_needed (bl);
7339 }
7340
7341 return i;
7342}
7343
7344/* Returns the sum the used resources of all hardware watchpoints of
7345 type TYPE in the breakpoints list. Also returns in OTHER_TYPE_USED
7346 the sum of the used resources of all hardware watchpoints of other
7347 types _not_ TYPE. */
7348
7349static int
7350hw_watchpoint_used_count_others (struct breakpoint *except,
7351 enum bptype type, int *other_type_used)
7352{
7353 int i = 0;
7354 struct breakpoint *b;
7355
c906108c
SS
7356 *other_type_used = 0;
7357 ALL_BREAKPOINTS (b)
e09342b5 7358 {
a1398e0c
PA
7359 if (b == except)
7360 continue;
e09342b5
TJB
7361 if (!breakpoint_enabled (b))
7362 continue;
7363
a1398e0c
PA
7364 if (b->type == type)
7365 i += hw_watchpoint_use_count (b);
7366 else if (is_hardware_watchpoint (b))
7367 *other_type_used = 1;
e09342b5
TJB
7368 }
7369
c906108c
SS
7370 return i;
7371}
7372
c906108c 7373void
fba45db2 7374disable_watchpoints_before_interactive_call_start (void)
c906108c 7375{
c5aa993b 7376 struct breakpoint *b;
c906108c
SS
7377
7378 ALL_BREAKPOINTS (b)
c5aa993b 7379 {
cc60f2e3 7380 if (is_watchpoint (b) && breakpoint_enabled (b))
c5aa993b 7381 {
b5de0fa7 7382 b->enable_state = bp_call_disabled;
b60e7edf 7383 update_global_location_list (0);
c5aa993b
JM
7384 }
7385 }
c906108c
SS
7386}
7387
7388void
fba45db2 7389enable_watchpoints_after_interactive_call_stop (void)
c906108c 7390{
c5aa993b 7391 struct breakpoint *b;
c906108c
SS
7392
7393 ALL_BREAKPOINTS (b)
c5aa993b 7394 {
cc60f2e3 7395 if (is_watchpoint (b) && b->enable_state == bp_call_disabled)
c5aa993b 7396 {
b5de0fa7 7397 b->enable_state = bp_enabled;
b60e7edf 7398 update_global_location_list (1);
c5aa993b
JM
7399 }
7400 }
c906108c
SS
7401}
7402
8bea4e01
UW
7403void
7404disable_breakpoints_before_startup (void)
7405{
6c95b8df 7406 current_program_space->executing_startup = 1;
f8eba3c6 7407 update_global_location_list (0);
8bea4e01
UW
7408}
7409
7410void
7411enable_breakpoints_after_startup (void)
7412{
6c95b8df 7413 current_program_space->executing_startup = 0;
f8eba3c6 7414 breakpoint_re_set ();
8bea4e01
UW
7415}
7416
c906108c
SS
7417
7418/* Set a breakpoint that will evaporate an end of command
7419 at address specified by SAL.
7420 Restrict it to frame FRAME if FRAME is nonzero. */
7421
7422struct breakpoint *
a6d9a66e
UW
7423set_momentary_breakpoint (struct gdbarch *gdbarch, struct symtab_and_line sal,
7424 struct frame_id frame_id, enum bptype type)
c906108c 7425{
52f0bd74 7426 struct breakpoint *b;
edb3359d
DJ
7427
7428 /* If FRAME_ID is valid, it should be a real frame, not an inlined
7429 one. */
7430 gdb_assert (!frame_id_inlined_p (frame_id));
7431
06edf0c0 7432 b = set_raw_breakpoint (gdbarch, sal, type, &momentary_breakpoint_ops);
b5de0fa7
EZ
7433 b->enable_state = bp_enabled;
7434 b->disposition = disp_donttouch;
818dd999 7435 b->frame_id = frame_id;
c906108c 7436
4a64f543
MS
7437 /* If we're debugging a multi-threaded program, then we want
7438 momentary breakpoints to be active in only a single thread of
7439 control. */
39f77062
KB
7440 if (in_thread_list (inferior_ptid))
7441 b->thread = pid_to_thread_id (inferior_ptid);
c906108c 7442
b60e7edf 7443 update_global_location_list_nothrow (1);
74960c60 7444
c906108c
SS
7445 return b;
7446}
611c83ae 7447
06edf0c0
PA
7448/* Make a momentary breakpoint based on the master breakpoint ORIG.
7449 The new breakpoint will have type TYPE, and use OPS as it
7450 breakpoint_ops. */
e58b0e63 7451
06edf0c0
PA
7452static struct breakpoint *
7453momentary_breakpoint_from_master (struct breakpoint *orig,
7454 enum bptype type,
c0a91b2b 7455 const struct breakpoint_ops *ops)
e58b0e63
PA
7456{
7457 struct breakpoint *copy;
7458
06edf0c0 7459 copy = set_raw_breakpoint_without_location (orig->gdbarch, type, ops);
e58b0e63 7460 copy->loc = allocate_bp_location (copy);
0e30163f 7461 set_breakpoint_location_function (copy->loc, 1);
e58b0e63 7462
a6d9a66e 7463 copy->loc->gdbarch = orig->loc->gdbarch;
e58b0e63
PA
7464 copy->loc->requested_address = orig->loc->requested_address;
7465 copy->loc->address = orig->loc->address;
7466 copy->loc->section = orig->loc->section;
6c95b8df 7467 copy->loc->pspace = orig->loc->pspace;
e58b0e63 7468
f8eba3c6
TT
7469 if (orig->loc->source_file != NULL)
7470 copy->loc->source_file = xstrdup (orig->loc->source_file);
e58b0e63 7471
f8eba3c6 7472 copy->loc->line_number = orig->loc->line_number;
e58b0e63
PA
7473 copy->frame_id = orig->frame_id;
7474 copy->thread = orig->thread;
6c95b8df 7475 copy->pspace = orig->pspace;
e58b0e63
PA
7476
7477 copy->enable_state = bp_enabled;
7478 copy->disposition = disp_donttouch;
7479 copy->number = internal_breakpoint_number--;
7480
7481 update_global_location_list_nothrow (0);
7482 return copy;
7483}
7484
06edf0c0
PA
7485/* Make a deep copy of momentary breakpoint ORIG. Returns NULL if
7486 ORIG is NULL. */
7487
7488struct breakpoint *
7489clone_momentary_breakpoint (struct breakpoint *orig)
7490{
7491 /* If there's nothing to clone, then return nothing. */
7492 if (orig == NULL)
7493 return NULL;
7494
7495 return momentary_breakpoint_from_master (orig, orig->type, orig->ops);
7496}
7497
611c83ae 7498struct breakpoint *
a6d9a66e
UW
7499set_momentary_breakpoint_at_pc (struct gdbarch *gdbarch, CORE_ADDR pc,
7500 enum bptype type)
611c83ae
PA
7501{
7502 struct symtab_and_line sal;
7503
7504 sal = find_pc_line (pc, 0);
7505 sal.pc = pc;
7506 sal.section = find_pc_overlay (pc);
7507 sal.explicit_pc = 1;
7508
a6d9a66e 7509 return set_momentary_breakpoint (gdbarch, sal, null_frame_id, type);
611c83ae 7510}
c906108c 7511\f
c5aa993b 7512
c906108c
SS
7513/* Tell the user we have just set a breakpoint B. */
7514
7515static void
fba45db2 7516mention (struct breakpoint *b)
c906108c 7517{
348d480f 7518 b->ops->print_mention (b);
79a45e25 7519 if (ui_out_is_mi_like_p (current_uiout))
fb40c209 7520 return;
c906108c
SS
7521 printf_filtered ("\n");
7522}
c906108c 7523\f
c5aa993b 7524
0d381245 7525static struct bp_location *
39d61571 7526add_location_to_breakpoint (struct breakpoint *b,
0d381245
VP
7527 const struct symtab_and_line *sal)
7528{
7529 struct bp_location *loc, **tmp;
3742cc8b
YQ
7530 CORE_ADDR adjusted_address;
7531 struct gdbarch *loc_gdbarch = get_sal_arch (*sal);
7532
7533 if (loc_gdbarch == NULL)
7534 loc_gdbarch = b->gdbarch;
7535
7536 /* Adjust the breakpoint's address prior to allocating a location.
7537 Once we call allocate_bp_location(), that mostly uninitialized
7538 location will be placed on the location chain. Adjustment of the
7539 breakpoint may cause target_read_memory() to be called and we do
7540 not want its scan of the location chain to find a breakpoint and
7541 location that's only been partially initialized. */
7542 adjusted_address = adjust_breakpoint_address (loc_gdbarch,
7543 sal->pc, b->type);
0d381245 7544
39d61571 7545 loc = allocate_bp_location (b);
0d381245
VP
7546 for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
7547 ;
7548 *tmp = loc;
3742cc8b 7549
0d381245 7550 loc->requested_address = sal->pc;
3742cc8b 7551 loc->address = adjusted_address;
6c95b8df
PA
7552 loc->pspace = sal->pspace;
7553 gdb_assert (loc->pspace != NULL);
0d381245 7554 loc->section = sal->section;
3742cc8b 7555 loc->gdbarch = loc_gdbarch;
f8eba3c6
TT
7556
7557 if (sal->symtab != NULL)
7558 loc->source_file = xstrdup (sal->symtab->filename);
7559 loc->line_number = sal->line;
7560
0e30163f
JK
7561 set_breakpoint_location_function (loc,
7562 sal->explicit_pc || sal->explicit_line);
0d381245
VP
7563 return loc;
7564}
514f746b
AR
7565\f
7566
7567/* Return 1 if LOC is pointing to a permanent breakpoint,
7568 return 0 otherwise. */
7569
7570static int
7571bp_loc_is_permanent (struct bp_location *loc)
7572{
7573 int len;
7574 CORE_ADDR addr;
1afeeb75 7575 const gdb_byte *bpoint;
514f746b 7576 gdb_byte *target_mem;
939c61fa
JK
7577 struct cleanup *cleanup;
7578 int retval = 0;
514f746b
AR
7579
7580 gdb_assert (loc != NULL);
7581
7582 addr = loc->address;
1afeeb75 7583 bpoint = gdbarch_breakpoint_from_pc (loc->gdbarch, &addr, &len);
514f746b 7584
939c61fa 7585 /* Software breakpoints unsupported? */
1afeeb75 7586 if (bpoint == NULL)
939c61fa
JK
7587 return 0;
7588
514f746b
AR
7589 target_mem = alloca (len);
7590
939c61fa
JK
7591 /* Enable the automatic memory restoration from breakpoints while
7592 we read the memory. Otherwise we could say about our temporary
7593 breakpoints they are permanent. */
6c95b8df
PA
7594 cleanup = save_current_space_and_thread ();
7595
7596 switch_to_program_space_and_thread (loc->pspace);
7597 make_show_memory_breakpoints_cleanup (0);
939c61fa 7598
514f746b 7599 if (target_read_memory (loc->address, target_mem, len) == 0
1afeeb75 7600 && memcmp (target_mem, bpoint, len) == 0)
939c61fa 7601 retval = 1;
514f746b 7602
939c61fa
JK
7603 do_cleanups (cleanup);
7604
7605 return retval;
514f746b
AR
7606}
7607
7608
c3f6f71d 7609
018d34a4
VP
7610/* Create a breakpoint with SAL as location. Use ADDR_STRING
7611 as textual description of the location, and COND_STRING
db107f19 7612 as condition expression. */
018d34a4
VP
7613
7614static void
d9b3f62e
PA
7615init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
7616 struct symtabs_and_lines sals, char *addr_string,
f8eba3c6 7617 char *filter, char *cond_string,
d9b3f62e
PA
7618 enum bptype type, enum bpdisp disposition,
7619 int thread, int task, int ignore_count,
c0a91b2b 7620 const struct breakpoint_ops *ops, int from_tty,
d9b3f62e 7621 int enabled, int internal, int display_canonical)
018d34a4 7622{
0d381245 7623 int i;
018d34a4
VP
7624
7625 if (type == bp_hardware_breakpoint)
7626 {
fbbd034e
AS
7627 int target_resources_ok;
7628
7629 i = hw_breakpoint_used_count ();
7630 target_resources_ok =
7631 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
018d34a4
VP
7632 i + 1, 0);
7633 if (target_resources_ok == 0)
7634 error (_("No hardware breakpoint support in the target."));
7635 else if (target_resources_ok < 0)
7636 error (_("Hardware breakpoints used exceeds limit."));
7637 }
7638
6c95b8df
PA
7639 gdb_assert (sals.nelts > 0);
7640
0d381245
VP
7641 for (i = 0; i < sals.nelts; ++i)
7642 {
7643 struct symtab_and_line sal = sals.sals[i];
7644 struct bp_location *loc;
7645
7646 if (from_tty)
5af949e3
UW
7647 {
7648 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
7649 if (!loc_gdbarch)
7650 loc_gdbarch = gdbarch;
7651
7652 describe_other_breakpoints (loc_gdbarch,
6c95b8df 7653 sal.pspace, sal.pc, sal.section, thread);
5af949e3 7654 }
0d381245
VP
7655
7656 if (i == 0)
7657 {
d9b3f62e 7658 init_raw_breakpoint (b, gdbarch, sal, type, ops);
0d381245 7659 b->thread = thread;
4a306c9a 7660 b->task = task;
018d34a4 7661
0d381245
VP
7662 b->cond_string = cond_string;
7663 b->ignore_count = ignore_count;
41447f92 7664 b->enable_state = enabled ? bp_enabled : bp_disabled;
0d381245 7665 b->disposition = disposition;
6c95b8df 7666
0fb4aa4b
PA
7667 if (type == bp_static_tracepoint)
7668 {
d9b3f62e 7669 struct tracepoint *t = (struct tracepoint *) b;
0fb4aa4b
PA
7670 struct static_tracepoint_marker marker;
7671
983af33b 7672 if (strace_marker_p (b))
0fb4aa4b
PA
7673 {
7674 /* We already know the marker exists, otherwise, we
7675 wouldn't see a sal for it. */
7676 char *p = &addr_string[3];
7677 char *endp;
7678 char *marker_str;
0fb4aa4b 7679
e9cafbcc 7680 p = skip_spaces (p);
0fb4aa4b 7681
e9cafbcc 7682 endp = skip_to_space (p);
0fb4aa4b
PA
7683
7684 marker_str = savestring (p, endp - p);
d9b3f62e 7685 t->static_trace_marker_id = marker_str;
0fb4aa4b 7686
3e43a32a
MS
7687 printf_filtered (_("Probed static tracepoint "
7688 "marker \"%s\"\n"),
d9b3f62e 7689 t->static_trace_marker_id);
0fb4aa4b
PA
7690 }
7691 else if (target_static_tracepoint_marker_at (sal.pc, &marker))
7692 {
d9b3f62e 7693 t->static_trace_marker_id = xstrdup (marker.str_id);
0fb4aa4b
PA
7694 release_static_tracepoint_marker (&marker);
7695
3e43a32a
MS
7696 printf_filtered (_("Probed static tracepoint "
7697 "marker \"%s\"\n"),
d9b3f62e 7698 t->static_trace_marker_id);
0fb4aa4b
PA
7699 }
7700 else
3e43a32a
MS
7701 warning (_("Couldn't determine the static "
7702 "tracepoint marker to probe"));
0fb4aa4b
PA
7703 }
7704
0d381245
VP
7705 loc = b->loc;
7706 }
7707 else
018d34a4 7708 {
39d61571 7709 loc = add_location_to_breakpoint (b, &sal);
0d381245
VP
7710 }
7711
514f746b
AR
7712 if (bp_loc_is_permanent (loc))
7713 make_breakpoint_permanent (b);
7714
0d381245
VP
7715 if (b->cond_string)
7716 {
7717 char *arg = b->cond_string;
d32a6982 7718 loc->cond = parse_exp_1 (&arg, block_for_pc (loc->address), 0);
0d381245 7719 if (*arg)
db107f19 7720 error (_("Garbage %s follows condition"), arg);
018d34a4 7721 }
0d381245 7722 }
018d34a4 7723
56435ebe 7724 b->display_canonical = display_canonical;
018d34a4
VP
7725 if (addr_string)
7726 b->addr_string = addr_string;
7727 else
7728 /* addr_string has to be used or breakpoint_re_set will delete
7729 me. */
5af949e3
UW
7730 b->addr_string
7731 = xstrprintf ("*%s", paddress (b->loc->gdbarch, b->loc->address));
f8eba3c6 7732 b->filter = filter;
d9b3f62e 7733}
018d34a4 7734
d9b3f62e
PA
7735static void
7736create_breakpoint_sal (struct gdbarch *gdbarch,
7737 struct symtabs_and_lines sals, char *addr_string,
f8eba3c6 7738 char *filter, char *cond_string,
d9b3f62e
PA
7739 enum bptype type, enum bpdisp disposition,
7740 int thread, int task, int ignore_count,
c0a91b2b 7741 const struct breakpoint_ops *ops, int from_tty,
d9b3f62e
PA
7742 int enabled, int internal, int display_canonical)
7743{
7744 struct breakpoint *b;
7745 struct cleanup *old_chain;
7746
7747 if (is_tracepoint_type (type))
7748 {
7749 struct tracepoint *t;
7750
7751 t = XCNEW (struct tracepoint);
7752 b = &t->base;
7753 }
7754 else
7755 b = XNEW (struct breakpoint);
7756
7757 old_chain = make_cleanup (xfree, b);
7758
7759 init_breakpoint_sal (b, gdbarch,
7760 sals, addr_string,
f8eba3c6 7761 filter, cond_string,
d9b3f62e
PA
7762 type, disposition,
7763 thread, task, ignore_count,
7764 ops, from_tty,
7765 enabled, internal, display_canonical);
7766 discard_cleanups (old_chain);
7767
3ea46bff 7768 install_breakpoint (internal, b, 0);
018d34a4
VP
7769}
7770
7771/* Add SALS.nelts breakpoints to the breakpoint table. For each
7772 SALS.sal[i] breakpoint, include the corresponding ADDR_STRING[i]
7773 value. COND_STRING, if not NULL, specified the condition to be
7774 used for all breakpoints. Essentially the only case where
7775 SALS.nelts is not 1 is when we set a breakpoint on an overloaded
7776 function. In that case, it's still not possible to specify
7777 separate conditions for different overloaded functions, so
7778 we take just a single condition string.
7779
c3f6f71d 7780 NOTE: If the function succeeds, the caller is expected to cleanup
018d34a4 7781 the arrays ADDR_STRING, COND_STRING, and SALS (but not the
c3f6f71d
JM
7782 array contents). If the function fails (error() is called), the
7783 caller is expected to cleanups both the ADDR_STRING, COND_STRING,
4a64f543 7784 COND and SALS arrays and each of those arrays contents. */
c906108c
SS
7785
7786static void
8cdf0e15 7787create_breakpoints_sal (struct gdbarch *gdbarch,
7efd8fc2 7788 struct linespec_result *canonical,
8cdf0e15
VP
7789 char *cond_string,
7790 enum bptype type, enum bpdisp disposition,
7791 int thread, int task, int ignore_count,
c0a91b2b 7792 const struct breakpoint_ops *ops, int from_tty,
84f4c1fe 7793 int enabled, int internal)
c906108c 7794{
018d34a4 7795 int i;
f8eba3c6 7796 struct linespec_sals *lsal;
cc59ec59 7797
f8eba3c6
TT
7798 if (canonical->pre_expanded)
7799 gdb_assert (VEC_length (linespec_sals, canonical->sals) == 1);
7800
7801 for (i = 0; VEC_iterate (linespec_sals, canonical->sals, i, lsal); ++i)
c3f6f71d 7802 {
f8eba3c6
TT
7803 /* Note that 'addr_string' can be NULL in the case of a plain
7804 'break', without arguments. */
7805 char *addr_string = (canonical->addr_string
7806 ? xstrdup (canonical->addr_string)
7807 : NULL);
7808 char *filter_string = lsal->canonical ? xstrdup (lsal->canonical) : NULL;
7809 struct cleanup *inner = make_cleanup (xfree, addr_string);
0d381245 7810
f8eba3c6
TT
7811 make_cleanup (xfree, filter_string);
7812 create_breakpoint_sal (gdbarch, lsal->sals,
7813 addr_string,
7814 filter_string,
8cdf0e15 7815 cond_string, type, disposition,
84f4c1fe 7816 thread, task, ignore_count, ops,
56435ebe
TT
7817 from_tty, enabled, internal,
7818 canonical->special_display);
f8eba3c6 7819 discard_cleanups (inner);
c3f6f71d 7820 }
c3f6f71d 7821}
c906108c 7822
9998af43 7823/* Parse ADDRESS which is assumed to be a SAL specification possibly
c3f6f71d 7824 followed by conditionals. On return, SALS contains an array of SAL
4a64f543 7825 addresses found. ADDR_STRING contains a vector of (canonical)
9998af43
TJB
7826 address strings. ADDRESS points to the end of the SAL.
7827
7828 The array and the line spec strings are allocated on the heap, it is
7829 the caller's responsibility to free them. */
c906108c 7830
b9362cc7 7831static void
c3f6f71d 7832parse_breakpoint_sals (char **address,
58438ac1 7833 struct linespec_result *canonical)
c3f6f71d
JM
7834{
7835 char *addr_start = *address;
cc59ec59 7836
c3f6f71d 7837 /* If no arg given, or if first arg is 'if ', use the default
4a64f543 7838 breakpoint. */
c3f6f71d
JM
7839 if ((*address) == NULL
7840 || (strncmp ((*address), "if", 2) == 0 && isspace ((*address)[2])))
c906108c 7841 {
1bfeeb0f
JL
7842 /* The last displayed codepoint, if it's valid, is our default breakpoint
7843 address. */
7844 if (last_displayed_sal_is_valid ())
c906108c 7845 {
f8eba3c6 7846 struct linespec_sals lsal;
c3f6f71d 7847 struct symtab_and_line sal;
cc59ec59 7848
4a64f543 7849 init_sal (&sal); /* Initialize to zeroes. */
f8eba3c6 7850 lsal.sals.sals = (struct symtab_and_line *)
c906108c 7851 xmalloc (sizeof (struct symtab_and_line));
1bfeeb0f
JL
7852
7853 /* Set sal's pspace, pc, symtab, and line to the values
7854 corresponding to the last call to print_frame_info. */
7855 get_last_displayed_sal (&sal);
7856 sal.section = find_pc_overlay (sal.pc);
00903456 7857
4a64f543 7858 /* "break" without arguments is equivalent to "break *PC"
1bfeeb0f
JL
7859 where PC is the last displayed codepoint's address. So
7860 make sure to set sal.explicit_pc to prevent GDB from
7861 trying to expand the list of sals to include all other
7862 instances with the same symtab and line. */
00903456
JK
7863 sal.explicit_pc = 1;
7864
f8eba3c6
TT
7865 lsal.sals.sals[0] = sal;
7866 lsal.sals.nelts = 1;
7867 lsal.canonical = NULL;
7868
7869 VEC_safe_push (linespec_sals, canonical->sals, &lsal);
c906108c
SS
7870 }
7871 else
8a3fe4f8 7872 error (_("No default breakpoint address now."));
c906108c
SS
7873 }
7874 else
7875 {
c906108c 7876 /* Force almost all breakpoints to be in terms of the
4a64f543
MS
7877 current_source_symtab (which is decode_line_1's default).
7878 This should produce the results we want almost all of the
f8eba3c6
TT
7879 time while leaving default_breakpoint_* alone. */
7880 if (last_displayed_sal_is_valid ())
7881 decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
7882 get_last_displayed_symtab (),
7883 get_last_displayed_line (),
7884 canonical, NULL, NULL);
c906108c 7885 else
f8eba3c6
TT
7886 decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
7887 (struct symtab *) NULL, 0,
7888 canonical, NULL, NULL);
c906108c 7889 }
c3f6f71d 7890}
c906108c 7891
c906108c 7892
c3f6f71d 7893/* Convert each SAL into a real PC. Verify that the PC can be
4a64f543 7894 inserted as a breakpoint. If it can't throw an error. */
c906108c 7895
b9362cc7 7896static void
23e7acfb 7897breakpoint_sals_to_pc (struct symtabs_and_lines *sals)
c3f6f71d
JM
7898{
7899 int i;
cc59ec59 7900
c3f6f71d 7901 for (i = 0; i < sals->nelts; i++)
ee53e872 7902 resolve_sal_pc (&sals->sals[i]);
c3f6f71d
JM
7903}
7904
7a697b8d
SS
7905/* Fast tracepoints may have restrictions on valid locations. For
7906 instance, a fast tracepoint using a jump instead of a trap will
7907 likely have to overwrite more bytes than a trap would, and so can
7908 only be placed where the instruction is longer than the jump, or a
7909 multi-instruction sequence does not have a jump into the middle of
7910 it, etc. */
7911
7912static void
7913check_fast_tracepoint_sals (struct gdbarch *gdbarch,
7914 struct symtabs_and_lines *sals)
7915{
7916 int i, rslt;
7917 struct symtab_and_line *sal;
7918 char *msg;
7919 struct cleanup *old_chain;
7920
7921 for (i = 0; i < sals->nelts; i++)
7922 {
f8eba3c6
TT
7923 struct gdbarch *sarch;
7924
7a697b8d
SS
7925 sal = &sals->sals[i];
7926
f8eba3c6
TT
7927 sarch = get_sal_arch (*sal);
7928 /* We fall back to GDBARCH if there is no architecture
7929 associated with SAL. */
7930 if (sarch == NULL)
7931 sarch = gdbarch;
7932 rslt = gdbarch_fast_tracepoint_valid_at (sarch, sal->pc,
7a697b8d
SS
7933 NULL, &msg);
7934 old_chain = make_cleanup (xfree, msg);
7935
7936 if (!rslt)
7937 error (_("May not have a fast tracepoint at 0x%s%s"),
f8eba3c6 7938 paddress (sarch, sal->pc), (msg ? msg : ""));
7a697b8d
SS
7939
7940 do_cleanups (old_chain);
7941 }
7942}
7943
018d34a4
VP
7944/* Given TOK, a string specification of condition and thread, as
7945 accepted by the 'break' command, extract the condition
7946 string and thread number and set *COND_STRING and *THREAD.
4a64f543 7947 PC identifies the context at which the condition should be parsed.
018d34a4
VP
7948 If no condition is found, *COND_STRING is set to NULL.
7949 If no thread is found, *THREAD is set to -1. */
7950static void
7951find_condition_and_thread (char *tok, CORE_ADDR pc,
4a306c9a 7952 char **cond_string, int *thread, int *task)
018d34a4
VP
7953{
7954 *cond_string = NULL;
7955 *thread = -1;
7956 while (tok && *tok)
7957 {
7958 char *end_tok;
7959 int toklen;
7960 char *cond_start = NULL;
7961 char *cond_end = NULL;
cc59ec59 7962
e9cafbcc 7963 tok = skip_spaces (tok);
018d34a4 7964
e9cafbcc 7965 end_tok = skip_to_space (tok);
018d34a4
VP
7966
7967 toklen = end_tok - tok;
7968
7969 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
7970 {
f7545552
TT
7971 struct expression *expr;
7972
018d34a4 7973 tok = cond_start = end_tok + 1;
f7545552
TT
7974 expr = parse_exp_1 (&tok, block_for_pc (pc), 0);
7975 xfree (expr);
018d34a4
VP
7976 cond_end = tok;
7977 *cond_string = savestring (cond_start,
7978 cond_end - cond_start);
7979 }
7980 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
7981 {
7982 char *tmptok;
7983
7984 tok = end_tok + 1;
7985 tmptok = tok;
7986 *thread = strtol (tok, &tok, 0);
7987 if (tok == tmptok)
7988 error (_("Junk after thread keyword."));
7989 if (!valid_thread_id (*thread))
7990 error (_("Unknown thread %d."), *thread);
7991 }
4a306c9a
JB
7992 else if (toklen >= 1 && strncmp (tok, "task", toklen) == 0)
7993 {
7994 char *tmptok;
7995
7996 tok = end_tok + 1;
7997 tmptok = tok;
7998 *task = strtol (tok, &tok, 0);
7999 if (tok == tmptok)
8000 error (_("Junk after task keyword."));
8001 if (!valid_task_id (*task))
b6199126 8002 error (_("Unknown task %d."), *task);
4a306c9a 8003 }
018d34a4
VP
8004 else
8005 error (_("Junk at end of arguments."));
8006 }
8007}
8008
0fb4aa4b
PA
8009/* Decode a static tracepoint marker spec. */
8010
8011static struct symtabs_and_lines
8012decode_static_tracepoint_spec (char **arg_p)
8013{
8014 VEC(static_tracepoint_marker_p) *markers = NULL;
8015 struct symtabs_and_lines sals;
8016 struct symtab_and_line sal;
8017 struct symbol *sym;
8018 struct cleanup *old_chain;
8019 char *p = &(*arg_p)[3];
8020 char *endp;
8021 char *marker_str;
8022 int i;
8023
e9cafbcc 8024 p = skip_spaces (p);
0fb4aa4b 8025
e9cafbcc 8026 endp = skip_to_space (p);
0fb4aa4b
PA
8027
8028 marker_str = savestring (p, endp - p);
8029 old_chain = make_cleanup (xfree, marker_str);
8030
8031 markers = target_static_tracepoint_markers_by_strid (marker_str);
8032 if (VEC_empty(static_tracepoint_marker_p, markers))
8033 error (_("No known static tracepoint marker named %s"), marker_str);
8034
8035 sals.nelts = VEC_length(static_tracepoint_marker_p, markers);
8036 sals.sals = xmalloc (sizeof *sals.sals * sals.nelts);
8037
8038 for (i = 0; i < sals.nelts; i++)
8039 {
8040 struct static_tracepoint_marker *marker;
8041
8042 marker = VEC_index (static_tracepoint_marker_p, markers, i);
8043
8044 init_sal (&sals.sals[i]);
8045
8046 sals.sals[i] = find_pc_line (marker->address, 0);
8047 sals.sals[i].pc = marker->address;
8048
8049 release_static_tracepoint_marker (marker);
8050 }
8051
8052 do_cleanups (old_chain);
8053
8054 *arg_p = endp;
8055 return sals;
8056}
8057
fd9b8c24
PA
8058/* Set a breakpoint. This function is shared between CLI and MI
8059 functions for setting a breakpoint. This function has two major
8060 modes of operations, selected by the PARSE_CONDITION_AND_THREAD
8061 parameter. If non-zero, the function will parse arg, extracting
4a64f543
MS
8062 breakpoint location, address and thread. Otherwise, ARG is just
8063 the location of breakpoint, with condition and thread specified by
8064 the COND_STRING and THREAD parameters. If INTERNAL is non-zero,
8065 the breakpoint number will be allocated from the internal
8066 breakpoint count. Returns true if any breakpoint was created;
8067 false otherwise. */
0101ce28 8068
8cdf0e15
VP
8069int
8070create_breakpoint (struct gdbarch *gdbarch,
8071 char *arg, char *cond_string, int thread,
8072 int parse_condition_and_thread,
0fb4aa4b 8073 int tempflag, enum bptype type_wanted,
8cdf0e15
VP
8074 int ignore_count,
8075 enum auto_boolean pending_break_support,
c0a91b2b 8076 const struct breakpoint_ops *ops,
84f4c1fe 8077 int from_tty, int enabled, int internal)
c3f6f71d 8078{
b78a6381 8079 volatile struct gdb_exception e;
f8eba3c6 8080 char *copy_arg = NULL;
c3f6f71d 8081 char *addr_start = arg;
7efd8fc2 8082 struct linespec_result canonical;
c3f6f71d 8083 struct cleanup *old_chain;
80c99de1 8084 struct cleanup *bkpt_chain = NULL;
05ff989b 8085 int i;
0101ce28 8086 int pending = 0;
4a306c9a 8087 int task = 0;
86b17b60 8088 int prev_bkpt_count = breakpoint_count;
c3f6f71d 8089
348d480f
PA
8090 gdb_assert (ops != NULL);
8091
7efd8fc2 8092 init_linespec_result (&canonical);
c3f6f71d 8093
b78a6381
TT
8094 TRY_CATCH (e, RETURN_MASK_ALL)
8095 {
983af33b
SDJ
8096 ops->create_sals_from_address (&arg, &canonical, type_wanted,
8097 addr_start, &copy_arg);
b78a6381 8098 }
0101ce28
JJ
8099
8100 /* If caller is interested in rc value from parse, set value. */
05ff989b 8101 switch (e.reason)
0101ce28 8102 {
983af33b
SDJ
8103 case GDB_NO_ERROR:
8104 if (VEC_empty (linespec_sals, canonical.sals))
8105 return 0;
8106 break;
05ff989b
AC
8107 case RETURN_ERROR:
8108 switch (e.error)
0101ce28 8109 {
05ff989b 8110 case NOT_FOUND_ERROR:
0101ce28 8111
05ff989b
AC
8112 /* If pending breakpoint support is turned off, throw
8113 error. */
fa8d40ab
JJ
8114
8115 if (pending_break_support == AUTO_BOOLEAN_FALSE)
723a2275
VP
8116 throw_exception (e);
8117
8118 exception_print (gdb_stderr, e);
fa8d40ab 8119
05ff989b
AC
8120 /* If pending breakpoint support is auto query and the user
8121 selects no, then simply return the error code. */
059fb39f 8122 if (pending_break_support == AUTO_BOOLEAN_AUTO
bfccc43c
YQ
8123 && !nquery (_("Make %s pending on future shared library load? "),
8124 bptype_string (type_wanted)))
fd9b8c24 8125 return 0;
fa8d40ab 8126
05ff989b
AC
8127 /* At this point, either the user was queried about setting
8128 a pending breakpoint and selected yes, or pending
8129 breakpoint behavior is on and thus a pending breakpoint
8130 is defaulted on behalf of the user. */
f8eba3c6
TT
8131 {
8132 struct linespec_sals lsal;
8133
8134 copy_arg = xstrdup (addr_start);
8135 lsal.canonical = xstrdup (copy_arg);
8136 lsal.sals.nelts = 1;
8137 lsal.sals.sals = XNEW (struct symtab_and_line);
8138 init_sal (&lsal.sals.sals[0]);
8139 pending = 1;
8140 VEC_safe_push (linespec_sals, canonical.sals, &lsal);
8141 }
05ff989b
AC
8142 break;
8143 default:
98deb0da 8144 throw_exception (e);
0101ce28 8145 }
2abae994 8146 break;
05ff989b 8147 default:
983af33b 8148 throw_exception (e);
0101ce28 8149 }
c3f6f71d 8150
4a64f543 8151 /* Create a chain of things that always need to be cleaned up. */
f8eba3c6 8152 old_chain = make_cleanup_destroy_linespec_result (&canonical);
c3f6f71d 8153
c3f6f71d
JM
8154 /* ----------------------------- SNIP -----------------------------
8155 Anything added to the cleanup chain beyond this point is assumed
8156 to be part of a breakpoint. If the breakpoint create succeeds
80c99de1
PA
8157 then the memory is not reclaimed. */
8158 bkpt_chain = make_cleanup (null_cleanup, 0);
c3f6f71d 8159
c3f6f71d
JM
8160 /* Resolve all line numbers to PC's and verify that the addresses
8161 are ok for the target. */
0101ce28 8162 if (!pending)
f8eba3c6
TT
8163 {
8164 int ix;
8165 struct linespec_sals *iter;
8166
8167 for (ix = 0; VEC_iterate (linespec_sals, canonical.sals, ix, iter); ++ix)
8168 breakpoint_sals_to_pc (&iter->sals);
8169 }
c3f6f71d 8170
7a697b8d 8171 /* Fast tracepoints may have additional restrictions on location. */
bfccc43c 8172 if (!pending && type_wanted == bp_fast_tracepoint)
f8eba3c6
TT
8173 {
8174 int ix;
8175 struct linespec_sals *iter;
8176
8177 for (ix = 0; VEC_iterate (linespec_sals, canonical.sals, ix, iter); ++ix)
8178 check_fast_tracepoint_sals (gdbarch, &iter->sals);
8179 }
7a697b8d 8180
c3f6f71d
JM
8181 /* Verify that condition can be parsed, before setting any
8182 breakpoints. Allocate a separate condition expression for each
4a64f543 8183 breakpoint. */
0101ce28 8184 if (!pending)
c3f6f71d 8185 {
f8eba3c6
TT
8186 struct linespec_sals *lsal;
8187
8188 lsal = VEC_index (linespec_sals, canonical.sals, 0);
8189
2f069f6f 8190 if (parse_condition_and_thread)
72b2ff0e
VP
8191 {
8192 /* Here we only parse 'arg' to separate condition
8193 from thread number, so parsing in context of first
8194 sal is OK. When setting the breakpoint we'll
8195 re-parse it in context of each sal. */
8196 cond_string = NULL;
8197 thread = -1;
f8eba3c6 8198 find_condition_and_thread (arg, lsal->sals.sals[0].pc, &cond_string,
4a306c9a 8199 &thread, &task);
72b2ff0e
VP
8200 if (cond_string)
8201 make_cleanup (xfree, cond_string);
8202 }
2f069f6f 8203 else
72b2ff0e
VP
8204 {
8205 /* Create a private copy of condition string. */
8206 if (cond_string)
8207 {
8208 cond_string = xstrdup (cond_string);
8209 make_cleanup (xfree, cond_string);
8210 }
8211 }
0fb4aa4b 8212
983af33b 8213 ops->create_breakpoints_sal (gdbarch, &canonical, lsal,
d9b3f62e
PA
8214 cond_string, type_wanted,
8215 tempflag ? disp_del : disp_donttouch,
8216 thread, task, ignore_count, ops,
983af33b 8217 from_tty, enabled, internal);
c906108c 8218 }
0101ce28
JJ
8219 else
8220 {
0101ce28
JJ
8221 struct breakpoint *b;
8222
0101ce28
JJ
8223 make_cleanup (xfree, copy_arg);
8224
bfccc43c
YQ
8225 if (is_tracepoint_type (type_wanted))
8226 {
8227 struct tracepoint *t;
8228
8229 t = XCNEW (struct tracepoint);
8230 b = &t->base;
8231 }
8232 else
8233 b = XNEW (struct breakpoint);
8234
8235 init_raw_breakpoint_without_location (b, gdbarch, type_wanted, ops);
8236
f8eba3c6 8237 b->addr_string = copy_arg;
72b2ff0e 8238 b->cond_string = NULL;
0101ce28 8239 b->ignore_count = ignore_count;
0101ce28 8240 b->disposition = tempflag ? disp_del : disp_donttouch;
0d381245 8241 b->condition_not_parsed = 1;
41447f92 8242 b->enable_state = enabled ? bp_enabled : bp_disabled;
cc72b2a2
KP
8243 if ((type_wanted != bp_breakpoint
8244 && type_wanted != bp_hardware_breakpoint) || thread != -1)
f8eba3c6 8245 b->pspace = current_program_space;
8bea4e01 8246
bfccc43c 8247 install_breakpoint (internal, b, 0);
0101ce28
JJ
8248 }
8249
f8eba3c6 8250 if (VEC_length (linespec_sals, canonical.sals) > 1)
95a42b64 8251 {
3e43a32a
MS
8252 warning (_("Multiple breakpoints were set.\nUse the "
8253 "\"delete\" command to delete unwanted breakpoints."));
86b17b60 8254 prev_breakpoint_count = prev_bkpt_count;
95a42b64
TT
8255 }
8256
80c99de1
PA
8257 /* That's it. Discard the cleanups for data inserted into the
8258 breakpoint. */
8259 discard_cleanups (bkpt_chain);
8260 /* But cleanup everything else. */
c3f6f71d 8261 do_cleanups (old_chain);
217dc9e2 8262
80c99de1 8263 /* error call may happen here - have BKPT_CHAIN already discarded. */
217dc9e2 8264 update_global_location_list (1);
fd9b8c24
PA
8265
8266 return 1;
c3f6f71d 8267}
c906108c 8268
348d480f 8269/* Set a breakpoint.
72b2ff0e
VP
8270 ARG is a string describing breakpoint address,
8271 condition, and thread.
8272 FLAG specifies if a breakpoint is hardware on,
8273 and if breakpoint is temporary, using BP_HARDWARE_FLAG
8274 and BP_TEMPFLAG. */
348d480f 8275
98deb0da 8276static void
72b2ff0e 8277break_command_1 (char *arg, int flag, int from_tty)
c3f6f71d 8278{
72b2ff0e 8279 int tempflag = flag & BP_TEMPFLAG;
0fb4aa4b
PA
8280 enum bptype type_wanted = (flag & BP_HARDWAREFLAG
8281 ? bp_hardware_breakpoint
8282 : bp_breakpoint);
c3f6f71d 8283
8cdf0e15
VP
8284 create_breakpoint (get_current_arch (),
8285 arg,
8286 NULL, 0, 1 /* parse arg */,
0fb4aa4b 8287 tempflag, type_wanted,
8cdf0e15
VP
8288 0 /* Ignore count */,
8289 pending_break_support,
348d480f 8290 &bkpt_breakpoint_ops,
8cdf0e15 8291 from_tty,
84f4c1fe
PM
8292 1 /* enabled */,
8293 0 /* internal */);
c906108c
SS
8294}
8295
c906108c
SS
8296/* Helper function for break_command_1 and disassemble_command. */
8297
8298void
fba45db2 8299resolve_sal_pc (struct symtab_and_line *sal)
c906108c
SS
8300{
8301 CORE_ADDR pc;
8302
8303 if (sal->pc == 0 && sal->symtab != NULL)
8304 {
8305 if (!find_line_pc (sal->symtab, sal->line, &pc))
8a3fe4f8 8306 error (_("No line %d in file \"%s\"."),
c906108c
SS
8307 sal->line, sal->symtab->filename);
8308 sal->pc = pc;
6a048695 8309
4a64f543
MS
8310 /* If this SAL corresponds to a breakpoint inserted using a line
8311 number, then skip the function prologue if necessary. */
6a048695 8312 if (sal->explicit_line)
059acae7 8313 skip_prologue_sal (sal);
c906108c
SS
8314 }
8315
8316 if (sal->section == 0 && sal->symtab != NULL)
8317 {
8318 struct blockvector *bv;
c5aa993b
JM
8319 struct block *b;
8320 struct symbol *sym;
c906108c 8321
801e3a5b 8322 bv = blockvector_for_pc_sect (sal->pc, 0, &b, sal->symtab);
c906108c
SS
8323 if (bv != NULL)
8324 {
7f0df278 8325 sym = block_linkage_function (b);
c906108c
SS
8326 if (sym != NULL)
8327 {
8328 fixup_symbol_section (sym, sal->symtab->objfile);
714835d5 8329 sal->section = SYMBOL_OBJ_SECTION (sym);
c906108c
SS
8330 }
8331 else
8332 {
4a64f543
MS
8333 /* It really is worthwhile to have the section, so we'll
8334 just have to look harder. This case can be executed
8335 if we have line numbers but no functions (as can
8336 happen in assembly source). */
c906108c 8337
c5aa993b 8338 struct minimal_symbol *msym;
6c95b8df
PA
8339 struct cleanup *old_chain = save_current_space_and_thread ();
8340
8341 switch_to_program_space_and_thread (sal->pspace);
c906108c
SS
8342
8343 msym = lookup_minimal_symbol_by_pc (sal->pc);
8344 if (msym)
714835d5 8345 sal->section = SYMBOL_OBJ_SECTION (msym);
6c95b8df
PA
8346
8347 do_cleanups (old_chain);
c906108c
SS
8348 }
8349 }
8350 }
8351}
8352
8353void
fba45db2 8354break_command (char *arg, int from_tty)
c906108c 8355{
db107f19 8356 break_command_1 (arg, 0, from_tty);
c906108c
SS
8357}
8358
c906108c 8359void
fba45db2 8360tbreak_command (char *arg, int from_tty)
c906108c 8361{
db107f19 8362 break_command_1 (arg, BP_TEMPFLAG, from_tty);
c906108c
SS
8363}
8364
c906108c 8365static void
fba45db2 8366hbreak_command (char *arg, int from_tty)
c906108c 8367{
db107f19 8368 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
c906108c
SS
8369}
8370
8371static void
fba45db2 8372thbreak_command (char *arg, int from_tty)
c906108c 8373{
db107f19 8374 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
c906108c
SS
8375}
8376
8377static void
fba45db2 8378stop_command (char *arg, int from_tty)
c906108c 8379{
a3f17187 8380 printf_filtered (_("Specify the type of breakpoint to set.\n\
c906108c 8381Usage: stop in <function | address>\n\
a3f17187 8382 stop at <line>\n"));
c906108c
SS
8383}
8384
8385static void
fba45db2 8386stopin_command (char *arg, int from_tty)
c906108c
SS
8387{
8388 int badInput = 0;
8389
c5aa993b 8390 if (arg == (char *) NULL)
c906108c
SS
8391 badInput = 1;
8392 else if (*arg != '*')
8393 {
8394 char *argptr = arg;
8395 int hasColon = 0;
8396
4a64f543 8397 /* Look for a ':'. If this is a line number specification, then
53a5351d 8398 say it is bad, otherwise, it should be an address or
4a64f543 8399 function/method name. */
c906108c 8400 while (*argptr && !hasColon)
c5aa993b
JM
8401 {
8402 hasColon = (*argptr == ':');
8403 argptr++;
8404 }
c906108c
SS
8405
8406 if (hasColon)
c5aa993b 8407 badInput = (*argptr != ':'); /* Not a class::method */
c906108c 8408 else
c5aa993b 8409 badInput = isdigit (*arg); /* a simple line number */
c906108c
SS
8410 }
8411
8412 if (badInput)
a3f17187 8413 printf_filtered (_("Usage: stop in <function | address>\n"));
c906108c 8414 else
db107f19 8415 break_command_1 (arg, 0, from_tty);
c906108c
SS
8416}
8417
8418static void
fba45db2 8419stopat_command (char *arg, int from_tty)
c906108c
SS
8420{
8421 int badInput = 0;
8422
c5aa993b 8423 if (arg == (char *) NULL || *arg == '*') /* no line number */
c906108c
SS
8424 badInput = 1;
8425 else
8426 {
8427 char *argptr = arg;
8428 int hasColon = 0;
8429
4a64f543
MS
8430 /* Look for a ':'. If there is a '::' then get out, otherwise
8431 it is probably a line number. */
c906108c 8432 while (*argptr && !hasColon)
c5aa993b
JM
8433 {
8434 hasColon = (*argptr == ':');
8435 argptr++;
8436 }
c906108c
SS
8437
8438 if (hasColon)
c5aa993b 8439 badInput = (*argptr == ':'); /* we have class::method */
c906108c 8440 else
c5aa993b 8441 badInput = !isdigit (*arg); /* not a line number */
c906108c
SS
8442 }
8443
8444 if (badInput)
a3f17187 8445 printf_filtered (_("Usage: stop at <line>\n"));
c906108c 8446 else
db107f19 8447 break_command_1 (arg, 0, from_tty);
c906108c
SS
8448}
8449
f1310107
TJB
8450/* Implement the "breakpoint_hit" breakpoint_ops method for
8451 ranged breakpoints. */
8452
8453static int
8454breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
8455 struct address_space *aspace,
09ac7c10
TT
8456 CORE_ADDR bp_addr,
8457 const struct target_waitstatus *ws)
f1310107 8458{
09ac7c10
TT
8459 if (ws->kind != TARGET_WAITKIND_STOPPED
8460 || ws->value.sig != TARGET_SIGNAL_TRAP)
8461 return 0;
8462
f1310107
TJB
8463 return breakpoint_address_match_range (bl->pspace->aspace, bl->address,
8464 bl->length, aspace, bp_addr);
8465}
8466
8467/* Implement the "resources_needed" breakpoint_ops method for
8468 ranged breakpoints. */
8469
8470static int
8471resources_needed_ranged_breakpoint (const struct bp_location *bl)
8472{
8473 return target_ranged_break_num_registers ();
8474}
8475
8476/* Implement the "print_it" breakpoint_ops method for
8477 ranged breakpoints. */
8478
8479static enum print_stop_action
348d480f 8480print_it_ranged_breakpoint (bpstat bs)
f1310107 8481{
348d480f 8482 struct breakpoint *b = bs->breakpoint_at;
f1310107 8483 struct bp_location *bl = b->loc;
79a45e25 8484 struct ui_out *uiout = current_uiout;
f1310107
TJB
8485
8486 gdb_assert (b->type == bp_hardware_breakpoint);
8487
8488 /* Ranged breakpoints have only one location. */
8489 gdb_assert (bl && bl->next == NULL);
8490
8491 annotate_breakpoint (b->number);
8492 if (b->disposition == disp_del)
8493 ui_out_text (uiout, "\nTemporary ranged breakpoint ");
8494 else
8495 ui_out_text (uiout, "\nRanged breakpoint ");
8496 if (ui_out_is_mi_like_p (uiout))
8497 {
8498 ui_out_field_string (uiout, "reason",
8499 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
8500 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
8501 }
8502 ui_out_field_int (uiout, "bkptno", b->number);
8503 ui_out_text (uiout, ", ");
8504
8505 return PRINT_SRC_AND_LOC;
8506}
8507
8508/* Implement the "print_one" breakpoint_ops method for
8509 ranged breakpoints. */
8510
8511static void
8512print_one_ranged_breakpoint (struct breakpoint *b,
8513 struct bp_location **last_loc)
8514{
8515 struct bp_location *bl = b->loc;
8516 struct value_print_options opts;
79a45e25 8517 struct ui_out *uiout = current_uiout;
f1310107
TJB
8518
8519 /* Ranged breakpoints have only one location. */
8520 gdb_assert (bl && bl->next == NULL);
8521
8522 get_user_print_options (&opts);
8523
8524 if (opts.addressprint)
8525 /* We don't print the address range here, it will be printed later
8526 by print_one_detail_ranged_breakpoint. */
8527 ui_out_field_skip (uiout, "addr");
8528 annotate_field (5);
8529 print_breakpoint_location (b, bl);
8530 *last_loc = bl;
8531}
8532
8533/* Implement the "print_one_detail" breakpoint_ops method for
8534 ranged breakpoints. */
8535
8536static void
8537print_one_detail_ranged_breakpoint (const struct breakpoint *b,
8538 struct ui_out *uiout)
8539{
8540 CORE_ADDR address_start, address_end;
8541 struct bp_location *bl = b->loc;
8542 struct ui_stream *stb = ui_out_stream_new (uiout);
8543 struct cleanup *cleanup = make_cleanup_ui_out_stream_delete (stb);
8544
8545 gdb_assert (bl);
8546
8547 address_start = bl->address;
8548 address_end = address_start + bl->length - 1;
8549
8550 ui_out_text (uiout, "\taddress range: ");
8551 fprintf_unfiltered (stb->stream, "[%s, %s]",
8552 print_core_address (bl->gdbarch, address_start),
8553 print_core_address (bl->gdbarch, address_end));
8554 ui_out_field_stream (uiout, "addr", stb);
8555 ui_out_text (uiout, "\n");
8556
8557 do_cleanups (cleanup);
8558}
8559
8560/* Implement the "print_mention" breakpoint_ops method for
8561 ranged breakpoints. */
8562
8563static void
8564print_mention_ranged_breakpoint (struct breakpoint *b)
8565{
8566 struct bp_location *bl = b->loc;
79a45e25 8567 struct ui_out *uiout = current_uiout;
f1310107
TJB
8568
8569 gdb_assert (bl);
8570 gdb_assert (b->type == bp_hardware_breakpoint);
8571
8572 if (ui_out_is_mi_like_p (uiout))
8573 return;
8574
8575 printf_filtered (_("Hardware assisted ranged breakpoint %d from %s to %s."),
8576 b->number, paddress (bl->gdbarch, bl->address),
8577 paddress (bl->gdbarch, bl->address + bl->length - 1));
8578}
8579
8580/* Implement the "print_recreate" breakpoint_ops method for
8581 ranged breakpoints. */
8582
8583static void
8584print_recreate_ranged_breakpoint (struct breakpoint *b, struct ui_file *fp)
8585{
8586 fprintf_unfiltered (fp, "break-range %s, %s", b->addr_string,
8587 b->addr_string_range_end);
d9b3f62e 8588 print_recreate_thread (b, fp);
f1310107
TJB
8589}
8590
8591/* The breakpoint_ops structure to be used in ranged breakpoints. */
8592
2060206e 8593static struct breakpoint_ops ranged_breakpoint_ops;
f1310107
TJB
8594
8595/* Find the address where the end of the breakpoint range should be
8596 placed, given the SAL of the end of the range. This is so that if
8597 the user provides a line number, the end of the range is set to the
8598 last instruction of the given line. */
8599
8600static CORE_ADDR
8601find_breakpoint_range_end (struct symtab_and_line sal)
8602{
8603 CORE_ADDR end;
8604
8605 /* If the user provided a PC value, use it. Otherwise,
8606 find the address of the end of the given location. */
8607 if (sal.explicit_pc)
8608 end = sal.pc;
8609 else
8610 {
8611 int ret;
8612 CORE_ADDR start;
8613
8614 ret = find_line_pc_range (sal, &start, &end);
8615 if (!ret)
8616 error (_("Could not find location of the end of the range."));
8617
8618 /* find_line_pc_range returns the start of the next line. */
8619 end--;
8620 }
8621
8622 return end;
8623}
8624
8625/* Implement the "break-range" CLI command. */
8626
8627static void
8628break_range_command (char *arg, int from_tty)
8629{
8630 char *arg_start, *addr_string_start, *addr_string_end;
8631 struct linespec_result canonical_start, canonical_end;
8632 int bp_count, can_use_bp, length;
8633 CORE_ADDR end;
8634 struct breakpoint *b;
8635 struct symtab_and_line sal_start, sal_end;
f1310107 8636 struct cleanup *cleanup_bkpt;
f8eba3c6 8637 struct linespec_sals *lsal_start, *lsal_end;
f1310107
TJB
8638
8639 /* We don't support software ranged breakpoints. */
8640 if (target_ranged_break_num_registers () < 0)
8641 error (_("This target does not support hardware ranged breakpoints."));
8642
8643 bp_count = hw_breakpoint_used_count ();
8644 bp_count += target_ranged_break_num_registers ();
8645 can_use_bp = target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
8646 bp_count, 0);
8647 if (can_use_bp < 0)
8648 error (_("Hardware breakpoints used exceeds limit."));
8649
f8eba3c6 8650 arg = skip_spaces (arg);
f1310107
TJB
8651 if (arg == NULL || arg[0] == '\0')
8652 error(_("No address range specified."));
8653
f1310107
TJB
8654 init_linespec_result (&canonical_start);
8655
f8eba3c6
TT
8656 arg_start = arg;
8657 parse_breakpoint_sals (&arg, &canonical_start);
f1310107 8658
f8eba3c6 8659 cleanup_bkpt = make_cleanup_destroy_linespec_result (&canonical_start);
f1310107
TJB
8660
8661 if (arg[0] != ',')
8662 error (_("Too few arguments."));
f8eba3c6 8663 else if (VEC_empty (linespec_sals, canonical_start.sals))
f1310107 8664 error (_("Could not find location of the beginning of the range."));
f8eba3c6
TT
8665
8666 lsal_start = VEC_index (linespec_sals, canonical_start.sals, 0);
8667
8668 if (VEC_length (linespec_sals, canonical_start.sals) > 1
8669 || lsal_start->sals.nelts != 1)
f1310107
TJB
8670 error (_("Cannot create a ranged breakpoint with multiple locations."));
8671
f8eba3c6
TT
8672 sal_start = lsal_start->sals.sals[0];
8673 addr_string_start = savestring (arg_start, arg - arg_start);
8674 make_cleanup (xfree, addr_string_start);
f1310107
TJB
8675
8676 arg++; /* Skip the comma. */
f8eba3c6 8677 arg = skip_spaces (arg);
f1310107
TJB
8678
8679 /* Parse the end location. */
8680
f1310107
TJB
8681 init_linespec_result (&canonical_end);
8682 arg_start = arg;
8683
f8eba3c6 8684 /* We call decode_line_full directly here instead of using
f1310107
TJB
8685 parse_breakpoint_sals because we need to specify the start location's
8686 symtab and line as the default symtab and line for the end of the
8687 range. This makes it possible to have ranges like "foo.c:27, +14",
8688 where +14 means 14 lines from the start location. */
f8eba3c6
TT
8689 decode_line_full (&arg, DECODE_LINE_FUNFIRSTLINE,
8690 sal_start.symtab, sal_start.line,
8691 &canonical_end, NULL, NULL);
8692
8693 make_cleanup_destroy_linespec_result (&canonical_end);
f1310107 8694
f8eba3c6 8695 if (VEC_empty (linespec_sals, canonical_end.sals))
f1310107 8696 error (_("Could not find location of the end of the range."));
f8eba3c6
TT
8697
8698 lsal_end = VEC_index (linespec_sals, canonical_end.sals, 0);
8699 if (VEC_length (linespec_sals, canonical_end.sals) > 1
8700 || lsal_end->sals.nelts != 1)
f1310107
TJB
8701 error (_("Cannot create a ranged breakpoint with multiple locations."));
8702
f8eba3c6
TT
8703 sal_end = lsal_end->sals.sals[0];
8704 addr_string_end = savestring (arg_start, arg - arg_start);
8705 make_cleanup (xfree, addr_string_end);
f1310107
TJB
8706
8707 end = find_breakpoint_range_end (sal_end);
8708 if (sal_start.pc > end)
177b42fe 8709 error (_("Invalid address range, end precedes start."));
f1310107
TJB
8710
8711 length = end - sal_start.pc + 1;
8712 if (length < 0)
8713 /* Length overflowed. */
8714 error (_("Address range too large."));
8715 else if (length == 1)
8716 {
8717 /* This range is simple enough to be handled by
8718 the `hbreak' command. */
8719 hbreak_command (addr_string_start, 1);
8720
8721 do_cleanups (cleanup_bkpt);
8722
8723 return;
8724 }
8725
8726 /* Now set up the breakpoint. */
8727 b = set_raw_breakpoint (get_current_arch (), sal_start,
348d480f 8728 bp_hardware_breakpoint, &ranged_breakpoint_ops);
f1310107
TJB
8729 set_breakpoint_count (breakpoint_count + 1);
8730 b->number = breakpoint_count;
8731 b->disposition = disp_donttouch;
f8eba3c6
TT
8732 b->addr_string = xstrdup (addr_string_start);
8733 b->addr_string_range_end = xstrdup (addr_string_end);
f1310107
TJB
8734 b->loc->length = length;
8735
f8eba3c6 8736 do_cleanups (cleanup_bkpt);
f1310107
TJB
8737
8738 mention (b);
8d3788bd 8739 observer_notify_breakpoint_created (b);
f1310107
TJB
8740 update_global_location_list (1);
8741}
8742
4a64f543
MS
8743/* Return non-zero if EXP is verified as constant. Returned zero
8744 means EXP is variable. Also the constant detection may fail for
8745 some constant expressions and in such case still falsely return
8746 zero. */
65d79d4b
SDJ
8747static int
8748watchpoint_exp_is_const (const struct expression *exp)
8749{
8750 int i = exp->nelts;
8751
8752 while (i > 0)
8753 {
8754 int oplenp, argsp;
8755
8756 /* We are only interested in the descriptor of each element. */
8757 operator_length (exp, i, &oplenp, &argsp);
8758 i -= oplenp;
8759
8760 switch (exp->elts[i].opcode)
8761 {
8762 case BINOP_ADD:
8763 case BINOP_SUB:
8764 case BINOP_MUL:
8765 case BINOP_DIV:
8766 case BINOP_REM:
8767 case BINOP_MOD:
8768 case BINOP_LSH:
8769 case BINOP_RSH:
8770 case BINOP_LOGICAL_AND:
8771 case BINOP_LOGICAL_OR:
8772 case BINOP_BITWISE_AND:
8773 case BINOP_BITWISE_IOR:
8774 case BINOP_BITWISE_XOR:
8775 case BINOP_EQUAL:
8776 case BINOP_NOTEQUAL:
8777 case BINOP_LESS:
8778 case BINOP_GTR:
8779 case BINOP_LEQ:
8780 case BINOP_GEQ:
8781 case BINOP_REPEAT:
8782 case BINOP_COMMA:
8783 case BINOP_EXP:
8784 case BINOP_MIN:
8785 case BINOP_MAX:
8786 case BINOP_INTDIV:
8787 case BINOP_CONCAT:
8788 case BINOP_IN:
8789 case BINOP_RANGE:
8790 case TERNOP_COND:
8791 case TERNOP_SLICE:
8792 case TERNOP_SLICE_COUNT:
8793
8794 case OP_LONG:
8795 case OP_DOUBLE:
8796 case OP_DECFLOAT:
8797 case OP_LAST:
8798 case OP_COMPLEX:
8799 case OP_STRING:
8800 case OP_BITSTRING:
8801 case OP_ARRAY:
8802 case OP_TYPE:
8803 case OP_NAME:
8804 case OP_OBJC_NSSTRING:
8805
8806 case UNOP_NEG:
8807 case UNOP_LOGICAL_NOT:
8808 case UNOP_COMPLEMENT:
8809 case UNOP_ADDR:
8810 case UNOP_HIGH:
4a64f543
MS
8811 /* Unary, binary and ternary operators: We have to check
8812 their operands. If they are constant, then so is the
8813 result of that operation. For instance, if A and B are
8814 determined to be constants, then so is "A + B".
8815
8816 UNOP_IND is one exception to the rule above, because the
8817 value of *ADDR is not necessarily a constant, even when
8818 ADDR is. */
65d79d4b
SDJ
8819 break;
8820
8821 case OP_VAR_VALUE:
8822 /* Check whether the associated symbol is a constant.
4a64f543 8823
65d79d4b 8824 We use SYMBOL_CLASS rather than TYPE_CONST because it's
4a64f543
MS
8825 possible that a buggy compiler could mark a variable as
8826 constant even when it is not, and TYPE_CONST would return
8827 true in this case, while SYMBOL_CLASS wouldn't.
8828
8829 We also have to check for function symbols because they
8830 are always constant. */
65d79d4b
SDJ
8831 {
8832 struct symbol *s = exp->elts[i + 2].symbol;
8833
8834 if (SYMBOL_CLASS (s) != LOC_BLOCK
8835 && SYMBOL_CLASS (s) != LOC_CONST
8836 && SYMBOL_CLASS (s) != LOC_CONST_BYTES)
8837 return 0;
8838 break;
8839 }
8840
8841 /* The default action is to return 0 because we are using
8842 the optimistic approach here: If we don't know something,
8843 then it is not a constant. */
8844 default:
8845 return 0;
8846 }
8847 }
8848
8849 return 1;
8850}
8851
3a5c3e22
PA
8852/* Implement the "dtor" breakpoint_ops method for watchpoints. */
8853
8854static void
8855dtor_watchpoint (struct breakpoint *self)
8856{
8857 struct watchpoint *w = (struct watchpoint *) self;
8858
8859 xfree (w->cond_exp);
8860 xfree (w->exp);
8861 xfree (w->exp_string);
8862 xfree (w->exp_string_reparse);
8863 value_free (w->val);
8864
8865 base_breakpoint_ops.dtor (self);
8866}
8867
348d480f
PA
8868/* Implement the "re_set" breakpoint_ops method for watchpoints. */
8869
8870static void
8871re_set_watchpoint (struct breakpoint *b)
8872{
3a5c3e22
PA
8873 struct watchpoint *w = (struct watchpoint *) b;
8874
348d480f
PA
8875 /* Watchpoint can be either on expression using entirely global
8876 variables, or it can be on local variables.
8877
8878 Watchpoints of the first kind are never auto-deleted, and even
8879 persist across program restarts. Since they can use variables
8880 from shared libraries, we need to reparse expression as libraries
8881 are loaded and unloaded.
8882
8883 Watchpoints on local variables can also change meaning as result
8884 of solib event. For example, if a watchpoint uses both a local
8885 and a global variables in expression, it's a local watchpoint,
8886 but unloading of a shared library will make the expression
8887 invalid. This is not a very common use case, but we still
8888 re-evaluate expression, to avoid surprises to the user.
8889
8890 Note that for local watchpoints, we re-evaluate it only if
8891 watchpoints frame id is still valid. If it's not, it means the
8892 watchpoint is out of scope and will be deleted soon. In fact,
8893 I'm not sure we'll ever be called in this case.
8894
8895 If a local watchpoint's frame id is still valid, then
3a5c3e22 8896 w->exp_valid_block is likewise valid, and we can safely use it.
348d480f 8897
3a5c3e22
PA
8898 Don't do anything about disabled watchpoints, since they will be
8899 reevaluated again when enabled. */
8900 update_watchpoint (w, 1 /* reparse */);
348d480f
PA
8901}
8902
77b06cd7
TJB
8903/* Implement the "insert" breakpoint_ops method for hardware watchpoints. */
8904
8905static int
8906insert_watchpoint (struct bp_location *bl)
8907{
3a5c3e22
PA
8908 struct watchpoint *w = (struct watchpoint *) bl->owner;
8909 int length = w->exact ? 1 : bl->length;
e09342b5
TJB
8910
8911 return target_insert_watchpoint (bl->address, length, bl->watchpoint_type,
3a5c3e22 8912 w->cond_exp);
77b06cd7
TJB
8913}
8914
8915/* Implement the "remove" breakpoint_ops method for hardware watchpoints. */
8916
8917static int
8918remove_watchpoint (struct bp_location *bl)
8919{
3a5c3e22
PA
8920 struct watchpoint *w = (struct watchpoint *) bl->owner;
8921 int length = w->exact ? 1 : bl->length;
e09342b5
TJB
8922
8923 return target_remove_watchpoint (bl->address, length, bl->watchpoint_type,
3a5c3e22 8924 w->cond_exp);
e09342b5
TJB
8925}
8926
e09342b5 8927static int
348d480f 8928breakpoint_hit_watchpoint (const struct bp_location *bl,
09ac7c10
TT
8929 struct address_space *aspace, CORE_ADDR bp_addr,
8930 const struct target_waitstatus *ws)
e09342b5 8931{
348d480f 8932 struct breakpoint *b = bl->owner;
3a5c3e22 8933 struct watchpoint *w = (struct watchpoint *) b;
77b06cd7 8934
348d480f
PA
8935 /* Continuable hardware watchpoints are treated as non-existent if the
8936 reason we stopped wasn't a hardware watchpoint (we didn't stop on
8937 some data address). Otherwise gdb won't stop on a break instruction
8938 in the code (not from a breakpoint) when a hardware watchpoint has
8939 been defined. Also skip watchpoints which we know did not trigger
8940 (did not match the data address). */
8941 if (is_hardware_watchpoint (b)
3a5c3e22 8942 && w->watchpoint_triggered == watch_triggered_no)
348d480f 8943 return 0;
9c06b0b4 8944
348d480f 8945 return 1;
9c06b0b4
TJB
8946}
8947
348d480f
PA
8948static void
8949check_status_watchpoint (bpstat bs)
9c06b0b4 8950{
348d480f 8951 gdb_assert (is_watchpoint (bs->breakpoint_at));
9c06b0b4 8952
348d480f 8953 bpstat_check_watchpoint (bs);
9c06b0b4
TJB
8954}
8955
8956/* Implement the "resources_needed" breakpoint_ops method for
348d480f 8957 hardware watchpoints. */
9c06b0b4
TJB
8958
8959static int
348d480f 8960resources_needed_watchpoint (const struct bp_location *bl)
9c06b0b4 8961{
3a5c3e22
PA
8962 struct watchpoint *w = (struct watchpoint *) bl->owner;
8963 int length = w->exact? 1 : bl->length;
348d480f
PA
8964
8965 return target_region_ok_for_hw_watchpoint (bl->address, length);
9c06b0b4
TJB
8966}
8967
8968/* Implement the "works_in_software_mode" breakpoint_ops method for
348d480f 8969 hardware watchpoints. */
9c06b0b4
TJB
8970
8971static int
348d480f 8972works_in_software_mode_watchpoint (const struct breakpoint *b)
9c06b0b4 8973{
efa80663
PA
8974 /* Read and access watchpoints only work with hardware support. */
8975 return b->type == bp_watchpoint || b->type == bp_hardware_watchpoint;
9c06b0b4
TJB
8976}
8977
9c06b0b4 8978static enum print_stop_action
348d480f 8979print_it_watchpoint (bpstat bs)
9c06b0b4 8980{
348d480f
PA
8981 struct cleanup *old_chain;
8982 struct breakpoint *b;
8983 const struct bp_location *bl;
8984 struct ui_stream *stb;
8985 enum print_stop_action result;
3a5c3e22 8986 struct watchpoint *w;
79a45e25 8987 struct ui_out *uiout = current_uiout;
348d480f
PA
8988
8989 gdb_assert (bs->bp_location_at != NULL);
8990
8991 bl = bs->bp_location_at;
8992 b = bs->breakpoint_at;
3a5c3e22 8993 w = (struct watchpoint *) b;
348d480f
PA
8994
8995 stb = ui_out_stream_new (uiout);
8996 old_chain = make_cleanup_ui_out_stream_delete (stb);
9c06b0b4
TJB
8997
8998 switch (b->type)
8999 {
348d480f 9000 case bp_watchpoint:
9c06b0b4
TJB
9001 case bp_hardware_watchpoint:
9002 annotate_watchpoint (b->number);
9003 if (ui_out_is_mi_like_p (uiout))
9004 ui_out_field_string
9005 (uiout, "reason",
9006 async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
348d480f
PA
9007 mention (b);
9008 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
9009 ui_out_text (uiout, "\nOld value = ");
9010 watchpoint_value_print (bs->old_val, stb->stream);
9011 ui_out_field_stream (uiout, "old", stb);
9012 ui_out_text (uiout, "\nNew value = ");
3a5c3e22 9013 watchpoint_value_print (w->val, stb->stream);
348d480f
PA
9014 ui_out_field_stream (uiout, "new", stb);
9015 ui_out_text (uiout, "\n");
9016 /* More than one watchpoint may have been triggered. */
9017 result = PRINT_UNKNOWN;
9c06b0b4
TJB
9018 break;
9019
9020 case bp_read_watchpoint:
9021 if (ui_out_is_mi_like_p (uiout))
9022 ui_out_field_string
9023 (uiout, "reason",
9024 async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
348d480f
PA
9025 mention (b);
9026 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
9027 ui_out_text (uiout, "\nValue = ");
3a5c3e22 9028 watchpoint_value_print (w->val, stb->stream);
348d480f
PA
9029 ui_out_field_stream (uiout, "value", stb);
9030 ui_out_text (uiout, "\n");
9031 result = PRINT_UNKNOWN;
9c06b0b4
TJB
9032 break;
9033
9034 case bp_access_watchpoint:
348d480f
PA
9035 if (bs->old_val != NULL)
9036 {
9037 annotate_watchpoint (b->number);
9038 if (ui_out_is_mi_like_p (uiout))
9039 ui_out_field_string
9040 (uiout, "reason",
9041 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
9042 mention (b);
9043 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
9044 ui_out_text (uiout, "\nOld value = ");
9045 watchpoint_value_print (bs->old_val, stb->stream);
9046 ui_out_field_stream (uiout, "old", stb);
9047 ui_out_text (uiout, "\nNew value = ");
9048 }
9049 else
9050 {
9051 mention (b);
9052 if (ui_out_is_mi_like_p (uiout))
9053 ui_out_field_string
9054 (uiout, "reason",
9055 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
9056 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
9057 ui_out_text (uiout, "\nValue = ");
9058 }
3a5c3e22 9059 watchpoint_value_print (w->val, stb->stream);
348d480f
PA
9060 ui_out_field_stream (uiout, "new", stb);
9061 ui_out_text (uiout, "\n");
9062 result = PRINT_UNKNOWN;
9c06b0b4
TJB
9063 break;
9064 default:
348d480f 9065 result = PRINT_UNKNOWN;
9c06b0b4
TJB
9066 }
9067
348d480f
PA
9068 do_cleanups (old_chain);
9069 return result;
9070}
9071
9072/* Implement the "print_mention" breakpoint_ops method for hardware
9073 watchpoints. */
9074
9075static void
9076print_mention_watchpoint (struct breakpoint *b)
9077{
9078 struct cleanup *ui_out_chain;
3a5c3e22 9079 struct watchpoint *w = (struct watchpoint *) b;
79a45e25 9080 struct ui_out *uiout = current_uiout;
348d480f
PA
9081
9082 switch (b->type)
9083 {
9084 case bp_watchpoint:
9085 ui_out_text (uiout, "Watchpoint ");
9086 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
9087 break;
9088 case bp_hardware_watchpoint:
9089 ui_out_text (uiout, "Hardware watchpoint ");
9090 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
9091 break;
9092 case bp_read_watchpoint:
9093 ui_out_text (uiout, "Hardware read watchpoint ");
9094 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt");
9095 break;
9096 case bp_access_watchpoint:
9097 ui_out_text (uiout, "Hardware access (read/write) watchpoint ");
9098 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt");
9099 break;
9100 default:
9101 internal_error (__FILE__, __LINE__,
9102 _("Invalid hardware watchpoint type."));
9103 }
9104
9105 ui_out_field_int (uiout, "number", b->number);
9106 ui_out_text (uiout, ": ");
3a5c3e22 9107 ui_out_field_string (uiout, "exp", w->exp_string);
348d480f
PA
9108 do_cleanups (ui_out_chain);
9109}
9110
9111/* Implement the "print_recreate" breakpoint_ops method for
9112 watchpoints. */
9113
9114static void
9115print_recreate_watchpoint (struct breakpoint *b, struct ui_file *fp)
9116{
3a5c3e22
PA
9117 struct watchpoint *w = (struct watchpoint *) b;
9118
348d480f
PA
9119 switch (b->type)
9120 {
9121 case bp_watchpoint:
9122 case bp_hardware_watchpoint:
9123 fprintf_unfiltered (fp, "watch");
9124 break;
9125 case bp_read_watchpoint:
9126 fprintf_unfiltered (fp, "rwatch");
9127 break;
9128 case bp_access_watchpoint:
9129 fprintf_unfiltered (fp, "awatch");
9130 break;
9131 default:
9132 internal_error (__FILE__, __LINE__,
9133 _("Invalid watchpoint type."));
9134 }
9135
3a5c3e22 9136 fprintf_unfiltered (fp, " %s", w->exp_string);
d9b3f62e 9137 print_recreate_thread (b, fp);
348d480f
PA
9138}
9139
9140/* The breakpoint_ops structure to be used in hardware watchpoints. */
9141
2060206e 9142static struct breakpoint_ops watchpoint_breakpoint_ops;
348d480f
PA
9143
9144/* Implement the "insert" breakpoint_ops method for
9145 masked hardware watchpoints. */
9146
9147static int
9148insert_masked_watchpoint (struct bp_location *bl)
9149{
3a5c3e22
PA
9150 struct watchpoint *w = (struct watchpoint *) bl->owner;
9151
9152 return target_insert_mask_watchpoint (bl->address, w->hw_wp_mask,
348d480f
PA
9153 bl->watchpoint_type);
9154}
9155
9156/* Implement the "remove" breakpoint_ops method for
9157 masked hardware watchpoints. */
9158
9159static int
9160remove_masked_watchpoint (struct bp_location *bl)
9161{
3a5c3e22
PA
9162 struct watchpoint *w = (struct watchpoint *) bl->owner;
9163
9164 return target_remove_mask_watchpoint (bl->address, w->hw_wp_mask,
348d480f
PA
9165 bl->watchpoint_type);
9166}
9167
9168/* Implement the "resources_needed" breakpoint_ops method for
9169 masked hardware watchpoints. */
9170
9171static int
9172resources_needed_masked_watchpoint (const struct bp_location *bl)
9173{
3a5c3e22
PA
9174 struct watchpoint *w = (struct watchpoint *) bl->owner;
9175
9176 return target_masked_watch_num_registers (bl->address, w->hw_wp_mask);
348d480f
PA
9177}
9178
9179/* Implement the "works_in_software_mode" breakpoint_ops method for
9180 masked hardware watchpoints. */
9181
9182static int
9183works_in_software_mode_masked_watchpoint (const struct breakpoint *b)
9184{
9185 return 0;
9186}
9187
9188/* Implement the "print_it" breakpoint_ops method for
9189 masked hardware watchpoints. */
9190
9191static enum print_stop_action
9192print_it_masked_watchpoint (bpstat bs)
9193{
9194 struct breakpoint *b = bs->breakpoint_at;
79a45e25 9195 struct ui_out *uiout = current_uiout;
348d480f
PA
9196
9197 /* Masked watchpoints have only one location. */
9198 gdb_assert (b->loc && b->loc->next == NULL);
9199
9200 switch (b->type)
9201 {
9202 case bp_hardware_watchpoint:
9203 annotate_watchpoint (b->number);
9204 if (ui_out_is_mi_like_p (uiout))
9205 ui_out_field_string
9206 (uiout, "reason",
9207 async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
9208 break;
9209
9210 case bp_read_watchpoint:
9211 if (ui_out_is_mi_like_p (uiout))
9212 ui_out_field_string
9213 (uiout, "reason",
9214 async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
9215 break;
9216
9217 case bp_access_watchpoint:
9218 if (ui_out_is_mi_like_p (uiout))
9219 ui_out_field_string
9220 (uiout, "reason",
9221 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
9222 break;
9223 default:
9224 internal_error (__FILE__, __LINE__,
9225 _("Invalid hardware watchpoint type."));
9226 }
9227
9228 mention (b);
9c06b0b4
TJB
9229 ui_out_text (uiout, _("\n\
9230Check the underlying instruction at PC for the memory\n\
9231address and value which triggered this watchpoint.\n"));
9232 ui_out_text (uiout, "\n");
9233
9234 /* More than one watchpoint may have been triggered. */
9235 return PRINT_UNKNOWN;
9236}
9237
9238/* Implement the "print_one_detail" breakpoint_ops method for
9239 masked hardware watchpoints. */
9240
9241static void
9242print_one_detail_masked_watchpoint (const struct breakpoint *b,
9243 struct ui_out *uiout)
9244{
3a5c3e22
PA
9245 struct watchpoint *w = (struct watchpoint *) b;
9246
9c06b0b4
TJB
9247 /* Masked watchpoints have only one location. */
9248 gdb_assert (b->loc && b->loc->next == NULL);
9249
9250 ui_out_text (uiout, "\tmask ");
3a5c3e22 9251 ui_out_field_core_addr (uiout, "mask", b->loc->gdbarch, w->hw_wp_mask);
9c06b0b4
TJB
9252 ui_out_text (uiout, "\n");
9253}
9254
9255/* Implement the "print_mention" breakpoint_ops method for
9256 masked hardware watchpoints. */
9257
9258static void
9259print_mention_masked_watchpoint (struct breakpoint *b)
9260{
3a5c3e22 9261 struct watchpoint *w = (struct watchpoint *) b;
79a45e25 9262 struct ui_out *uiout = current_uiout;
9c06b0b4
TJB
9263 struct cleanup *ui_out_chain;
9264
9265 switch (b->type)
9266 {
9267 case bp_hardware_watchpoint:
9268 ui_out_text (uiout, "Masked hardware watchpoint ");
9269 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
9270 break;
9271 case bp_read_watchpoint:
9272 ui_out_text (uiout, "Masked hardware read watchpoint ");
9273 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt");
9274 break;
9275 case bp_access_watchpoint:
9276 ui_out_text (uiout, "Masked hardware access (read/write) watchpoint ");
9277 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt");
9278 break;
9279 default:
9280 internal_error (__FILE__, __LINE__,
9281 _("Invalid hardware watchpoint type."));
9282 }
9283
9284 ui_out_field_int (uiout, "number", b->number);
9285 ui_out_text (uiout, ": ");
3a5c3e22 9286 ui_out_field_string (uiout, "exp", w->exp_string);
9c06b0b4
TJB
9287 do_cleanups (ui_out_chain);
9288}
9289
9290/* Implement the "print_recreate" breakpoint_ops method for
9291 masked hardware watchpoints. */
9292
9293static void
9294print_recreate_masked_watchpoint (struct breakpoint *b, struct ui_file *fp)
9295{
3a5c3e22 9296 struct watchpoint *w = (struct watchpoint *) b;
9c06b0b4
TJB
9297 char tmp[40];
9298
9299 switch (b->type)
9300 {
9301 case bp_hardware_watchpoint:
9302 fprintf_unfiltered (fp, "watch");
9303 break;
9304 case bp_read_watchpoint:
9305 fprintf_unfiltered (fp, "rwatch");
9306 break;
9307 case bp_access_watchpoint:
9308 fprintf_unfiltered (fp, "awatch");
9309 break;
9310 default:
9311 internal_error (__FILE__, __LINE__,
9312 _("Invalid hardware watchpoint type."));
9313 }
9314
3a5c3e22
PA
9315 sprintf_vma (tmp, w->hw_wp_mask);
9316 fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string, tmp);
d9b3f62e 9317 print_recreate_thread (b, fp);
9c06b0b4
TJB
9318}
9319
9320/* The breakpoint_ops structure to be used in masked hardware watchpoints. */
9321
2060206e 9322static struct breakpoint_ops masked_watchpoint_breakpoint_ops;
9c06b0b4
TJB
9323
9324/* Tell whether the given watchpoint is a masked hardware watchpoint. */
9325
9326static int
9327is_masked_watchpoint (const struct breakpoint *b)
9328{
9329 return b->ops == &masked_watchpoint_breakpoint_ops;
9330}
9331
53a5351d
JM
9332/* accessflag: hw_write: watch write,
9333 hw_read: watch read,
9334 hw_access: watch access (read or write) */
c906108c 9335static void
84f4c1fe
PM
9336watch_command_1 (char *arg, int accessflag, int from_tty,
9337 int just_location, int internal)
c906108c 9338{
a9634178 9339 volatile struct gdb_exception e;
d983da9c 9340 struct breakpoint *b, *scope_breakpoint = NULL;
c906108c 9341 struct expression *exp;
60e1c644 9342 struct block *exp_valid_block = NULL, *cond_exp_valid_block = NULL;
a1442452 9343 struct value *val, *mark, *result;
c906108c 9344 struct frame_info *frame;
c906108c
SS
9345 char *exp_start = NULL;
9346 char *exp_end = NULL;
9c06b0b4
TJB
9347 char *tok, *end_tok;
9348 int toklen = -1;
c906108c
SS
9349 char *cond_start = NULL;
9350 char *cond_end = NULL;
c906108c 9351 enum bptype bp_type;
37e4754d 9352 int thread = -1;
0cf6dd15 9353 int pc = 0;
9c06b0b4
TJB
9354 /* Flag to indicate whether we are going to use masks for
9355 the hardware watchpoint. */
9356 int use_mask = 0;
9357 CORE_ADDR mask = 0;
3a5c3e22 9358 struct watchpoint *w;
c906108c 9359
37e4754d
LM
9360 /* Make sure that we actually have parameters to parse. */
9361 if (arg != NULL && arg[0] != '\0')
9362 {
9c06b0b4 9363 char *value_start;
37e4754d 9364
9c06b0b4
TJB
9365 /* Look for "parameter value" pairs at the end
9366 of the arguments string. */
9367 for (tok = arg + strlen (arg) - 1; tok > arg; tok--)
9368 {
9369 /* Skip whitespace at the end of the argument list. */
9370 while (tok > arg && (*tok == ' ' || *tok == '\t'))
9371 tok--;
9372
9373 /* Find the beginning of the last token.
9374 This is the value of the parameter. */
9375 while (tok > arg && (*tok != ' ' && *tok != '\t'))
9376 tok--;
9377 value_start = tok + 1;
9378
9379 /* Skip whitespace. */
9380 while (tok > arg && (*tok == ' ' || *tok == '\t'))
9381 tok--;
9382
9383 end_tok = tok;
9384
9385 /* Find the beginning of the second to last token.
9386 This is the parameter itself. */
9387 while (tok > arg && (*tok != ' ' && *tok != '\t'))
9388 tok--;
9389 tok++;
9390 toklen = end_tok - tok + 1;
9391
9392 if (toklen == 6 && !strncmp (tok, "thread", 6))
9393 {
9394 /* At this point we've found a "thread" token, which means
9395 the user is trying to set a watchpoint that triggers
9396 only in a specific thread. */
9397 char *endp;
37e4754d 9398
9c06b0b4
TJB
9399 if (thread != -1)
9400 error(_("You can specify only one thread."));
37e4754d 9401
9c06b0b4
TJB
9402 /* Extract the thread ID from the next token. */
9403 thread = strtol (value_start, &endp, 0);
37e4754d 9404
9c06b0b4
TJB
9405 /* Check if the user provided a valid numeric value for the
9406 thread ID. */
9407 if (*endp != ' ' && *endp != '\t' && *endp != '\0')
9408 error (_("Invalid thread ID specification %s."), value_start);
9409
9410 /* Check if the thread actually exists. */
9411 if (!valid_thread_id (thread))
9412 error (_("Unknown thread %d."), thread);
9413 }
9414 else if (toklen == 4 && !strncmp (tok, "mask", 4))
9415 {
9416 /* We've found a "mask" token, which means the user wants to
9417 create a hardware watchpoint that is going to have the mask
9418 facility. */
9419 struct value *mask_value, *mark;
37e4754d 9420
9c06b0b4
TJB
9421 if (use_mask)
9422 error(_("You can specify only one mask."));
37e4754d 9423
9c06b0b4 9424 use_mask = just_location = 1;
37e4754d 9425
9c06b0b4
TJB
9426 mark = value_mark ();
9427 mask_value = parse_to_comma_and_eval (&value_start);
9428 mask = value_as_address (mask_value);
9429 value_free_to_mark (mark);
9430 }
9431 else
9432 /* We didn't recognize what we found. We should stop here. */
9433 break;
37e4754d 9434
9c06b0b4
TJB
9435 /* Truncate the string and get rid of the "parameter value" pair before
9436 the arguments string is parsed by the parse_exp_1 function. */
9437 *tok = '\0';
9438 }
37e4754d
LM
9439 }
9440
9441 /* Parse the rest of the arguments. */
c906108c
SS
9442 innermost_block = NULL;
9443 exp_start = arg;
9444 exp = parse_exp_1 (&arg, 0, 0);
9445 exp_end = arg;
fa8a61dc
TT
9446 /* Remove trailing whitespace from the expression before saving it.
9447 This makes the eventual display of the expression string a bit
9448 prettier. */
9449 while (exp_end > exp_start && (exp_end[-1] == ' ' || exp_end[-1] == '\t'))
9450 --exp_end;
9451
65d79d4b
SDJ
9452 /* Checking if the expression is not constant. */
9453 if (watchpoint_exp_is_const (exp))
9454 {
9455 int len;
9456
9457 len = exp_end - exp_start;
9458 while (len > 0 && isspace (exp_start[len - 1]))
9459 len--;
9460 error (_("Cannot watch constant value `%.*s'."), len, exp_start);
9461 }
9462
c906108c
SS
9463 exp_valid_block = innermost_block;
9464 mark = value_mark ();
a1442452 9465 fetch_subexp_value (exp, &pc, &val, &result, NULL);
06a64a0b
TT
9466
9467 if (just_location)
9468 {
9c06b0b4
TJB
9469 int ret;
9470
06a64a0b 9471 exp_valid_block = NULL;
a1442452 9472 val = value_addr (result);
06a64a0b
TT
9473 release_value (val);
9474 value_free_to_mark (mark);
9c06b0b4
TJB
9475
9476 if (use_mask)
9477 {
9478 ret = target_masked_watch_num_registers (value_as_address (val),
9479 mask);
9480 if (ret == -1)
9481 error (_("This target does not support masked watchpoints."));
9482 else if (ret == -2)
9483 error (_("Invalid mask or memory region."));
9484 }
06a64a0b
TT
9485 }
9486 else if (val != NULL)
fa4727a6 9487 release_value (val);
c906108c 9488
e9cafbcc
TT
9489 tok = skip_spaces (arg);
9490 end_tok = skip_to_space (tok);
c906108c
SS
9491
9492 toklen = end_tok - tok;
9493 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
9494 {
2d134ed3
PA
9495 struct expression *cond;
9496
60e1c644 9497 innermost_block = NULL;
c906108c
SS
9498 tok = cond_start = end_tok + 1;
9499 cond = parse_exp_1 (&tok, 0, 0);
60e1c644
PA
9500
9501 /* The watchpoint expression may not be local, but the condition
9502 may still be. E.g.: `watch global if local > 0'. */
9503 cond_exp_valid_block = innermost_block;
9504
2d134ed3 9505 xfree (cond);
c906108c
SS
9506 cond_end = tok;
9507 }
9508 if (*tok)
8a3fe4f8 9509 error (_("Junk at end of command."));
c906108c 9510
53a5351d 9511 if (accessflag == hw_read)
c5aa993b 9512 bp_type = bp_read_watchpoint;
53a5351d 9513 else if (accessflag == hw_access)
c5aa993b
JM
9514 bp_type = bp_access_watchpoint;
9515 else
9516 bp_type = bp_hardware_watchpoint;
c906108c 9517
d983da9c 9518 frame = block_innermost_frame (exp_valid_block);
d983da9c
DJ
9519
9520 /* If the expression is "local", then set up a "watchpoint scope"
9521 breakpoint at the point where we've left the scope of the watchpoint
9522 expression. Create the scope breakpoint before the watchpoint, so
9523 that we will encounter it first in bpstat_stop_status. */
60e1c644 9524 if (exp_valid_block && frame)
d983da9c 9525 {
edb3359d
DJ
9526 if (frame_id_p (frame_unwind_caller_id (frame)))
9527 {
9528 scope_breakpoint
a6d9a66e
UW
9529 = create_internal_breakpoint (frame_unwind_caller_arch (frame),
9530 frame_unwind_caller_pc (frame),
06edf0c0
PA
9531 bp_watchpoint_scope,
9532 &momentary_breakpoint_ops);
d983da9c 9533
edb3359d 9534 scope_breakpoint->enable_state = bp_enabled;
d983da9c 9535
edb3359d
DJ
9536 /* Automatically delete the breakpoint when it hits. */
9537 scope_breakpoint->disposition = disp_del;
d983da9c 9538
edb3359d
DJ
9539 /* Only break in the proper frame (help with recursion). */
9540 scope_breakpoint->frame_id = frame_unwind_caller_id (frame);
d983da9c 9541
edb3359d 9542 /* Set the address at which we will stop. */
a6d9a66e
UW
9543 scope_breakpoint->loc->gdbarch
9544 = frame_unwind_caller_arch (frame);
edb3359d
DJ
9545 scope_breakpoint->loc->requested_address
9546 = frame_unwind_caller_pc (frame);
9547 scope_breakpoint->loc->address
a6d9a66e
UW
9548 = adjust_breakpoint_address (scope_breakpoint->loc->gdbarch,
9549 scope_breakpoint->loc->requested_address,
edb3359d
DJ
9550 scope_breakpoint->type);
9551 }
d983da9c
DJ
9552 }
9553
c906108c 9554 /* Now set up the breakpoint. */
3a5c3e22
PA
9555
9556 w = XCNEW (struct watchpoint);
9557 b = &w->base;
348d480f 9558 if (use_mask)
3a5c3e22
PA
9559 init_raw_breakpoint_without_location (b, NULL, bp_type,
9560 &masked_watchpoint_breakpoint_ops);
348d480f 9561 else
3a5c3e22
PA
9562 init_raw_breakpoint_without_location (b, NULL, bp_type,
9563 &watchpoint_breakpoint_ops);
37e4754d 9564 b->thread = thread;
b5de0fa7 9565 b->disposition = disp_donttouch;
348d480f 9566 b->pspace = current_program_space;
3a5c3e22
PA
9567 w->exp = exp;
9568 w->exp_valid_block = exp_valid_block;
9569 w->cond_exp_valid_block = cond_exp_valid_block;
06a64a0b
TT
9570 if (just_location)
9571 {
9572 struct type *t = value_type (val);
9573 CORE_ADDR addr = value_as_address (val);
9574 char *name;
9575
9576 t = check_typedef (TYPE_TARGET_TYPE (check_typedef (t)));
9577 name = type_to_string (t);
9578
3a5c3e22 9579 w->exp_string_reparse = xstrprintf ("* (%s *) %s", name,
d63d0675 9580 core_addr_to_string (addr));
06a64a0b
TT
9581 xfree (name);
9582
3a5c3e22 9583 w->exp_string = xstrprintf ("-location %.*s",
d63d0675
JK
9584 (int) (exp_end - exp_start), exp_start);
9585
06a64a0b
TT
9586 /* The above expression is in C. */
9587 b->language = language_c;
9588 }
9589 else
3a5c3e22 9590 w->exp_string = savestring (exp_start, exp_end - exp_start);
9c06b0b4
TJB
9591
9592 if (use_mask)
9593 {
3a5c3e22 9594 w->hw_wp_mask = mask;
9c06b0b4
TJB
9595 }
9596 else
9597 {
3a5c3e22
PA
9598 w->val = val;
9599 w->val_valid = 1;
9c06b0b4 9600 }
77b06cd7 9601
c906108c
SS
9602 if (cond_start)
9603 b->cond_string = savestring (cond_start, cond_end - cond_start);
9604 else
9605 b->cond_string = 0;
c5aa993b 9606
c906108c 9607 if (frame)
f6bc2008 9608 {
3a5c3e22
PA
9609 w->watchpoint_frame = get_frame_id (frame);
9610 w->watchpoint_thread = inferior_ptid;
f6bc2008 9611 }
c906108c 9612 else
f6bc2008 9613 {
3a5c3e22
PA
9614 w->watchpoint_frame = null_frame_id;
9615 w->watchpoint_thread = null_ptid;
f6bc2008 9616 }
c906108c 9617
d983da9c 9618 if (scope_breakpoint != NULL)
c906108c 9619 {
d983da9c
DJ
9620 /* The scope breakpoint is related to the watchpoint. We will
9621 need to act on them together. */
9622 b->related_breakpoint = scope_breakpoint;
9623 scope_breakpoint->related_breakpoint = b;
c906108c 9624 }
d983da9c 9625
06a64a0b
TT
9626 if (!just_location)
9627 value_free_to_mark (mark);
2d134ed3 9628
a9634178
TJB
9629 TRY_CATCH (e, RETURN_MASK_ALL)
9630 {
9631 /* Finally update the new watchpoint. This creates the locations
9632 that should be inserted. */
3a5c3e22 9633 update_watchpoint (w, 1);
a9634178
TJB
9634 }
9635 if (e.reason < 0)
9636 {
9637 delete_breakpoint (b);
9638 throw_exception (e);
9639 }
9640
3ea46bff 9641 install_breakpoint (internal, b, 1);
c906108c
SS
9642}
9643
e09342b5 9644/* Return count of debug registers needed to watch the given expression.
e09342b5 9645 If the watchpoint cannot be handled in hardware return zero. */
c906108c 9646
c906108c 9647static int
a9634178 9648can_use_hardware_watchpoint (struct value *v)
c906108c
SS
9649{
9650 int found_memory_cnt = 0;
2e70b7b9 9651 struct value *head = v;
c906108c
SS
9652
9653 /* Did the user specifically forbid us to use hardware watchpoints? */
c5aa993b 9654 if (!can_use_hw_watchpoints)
c906108c 9655 return 0;
c5aa993b 9656
5c44784c
JM
9657 /* Make sure that the value of the expression depends only upon
9658 memory contents, and values computed from them within GDB. If we
9659 find any register references or function calls, we can't use a
9660 hardware watchpoint.
9661
9662 The idea here is that evaluating an expression generates a series
9663 of values, one holding the value of every subexpression. (The
9664 expression a*b+c has five subexpressions: a, b, a*b, c, and
9665 a*b+c.) GDB's values hold almost enough information to establish
9666 the criteria given above --- they identify memory lvalues,
9667 register lvalues, computed values, etcetera. So we can evaluate
9668 the expression, and then scan the chain of values that leaves
9669 behind to decide whether we can detect any possible change to the
9670 expression's final value using only hardware watchpoints.
9671
9672 However, I don't think that the values returned by inferior
9673 function calls are special in any way. So this function may not
9674 notice that an expression involving an inferior function call
9675 can't be watched with hardware watchpoints. FIXME. */
17cf0ecd 9676 for (; v; v = value_next (v))
c906108c 9677 {
5c44784c 9678 if (VALUE_LVAL (v) == lval_memory)
c906108c 9679 {
8464be76
DJ
9680 if (v != head && value_lazy (v))
9681 /* A lazy memory lvalue in the chain is one that GDB never
9682 needed to fetch; we either just used its address (e.g.,
9683 `a' in `a.b') or we never needed it at all (e.g., `a'
9684 in `a,b'). This doesn't apply to HEAD; if that is
9685 lazy then it was not readable, but watch it anyway. */
5c44784c 9686 ;
53a5351d 9687 else
5c44784c
JM
9688 {
9689 /* Ahh, memory we actually used! Check if we can cover
9690 it with hardware watchpoints. */
df407dfe 9691 struct type *vtype = check_typedef (value_type (v));
2e70b7b9
MS
9692
9693 /* We only watch structs and arrays if user asked for it
9694 explicitly, never if they just happen to appear in a
9695 middle of some value chain. */
9696 if (v == head
9697 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
9698 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
9699 {
42ae5230 9700 CORE_ADDR vaddr = value_address (v);
e09342b5
TJB
9701 int len;
9702 int num_regs;
9703
a9634178 9704 len = (target_exact_watchpoints
e09342b5
TJB
9705 && is_scalar_type_recursive (vtype))?
9706 1 : TYPE_LENGTH (value_type (v));
2e70b7b9 9707
e09342b5
TJB
9708 num_regs = target_region_ok_for_hw_watchpoint (vaddr, len);
9709 if (!num_regs)
2e70b7b9
MS
9710 return 0;
9711 else
e09342b5 9712 found_memory_cnt += num_regs;
2e70b7b9 9713 }
5c44784c 9714 }
c5aa993b 9715 }
5086187c
AC
9716 else if (VALUE_LVAL (v) != not_lval
9717 && deprecated_value_modifiable (v) == 0)
38b6c3b3 9718 return 0; /* These are values from the history (e.g., $1). */
5086187c 9719 else if (VALUE_LVAL (v) == lval_register)
38b6c3b3 9720 return 0; /* Cannot watch a register with a HW watchpoint. */
c906108c
SS
9721 }
9722
9723 /* The expression itself looks suitable for using a hardware
9724 watchpoint, but give the target machine a chance to reject it. */
9725 return found_memory_cnt;
9726}
9727
8b93c638 9728void
84f4c1fe 9729watch_command_wrapper (char *arg, int from_tty, int internal)
8b93c638 9730{
84f4c1fe 9731 watch_command_1 (arg, hw_write, from_tty, 0, internal);
06a64a0b
TT
9732}
9733
9734/* A helper function that looks for an argument at the start of a
9735 string. The argument must also either be at the end of the string,
9736 or be followed by whitespace. Returns 1 if it finds the argument,
9737 0 otherwise. If the argument is found, it updates *STR. */
9738
9739static int
9740check_for_argument (char **str, char *arg, int arg_len)
9741{
9742 if (strncmp (*str, arg, arg_len) == 0
9743 && ((*str)[arg_len] == '\0' || isspace ((*str)[arg_len])))
9744 {
9745 *str += arg_len;
9746 return 1;
9747 }
9748 return 0;
9749}
9750
9751/* A helper function that looks for the "-location" argument and then
9752 calls watch_command_1. */
9753
9754static void
9755watch_maybe_just_location (char *arg, int accessflag, int from_tty)
9756{
9757 int just_location = 0;
9758
9759 if (arg
9760 && (check_for_argument (&arg, "-location", sizeof ("-location") - 1)
9761 || check_for_argument (&arg, "-l", sizeof ("-l") - 1)))
9762 {
e9cafbcc 9763 arg = skip_spaces (arg);
06a64a0b
TT
9764 just_location = 1;
9765 }
9766
84f4c1fe 9767 watch_command_1 (arg, accessflag, from_tty, just_location, 0);
8b93c638 9768}
8926118c 9769
c5aa993b 9770static void
fba45db2 9771watch_command (char *arg, int from_tty)
c906108c 9772{
06a64a0b 9773 watch_maybe_just_location (arg, hw_write, from_tty);
c906108c
SS
9774}
9775
8b93c638 9776void
84f4c1fe 9777rwatch_command_wrapper (char *arg, int from_tty, int internal)
8b93c638 9778{
84f4c1fe 9779 watch_command_1 (arg, hw_read, from_tty, 0, internal);
8b93c638 9780}
8926118c 9781
c5aa993b 9782static void
fba45db2 9783rwatch_command (char *arg, int from_tty)
c906108c 9784{
06a64a0b 9785 watch_maybe_just_location (arg, hw_read, from_tty);
c906108c
SS
9786}
9787
8b93c638 9788void
84f4c1fe 9789awatch_command_wrapper (char *arg, int from_tty, int internal)
8b93c638 9790{
84f4c1fe 9791 watch_command_1 (arg, hw_access, from_tty, 0, internal);
8b93c638 9792}
8926118c 9793
c5aa993b 9794static void
fba45db2 9795awatch_command (char *arg, int from_tty)
c906108c 9796{
06a64a0b 9797 watch_maybe_just_location (arg, hw_access, from_tty);
c906108c 9798}
c906108c 9799\f
c5aa993b 9800
43ff13b4 9801/* Helper routines for the until_command routine in infcmd.c. Here
c906108c
SS
9802 because it uses the mechanisms of breakpoints. */
9803
bfec99b2
PA
9804struct until_break_command_continuation_args
9805{
9806 struct breakpoint *breakpoint;
9807 struct breakpoint *breakpoint2;
186c406b 9808 int thread_num;
bfec99b2
PA
9809};
9810
43ff13b4 9811/* This function is called by fetch_inferior_event via the
4a64f543 9812 cmd_continuation pointer, to complete the until command. It takes
43ff13b4 9813 care of cleaning up the temporary breakpoints set up by the until
4a64f543 9814 command. */
c2c6d25f 9815static void
fa4cd53f 9816until_break_command_continuation (void *arg, int err)
43ff13b4 9817{
bfec99b2
PA
9818 struct until_break_command_continuation_args *a = arg;
9819
9820 delete_breakpoint (a->breakpoint);
9821 if (a->breakpoint2)
9822 delete_breakpoint (a->breakpoint2);
186c406b 9823 delete_longjmp_breakpoint (a->thread_num);
43ff13b4
JM
9824}
9825
c906108c 9826void
ae66c1fc 9827until_break_command (char *arg, int from_tty, int anywhere)
c906108c
SS
9828{
9829 struct symtabs_and_lines sals;
9830 struct symtab_and_line sal;
206415a3 9831 struct frame_info *frame = get_selected_frame (NULL);
c906108c 9832 struct breakpoint *breakpoint;
f107f563 9833 struct breakpoint *breakpoint2 = NULL;
c906108c 9834 struct cleanup *old_chain;
186c406b
TT
9835 int thread;
9836 struct thread_info *tp;
c906108c
SS
9837
9838 clear_proceed_status ();
9839
9840 /* Set a breakpoint where the user wants it and at return from
4a64f543 9841 this function. */
c5aa993b 9842
1bfeeb0f 9843 if (last_displayed_sal_is_valid ())
f8eba3c6 9844 sals = decode_line_1 (&arg, DECODE_LINE_FUNFIRSTLINE,
1bfeeb0f 9845 get_last_displayed_symtab (),
f8eba3c6 9846 get_last_displayed_line ());
c906108c 9847 else
f8eba3c6
TT
9848 sals = decode_line_1 (&arg, DECODE_LINE_FUNFIRSTLINE,
9849 (struct symtab *) NULL, 0);
c5aa993b 9850
c906108c 9851 if (sals.nelts != 1)
8a3fe4f8 9852 error (_("Couldn't get information on specified line."));
c5aa993b 9853
c906108c 9854 sal = sals.sals[0];
4a64f543 9855 xfree (sals.sals); /* malloc'd, so freed. */
c5aa993b 9856
c906108c 9857 if (*arg)
8a3fe4f8 9858 error (_("Junk at end of arguments."));
c5aa993b 9859
c906108c 9860 resolve_sal_pc (&sal);
c5aa993b 9861
ae66c1fc
EZ
9862 if (anywhere)
9863 /* If the user told us to continue until a specified location,
9864 we don't specify a frame at which we need to stop. */
a6d9a66e
UW
9865 breakpoint = set_momentary_breakpoint (get_frame_arch (frame), sal,
9866 null_frame_id, bp_until);
ae66c1fc 9867 else
4a64f543
MS
9868 /* Otherwise, specify the selected frame, because we want to stop
9869 only at the very same frame. */
a6d9a66e
UW
9870 breakpoint = set_momentary_breakpoint (get_frame_arch (frame), sal,
9871 get_stack_frame_id (frame),
ae66c1fc 9872 bp_until);
c5aa993b 9873
f107f563 9874 old_chain = make_cleanup_delete_breakpoint (breakpoint);
c906108c 9875
186c406b
TT
9876 tp = inferior_thread ();
9877 thread = tp->num;
9878
ae66c1fc
EZ
9879 /* Keep within the current frame, or in frames called by the current
9880 one. */
edb3359d
DJ
9881
9882 if (frame_id_p (frame_unwind_caller_id (frame)))
c906108c 9883 {
edb3359d
DJ
9884 sal = find_pc_line (frame_unwind_caller_pc (frame), 0);
9885 sal.pc = frame_unwind_caller_pc (frame);
a6d9a66e
UW
9886 breakpoint2 = set_momentary_breakpoint (frame_unwind_caller_arch (frame),
9887 sal,
edb3359d 9888 frame_unwind_caller_id (frame),
f107f563
VP
9889 bp_until);
9890 make_cleanup_delete_breakpoint (breakpoint2);
186c406b
TT
9891
9892 set_longjmp_breakpoint (tp, frame_unwind_caller_id (frame));
9893 make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
c906108c 9894 }
c5aa993b 9895
c906108c 9896 proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
f107f563 9897
4a64f543
MS
9898 /* If we are running asynchronously, and proceed call above has
9899 actually managed to start the target, arrange for breakpoints to
9900 be deleted when the target stops. Otherwise, we're already
9901 stopped and delete breakpoints via cleanup chain. */
f107f563 9902
8ea051c5 9903 if (target_can_async_p () && is_running (inferior_ptid))
f107f563 9904 {
bfec99b2
PA
9905 struct until_break_command_continuation_args *args;
9906 args = xmalloc (sizeof (*args));
f107f563 9907
bfec99b2
PA
9908 args->breakpoint = breakpoint;
9909 args->breakpoint2 = breakpoint2;
186c406b 9910 args->thread_num = thread;
f107f563
VP
9911
9912 discard_cleanups (old_chain);
95e54da7
PA
9913 add_continuation (inferior_thread (),
9914 until_break_command_continuation, args,
604ead4a 9915 xfree);
f107f563
VP
9916 }
9917 else
c5aa993b 9918 do_cleanups (old_chain);
c906108c 9919}
ae66c1fc 9920
c906108c
SS
9921/* This function attempts to parse an optional "if <cond>" clause
9922 from the arg string. If one is not found, it returns NULL.
c5aa993b 9923
c906108c
SS
9924 Else, it returns a pointer to the condition string. (It does not
9925 attempt to evaluate the string against a particular block.) And,
9926 it updates arg to point to the first character following the parsed
4a64f543 9927 if clause in the arg string. */
53a5351d 9928
c906108c 9929static char *
fba45db2 9930ep_parse_optional_if_clause (char **arg)
c906108c 9931{
c5aa993b
JM
9932 char *cond_string;
9933
9934 if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
c906108c 9935 return NULL;
c5aa993b 9936
4a64f543 9937 /* Skip the "if" keyword. */
c906108c 9938 (*arg) += 2;
c5aa993b 9939
c906108c 9940 /* Skip any extra leading whitespace, and record the start of the
4a64f543 9941 condition string. */
e9cafbcc 9942 *arg = skip_spaces (*arg);
c906108c 9943 cond_string = *arg;
c5aa993b 9944
4a64f543
MS
9945 /* Assume that the condition occupies the remainder of the arg
9946 string. */
c906108c 9947 (*arg) += strlen (cond_string);
c5aa993b 9948
c906108c
SS
9949 return cond_string;
9950}
c5aa993b 9951
c906108c
SS
9952/* Commands to deal with catching events, such as signals, exceptions,
9953 process start/exit, etc. */
c5aa993b
JM
9954
9955typedef enum
9956{
44feb3ce
TT
9957 catch_fork_temporary, catch_vfork_temporary,
9958 catch_fork_permanent, catch_vfork_permanent
c5aa993b
JM
9959}
9960catch_fork_kind;
9961
c906108c 9962static void
cc59ec59
MS
9963catch_fork_command_1 (char *arg, int from_tty,
9964 struct cmd_list_element *command)
c906108c 9965{
a6d9a66e 9966 struct gdbarch *gdbarch = get_current_arch ();
c5aa993b 9967 char *cond_string = NULL;
44feb3ce
TT
9968 catch_fork_kind fork_kind;
9969 int tempflag;
9970
9971 fork_kind = (catch_fork_kind) (uintptr_t) get_cmd_context (command);
9972 tempflag = (fork_kind == catch_fork_temporary
9973 || fork_kind == catch_vfork_temporary);
c5aa993b 9974
44feb3ce
TT
9975 if (!arg)
9976 arg = "";
e9cafbcc 9977 arg = skip_spaces (arg);
c5aa993b 9978
c906108c 9979 /* The allowed syntax is:
c5aa993b
JM
9980 catch [v]fork
9981 catch [v]fork if <cond>
9982
4a64f543 9983 First, check if there's an if clause. */
c906108c 9984 cond_string = ep_parse_optional_if_clause (&arg);
c5aa993b 9985
c906108c 9986 if ((*arg != '\0') && !isspace (*arg))
8a3fe4f8 9987 error (_("Junk at end of arguments."));
c5aa993b 9988
c906108c 9989 /* If this target supports it, create a fork or vfork catchpoint
4a64f543 9990 and enable reporting of such events. */
c5aa993b
JM
9991 switch (fork_kind)
9992 {
44feb3ce
TT
9993 case catch_fork_temporary:
9994 case catch_fork_permanent:
a6d9a66e 9995 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
ce78b96d 9996 &catch_fork_breakpoint_ops);
c906108c 9997 break;
44feb3ce
TT
9998 case catch_vfork_temporary:
9999 case catch_vfork_permanent:
a6d9a66e 10000 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
ce78b96d 10001 &catch_vfork_breakpoint_ops);
c906108c 10002 break;
c5aa993b 10003 default:
8a3fe4f8 10004 error (_("unsupported or unknown fork kind; cannot catch it"));
c906108c 10005 break;
c5aa993b 10006 }
c906108c
SS
10007}
10008
10009static void
cc59ec59
MS
10010catch_exec_command_1 (char *arg, int from_tty,
10011 struct cmd_list_element *command)
c906108c 10012{
b4d90040 10013 struct exec_catchpoint *c;
a6d9a66e 10014 struct gdbarch *gdbarch = get_current_arch ();
44feb3ce 10015 int tempflag;
c5aa993b 10016 char *cond_string = NULL;
c906108c 10017
44feb3ce
TT
10018 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
10019
10020 if (!arg)
10021 arg = "";
e9cafbcc 10022 arg = skip_spaces (arg);
c906108c
SS
10023
10024 /* The allowed syntax is:
c5aa993b
JM
10025 catch exec
10026 catch exec if <cond>
c906108c 10027
4a64f543 10028 First, check if there's an if clause. */
c906108c
SS
10029 cond_string = ep_parse_optional_if_clause (&arg);
10030
10031 if ((*arg != '\0') && !isspace (*arg))
8a3fe4f8 10032 error (_("Junk at end of arguments."));
c906108c 10033
b4d90040
PA
10034 c = XNEW (struct exec_catchpoint);
10035 init_catchpoint (&c->base, gdbarch, tempflag, cond_string,
10036 &catch_exec_breakpoint_ops);
10037 c->exec_pathname = NULL;
10038
3ea46bff 10039 install_breakpoint (0, &c->base, 1);
c906108c 10040}
c5aa993b 10041
3086aeae 10042static enum print_stop_action
348d480f 10043print_it_exception_catchpoint (bpstat bs)
3086aeae 10044{
79a45e25 10045 struct ui_out *uiout = current_uiout;
348d480f 10046 struct breakpoint *b = bs->breakpoint_at;
ade92717 10047 int bp_temp, bp_throw;
3086aeae 10048
ade92717 10049 annotate_catchpoint (b->number);
3086aeae 10050
ade92717
AR
10051 bp_throw = strstr (b->addr_string, "throw") != NULL;
10052 if (b->loc->address != b->loc->requested_address)
10053 breakpoint_adjustment_warning (b->loc->requested_address,
10054 b->loc->address,
10055 b->number, 1);
df2b6d2d 10056 bp_temp = b->disposition == disp_del;
ade92717
AR
10057 ui_out_text (uiout,
10058 bp_temp ? "Temporary catchpoint "
10059 : "Catchpoint ");
10060 if (!ui_out_is_mi_like_p (uiout))
10061 ui_out_field_int (uiout, "bkptno", b->number);
10062 ui_out_text (uiout,
c0b37c48
AR
10063 bp_throw ? " (exception thrown), "
10064 : " (exception caught), ");
ade92717
AR
10065 if (ui_out_is_mi_like_p (uiout))
10066 {
10067 ui_out_field_string (uiout, "reason",
10068 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
10069 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
10070 ui_out_field_int (uiout, "bkptno", b->number);
10071 }
3086aeae
DJ
10072 return PRINT_SRC_AND_LOC;
10073}
10074
10075static void
cc59ec59
MS
10076print_one_exception_catchpoint (struct breakpoint *b,
10077 struct bp_location **last_loc)
3086aeae 10078{
79a45b7d 10079 struct value_print_options opts;
79a45e25 10080 struct ui_out *uiout = current_uiout;
cc59ec59 10081
79a45b7d
TT
10082 get_user_print_options (&opts);
10083 if (opts.addressprint)
3086aeae
DJ
10084 {
10085 annotate_field (4);
604133b5
AR
10086 if (b->loc == NULL || b->loc->shlib_disabled)
10087 ui_out_field_string (uiout, "addr", "<PENDING>");
10088 else
5af949e3
UW
10089 ui_out_field_core_addr (uiout, "addr",
10090 b->loc->gdbarch, b->loc->address);
3086aeae
DJ
10091 }
10092 annotate_field (5);
604133b5 10093 if (b->loc)
a6d9a66e 10094 *last_loc = b->loc;
3086aeae
DJ
10095 if (strstr (b->addr_string, "throw") != NULL)
10096 ui_out_field_string (uiout, "what", "exception throw");
10097 else
10098 ui_out_field_string (uiout, "what", "exception catch");
10099}
10100
10101static void
10102print_mention_exception_catchpoint (struct breakpoint *b)
10103{
79a45e25 10104 struct ui_out *uiout = current_uiout;
ade92717
AR
10105 int bp_temp;
10106 int bp_throw;
10107
df2b6d2d 10108 bp_temp = b->disposition == disp_del;
ade92717
AR
10109 bp_throw = strstr (b->addr_string, "throw") != NULL;
10110 ui_out_text (uiout, bp_temp ? _("Temporary catchpoint ")
10111 : _("Catchpoint "));
10112 ui_out_field_int (uiout, "bkptno", b->number);
10113 ui_out_text (uiout, bp_throw ? _(" (throw)")
10114 : _(" (catch)"));
3086aeae
DJ
10115}
10116
6149aea9
PA
10117/* Implement the "print_recreate" breakpoint_ops method for throw and
10118 catch catchpoints. */
10119
10120static void
4a64f543
MS
10121print_recreate_exception_catchpoint (struct breakpoint *b,
10122 struct ui_file *fp)
6149aea9
PA
10123{
10124 int bp_temp;
10125 int bp_throw;
10126
10127 bp_temp = b->disposition == disp_del;
10128 bp_throw = strstr (b->addr_string, "throw") != NULL;
10129 fprintf_unfiltered (fp, bp_temp ? "tcatch " : "catch ");
10130 fprintf_unfiltered (fp, bp_throw ? "throw" : "catch");
d9b3f62e 10131 print_recreate_thread (b, fp);
6149aea9
PA
10132}
10133
2060206e 10134static struct breakpoint_ops gnu_v3_exception_catchpoint_ops;
3086aeae
DJ
10135
10136static int
10137handle_gnu_v3_exceptions (int tempflag, char *cond_string,
10138 enum exception_event_kind ex_event, int from_tty)
10139{
604133b5
AR
10140 char *trigger_func_name;
10141
3086aeae 10142 if (ex_event == EX_EVENT_CATCH)
604133b5 10143 trigger_func_name = "__cxa_begin_catch";
3086aeae 10144 else
604133b5 10145 trigger_func_name = "__cxa_throw";
3086aeae 10146
8cdf0e15
VP
10147 create_breakpoint (get_current_arch (),
10148 trigger_func_name, cond_string, -1,
10149 0 /* condition and thread are valid. */,
0fb4aa4b 10150 tempflag, bp_breakpoint,
8cdf0e15
VP
10151 0,
10152 AUTO_BOOLEAN_TRUE /* pending */,
10153 &gnu_v3_exception_catchpoint_ops, from_tty,
84f4c1fe
PM
10154 1 /* enabled */,
10155 0 /* internal */);
3086aeae 10156
3086aeae
DJ
10157 return 1;
10158}
10159
4a64f543 10160/* Deal with "catch catch" and "catch throw" commands. */
c906108c
SS
10161
10162static void
fba45db2
KB
10163catch_exception_command_1 (enum exception_event_kind ex_event, char *arg,
10164 int tempflag, int from_tty)
c906108c 10165{
c5aa993b 10166 char *cond_string = NULL;
c5aa993b 10167
44feb3ce
TT
10168 if (!arg)
10169 arg = "";
e9cafbcc 10170 arg = skip_spaces (arg);
c5aa993b 10171
c906108c
SS
10172 cond_string = ep_parse_optional_if_clause (&arg);
10173
10174 if ((*arg != '\0') && !isspace (*arg))
8a3fe4f8 10175 error (_("Junk at end of arguments."));
c906108c 10176
059fb39f
PM
10177 if (ex_event != EX_EVENT_THROW
10178 && ex_event != EX_EVENT_CATCH)
8a3fe4f8 10179 error (_("Unsupported or unknown exception event; cannot catch it"));
c906108c 10180
3086aeae
DJ
10181 if (handle_gnu_v3_exceptions (tempflag, cond_string, ex_event, from_tty))
10182 return;
10183
8a3fe4f8 10184 warning (_("Unsupported with this platform/compiler combination."));
c906108c
SS
10185}
10186
44feb3ce
TT
10187/* Implementation of "catch catch" command. */
10188
10189static void
10190catch_catch_command (char *arg, int from_tty, struct cmd_list_element *command)
10191{
10192 int tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
cc59ec59 10193
44feb3ce
TT
10194 catch_exception_command_1 (EX_EVENT_CATCH, arg, tempflag, from_tty);
10195}
10196
10197/* Implementation of "catch throw" command. */
10198
10199static void
10200catch_throw_command (char *arg, int from_tty, struct cmd_list_element *command)
10201{
10202 int tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
cc59ec59 10203
44feb3ce
TT
10204 catch_exception_command_1 (EX_EVENT_THROW, arg, tempflag, from_tty);
10205}
10206
9ac4176b 10207void
28010a5d
PA
10208init_ada_exception_breakpoint (struct breakpoint *b,
10209 struct gdbarch *gdbarch,
10210 struct symtab_and_line sal,
10211 char *addr_string,
c0a91b2b 10212 const struct breakpoint_ops *ops,
28010a5d
PA
10213 int tempflag,
10214 int from_tty)
f7f9143b 10215{
f7f9143b
JB
10216 if (from_tty)
10217 {
5af949e3
UW
10218 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
10219 if (!loc_gdbarch)
10220 loc_gdbarch = gdbarch;
10221
6c95b8df
PA
10222 describe_other_breakpoints (loc_gdbarch,
10223 sal.pspace, sal.pc, sal.section, -1);
f7f9143b
JB
10224 /* FIXME: brobecker/2006-12-28: Actually, re-implement a special
10225 version for exception catchpoints, because two catchpoints
10226 used for different exception names will use the same address.
10227 In this case, a "breakpoint ... also set at..." warning is
4a64f543 10228 unproductive. Besides, the warning phrasing is also a bit
e5dd4106 10229 inappropriate, we should use the word catchpoint, and tell
f7f9143b
JB
10230 the user what type of catchpoint it is. The above is good
10231 enough for now, though. */
10232 }
10233
28010a5d 10234 init_raw_breakpoint (b, gdbarch, sal, bp_breakpoint, ops);
f7f9143b
JB
10235
10236 b->enable_state = bp_enabled;
10237 b->disposition = tempflag ? disp_del : disp_donttouch;
f7f9143b
JB
10238 b->addr_string = addr_string;
10239 b->language = language_ada;
f7f9143b
JB
10240}
10241
a96d9b2e
SDJ
10242/* Splits the argument using space as delimiter. Returns an xmalloc'd
10243 filter list, or NULL if no filtering is required. */
10244static VEC(int) *
10245catch_syscall_split_args (char *arg)
10246{
10247 VEC(int) *result = NULL;
29d0bb3d 10248 struct cleanup *cleanup = make_cleanup (VEC_cleanup (int), &result);
a96d9b2e
SDJ
10249
10250 while (*arg != '\0')
10251 {
10252 int i, syscall_number;
10253 char *endptr;
10254 char cur_name[128];
10255 struct syscall s;
10256
10257 /* Skip whitespace. */
10258 while (isspace (*arg))
10259 arg++;
10260
10261 for (i = 0; i < 127 && arg[i] && !isspace (arg[i]); ++i)
10262 cur_name[i] = arg[i];
10263 cur_name[i] = '\0';
10264 arg += i;
10265
10266 /* Check if the user provided a syscall name or a number. */
10267 syscall_number = (int) strtol (cur_name, &endptr, 0);
10268 if (*endptr == '\0')
bccd0dd2 10269 get_syscall_by_number (syscall_number, &s);
a96d9b2e
SDJ
10270 else
10271 {
10272 /* We have a name. Let's check if it's valid and convert it
10273 to a number. */
10274 get_syscall_by_name (cur_name, &s);
10275
10276 if (s.number == UNKNOWN_SYSCALL)
4a64f543
MS
10277 /* Here we have to issue an error instead of a warning,
10278 because GDB cannot do anything useful if there's no
10279 syscall number to be caught. */
a96d9b2e
SDJ
10280 error (_("Unknown syscall name '%s'."), cur_name);
10281 }
10282
10283 /* Ok, it's valid. */
10284 VEC_safe_push (int, result, s.number);
10285 }
10286
10287 discard_cleanups (cleanup);
10288 return result;
10289}
10290
10291/* Implement the "catch syscall" command. */
10292
10293static void
cc59ec59
MS
10294catch_syscall_command_1 (char *arg, int from_tty,
10295 struct cmd_list_element *command)
a96d9b2e
SDJ
10296{
10297 int tempflag;
10298 VEC(int) *filter;
10299 struct syscall s;
10300 struct gdbarch *gdbarch = get_current_arch ();
10301
10302 /* Checking if the feature if supported. */
10303 if (gdbarch_get_syscall_number_p (gdbarch) == 0)
10304 error (_("The feature 'catch syscall' is not supported on \
ea666128 10305this architecture yet."));
a96d9b2e
SDJ
10306
10307 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
10308
e9cafbcc 10309 arg = skip_spaces (arg);
a96d9b2e
SDJ
10310
10311 /* We need to do this first "dummy" translation in order
10312 to get the syscall XML file loaded or, most important,
10313 to display a warning to the user if there's no XML file
10314 for his/her architecture. */
10315 get_syscall_by_number (0, &s);
10316
10317 /* The allowed syntax is:
10318 catch syscall
10319 catch syscall <name | number> [<name | number> ... <name | number>]
10320
10321 Let's check if there's a syscall name. */
10322
10323 if (arg != NULL)
10324 filter = catch_syscall_split_args (arg);
10325 else
10326 filter = NULL;
10327
10328 create_syscall_event_catchpoint (tempflag, filter,
10329 &catch_syscall_breakpoint_ops);
10330}
10331
c906108c 10332static void
fba45db2 10333catch_command (char *arg, int from_tty)
c906108c 10334{
44feb3ce 10335 error (_("Catch requires an event name."));
c906108c
SS
10336}
10337\f
10338
10339static void
fba45db2 10340tcatch_command (char *arg, int from_tty)
c906108c 10341{
44feb3ce 10342 error (_("Catch requires an event name."));
c906108c
SS
10343}
10344
8a2c437b
TT
10345/* A qsort comparison function that sorts breakpoints in order. */
10346
10347static int
10348compare_breakpoints (const void *a, const void *b)
10349{
10350 const breakpoint_p *ba = a;
10351 uintptr_t ua = (uintptr_t) *ba;
10352 const breakpoint_p *bb = b;
10353 uintptr_t ub = (uintptr_t) *bb;
10354
10355 if ((*ba)->number < (*bb)->number)
10356 return -1;
10357 else if ((*ba)->number > (*bb)->number)
10358 return 1;
10359
10360 /* Now sort by address, in case we see, e..g, two breakpoints with
10361 the number 0. */
10362 if (ua < ub)
10363 return -1;
10364 return ub > ub ? 1 : 0;
10365}
10366
80f8a6eb 10367/* Delete breakpoints by address or line. */
c906108c
SS
10368
10369static void
fba45db2 10370clear_command (char *arg, int from_tty)
c906108c 10371{
8a2c437b 10372 struct breakpoint *b, *prev;
d6e956e5
VP
10373 VEC(breakpoint_p) *found = 0;
10374 int ix;
c906108c
SS
10375 int default_match;
10376 struct symtabs_and_lines sals;
10377 struct symtab_and_line sal;
c906108c 10378 int i;
8a2c437b 10379 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
c906108c
SS
10380
10381 if (arg)
10382 {
f8eba3c6
TT
10383 sals = decode_line_spec (arg, (DECODE_LINE_FUNFIRSTLINE
10384 | DECODE_LINE_LIST_MODE));
c906108c
SS
10385 default_match = 0;
10386 }
10387 else
10388 {
c5aa993b 10389 sals.sals = (struct symtab_and_line *)
c906108c 10390 xmalloc (sizeof (struct symtab_and_line));
80f8a6eb 10391 make_cleanup (xfree, sals.sals);
4a64f543 10392 init_sal (&sal); /* Initialize to zeroes. */
1bfeeb0f
JL
10393
10394 /* Set sal's line, symtab, pc, and pspace to the values
10395 corresponding to the last call to print_frame_info. If the
10396 codepoint is not valid, this will set all the fields to 0. */
10397 get_last_displayed_sal (&sal);
c906108c 10398 if (sal.symtab == 0)
8a3fe4f8 10399 error (_("No source file specified."));
c906108c
SS
10400
10401 sals.sals[0] = sal;
10402 sals.nelts = 1;
10403
10404 default_match = 1;
10405 }
10406
4a64f543
MS
10407 /* We don't call resolve_sal_pc here. That's not as bad as it
10408 seems, because all existing breakpoints typically have both
10409 file/line and pc set. So, if clear is given file/line, we can
10410 match this to existing breakpoint without obtaining pc at all.
ed0616c6
VP
10411
10412 We only support clearing given the address explicitly
10413 present in breakpoint table. Say, we've set breakpoint
4a64f543 10414 at file:line. There were several PC values for that file:line,
ed0616c6 10415 due to optimization, all in one block.
4a64f543
MS
10416
10417 We've picked one PC value. If "clear" is issued with another
ed0616c6
VP
10418 PC corresponding to the same file:line, the breakpoint won't
10419 be cleared. We probably can still clear the breakpoint, but
10420 since the other PC value is never presented to user, user
10421 can only find it by guessing, and it does not seem important
10422 to support that. */
10423
4a64f543
MS
10424 /* For each line spec given, delete bps which correspond to it. Do
10425 it in two passes, solely to preserve the current behavior that
10426 from_tty is forced true if we delete more than one
10427 breakpoint. */
c906108c 10428
80f8a6eb 10429 found = NULL;
8a2c437b 10430 make_cleanup (VEC_cleanup (breakpoint_p), &found);
c906108c
SS
10431 for (i = 0; i < sals.nelts; i++)
10432 {
4aac40c8
TT
10433 int is_abs, sal_name_len;
10434
c906108c 10435 /* If exact pc given, clear bpts at that pc.
c5aa993b
JM
10436 If line given (pc == 0), clear all bpts on specified line.
10437 If defaulting, clear all bpts on default line
c906108c 10438 or at default pc.
c5aa993b
JM
10439
10440 defaulting sal.pc != 0 tests to do
10441
10442 0 1 pc
10443 1 1 pc _and_ line
10444 0 0 line
10445 1 0 <can't happen> */
c906108c
SS
10446
10447 sal = sals.sals[i];
4aac40c8
TT
10448 is_abs = sal.symtab == NULL ? 1 : IS_ABSOLUTE_PATH (sal.symtab->filename);
10449 sal_name_len = is_abs ? 0 : strlen (sal.symtab->filename);
c906108c 10450
4a64f543 10451 /* Find all matching breakpoints and add them to 'found'. */
d6e956e5 10452 ALL_BREAKPOINTS (b)
c5aa993b 10453 {
0d381245 10454 int match = 0;
4a64f543 10455 /* Are we going to delete b? */
cc60f2e3 10456 if (b->type != bp_none && !is_watchpoint (b))
0d381245
VP
10457 {
10458 struct bp_location *loc = b->loc;
10459 for (; loc; loc = loc->next)
10460 {
f8eba3c6
TT
10461 /* If the user specified file:line, don't allow a PC
10462 match. This matches historical gdb behavior. */
10463 int pc_match = (!sal.explicit_line
10464 && sal.pc
10465 && (loc->pspace == sal.pspace)
10466 && (loc->address == sal.pc)
10467 && (!section_is_overlay (loc->section)
10468 || loc->section == sal.section));
4aac40c8
TT
10469 int line_match = 0;
10470
10471 if ((default_match || sal.explicit_line)
10472 && loc->source_file != NULL
10473 && sal.symtab != NULL
10474 && sal.pspace == loc->pspace
10475 && loc->line_number == sal.line)
10476 {
10477 if (filename_cmp (loc->source_file,
10478 sal.symtab->filename) == 0)
10479 line_match = 1;
10480 else if (!IS_ABSOLUTE_PATH (sal.symtab->filename)
10481 && compare_filenames_for_search (loc->source_file,
10482 sal.symtab->filename,
10483 sal_name_len))
10484 line_match = 1;
10485 }
10486
0d381245
VP
10487 if (pc_match || line_match)
10488 {
10489 match = 1;
10490 break;
10491 }
10492 }
10493 }
10494
10495 if (match)
d6e956e5 10496 VEC_safe_push(breakpoint_p, found, b);
c906108c 10497 }
80f8a6eb 10498 }
8a2c437b 10499
80f8a6eb 10500 /* Now go thru the 'found' chain and delete them. */
d6e956e5 10501 if (VEC_empty(breakpoint_p, found))
80f8a6eb
MS
10502 {
10503 if (arg)
8a3fe4f8 10504 error (_("No breakpoint at %s."), arg);
80f8a6eb 10505 else
8a3fe4f8 10506 error (_("No breakpoint at this line."));
80f8a6eb 10507 }
c906108c 10508
8a2c437b
TT
10509 /* Remove duplicates from the vec. */
10510 qsort (VEC_address (breakpoint_p, found),
10511 VEC_length (breakpoint_p, found),
10512 sizeof (breakpoint_p),
10513 compare_breakpoints);
10514 prev = VEC_index (breakpoint_p, found, 0);
10515 for (ix = 1; VEC_iterate (breakpoint_p, found, ix, b); ++ix)
10516 {
10517 if (b == prev)
10518 {
10519 VEC_ordered_remove (breakpoint_p, found, ix);
10520 --ix;
10521 }
10522 }
10523
d6e956e5 10524 if (VEC_length(breakpoint_p, found) > 1)
4a64f543 10525 from_tty = 1; /* Always report if deleted more than one. */
80f8a6eb 10526 if (from_tty)
a3f17187 10527 {
d6e956e5 10528 if (VEC_length(breakpoint_p, found) == 1)
a3f17187
AC
10529 printf_unfiltered (_("Deleted breakpoint "));
10530 else
10531 printf_unfiltered (_("Deleted breakpoints "));
10532 }
80f8a6eb 10533 breakpoints_changed ();
d6e956e5
VP
10534
10535 for (ix = 0; VEC_iterate(breakpoint_p, found, ix, b); ix++)
80f8a6eb 10536 {
c5aa993b 10537 if (from_tty)
d6e956e5
VP
10538 printf_unfiltered ("%d ", b->number);
10539 delete_breakpoint (b);
c906108c 10540 }
80f8a6eb
MS
10541 if (from_tty)
10542 putchar_unfiltered ('\n');
8a2c437b
TT
10543
10544 do_cleanups (cleanups);
c906108c
SS
10545}
10546\f
10547/* Delete breakpoint in BS if they are `delete' breakpoints and
10548 all breakpoints that are marked for deletion, whether hit or not.
10549 This is called after any breakpoint is hit, or after errors. */
10550
10551void
fba45db2 10552breakpoint_auto_delete (bpstat bs)
c906108c 10553{
35df4500 10554 struct breakpoint *b, *b_tmp;
c906108c
SS
10555
10556 for (; bs; bs = bs->next)
f431efe5
PA
10557 if (bs->breakpoint_at
10558 && bs->breakpoint_at->disposition == disp_del
c906108c 10559 && bs->stop)
f431efe5 10560 delete_breakpoint (bs->breakpoint_at);
c906108c 10561
35df4500 10562 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 10563 {
b5de0fa7 10564 if (b->disposition == disp_del_at_next_stop)
c5aa993b
JM
10565 delete_breakpoint (b);
10566 }
c906108c
SS
10567}
10568
4a64f543
MS
10569/* A comparison function for bp_location AP and BP being interfaced to
10570 qsort. Sort elements primarily by their ADDRESS (no matter what
10571 does breakpoint_address_is_meaningful say for its OWNER),
10572 secondarily by ordering first bp_permanent OWNERed elements and
10573 terciarily just ensuring the array is sorted stable way despite
e5dd4106 10574 qsort being an unstable algorithm. */
876fa593
JK
10575
10576static int
494cfb0f 10577bp_location_compare (const void *ap, const void *bp)
876fa593 10578{
494cfb0f
JK
10579 struct bp_location *a = *(void **) ap;
10580 struct bp_location *b = *(void **) bp;
2bdf28a0 10581 /* A and B come from existing breakpoints having non-NULL OWNER. */
876fa593
JK
10582 int a_perm = a->owner->enable_state == bp_permanent;
10583 int b_perm = b->owner->enable_state == bp_permanent;
10584
10585 if (a->address != b->address)
10586 return (a->address > b->address) - (a->address < b->address);
10587
10588 /* Sort permanent breakpoints first. */
10589 if (a_perm != b_perm)
10590 return (a_perm < b_perm) - (a_perm > b_perm);
10591
c56a97f9
JK
10592 /* Make the internal GDB representation stable across GDB runs
10593 where A and B memory inside GDB can differ. Breakpoint locations of
10594 the same type at the same address can be sorted in arbitrary order. */
876fa593
JK
10595
10596 if (a->owner->number != b->owner->number)
c56a97f9
JK
10597 return ((a->owner->number > b->owner->number)
10598 - (a->owner->number < b->owner->number));
876fa593
JK
10599
10600 return (a > b) - (a < b);
10601}
10602
876fa593 10603/* Set bp_location_placed_address_before_address_max and
4a64f543
MS
10604 bp_location_shadow_len_after_address_max according to the current
10605 content of the bp_location array. */
f7545552
TT
10606
10607static void
876fa593 10608bp_location_target_extensions_update (void)
f7545552 10609{
876fa593
JK
10610 struct bp_location *bl, **blp_tmp;
10611
10612 bp_location_placed_address_before_address_max = 0;
10613 bp_location_shadow_len_after_address_max = 0;
10614
10615 ALL_BP_LOCATIONS (bl, blp_tmp)
10616 {
10617 CORE_ADDR start, end, addr;
10618
10619 if (!bp_location_has_shadow (bl))
10620 continue;
10621
10622 start = bl->target_info.placed_address;
10623 end = start + bl->target_info.shadow_len;
10624
10625 gdb_assert (bl->address >= start);
10626 addr = bl->address - start;
10627 if (addr > bp_location_placed_address_before_address_max)
10628 bp_location_placed_address_before_address_max = addr;
10629
10630 /* Zero SHADOW_LEN would not pass bp_location_has_shadow. */
10631
10632 gdb_assert (bl->address < end);
10633 addr = end - bl->address;
10634 if (addr > bp_location_shadow_len_after_address_max)
10635 bp_location_shadow_len_after_address_max = addr;
10636 }
f7545552
TT
10637}
10638
1e4d1764
YQ
10639/* Download tracepoint locations if they haven't been. */
10640
10641static void
10642download_tracepoint_locations (void)
10643{
10644 struct bp_location *bl, **blp_tmp;
10645 struct cleanup *old_chain;
10646
10647 if (!target_can_download_tracepoint ())
10648 return;
10649
10650 old_chain = save_current_space_and_thread ();
10651
10652 ALL_BP_LOCATIONS (bl, blp_tmp)
10653 {
10654 struct tracepoint *t;
10655
10656 if (!is_tracepoint (bl->owner))
10657 continue;
10658
10659 if ((bl->owner->type == bp_fast_tracepoint
10660 ? !may_insert_fast_tracepoints
10661 : !may_insert_tracepoints))
10662 continue;
10663
10664 /* In tracepoint, locations are _never_ duplicated, so
10665 should_be_inserted is equivalent to
10666 unduplicated_should_be_inserted. */
10667 if (!should_be_inserted (bl) || bl->inserted)
10668 continue;
10669
10670 switch_to_program_space_and_thread (bl->pspace);
10671
10672 target_download_tracepoint (bl);
10673
10674 bl->inserted = 1;
10675 t = (struct tracepoint *) bl->owner;
10676 t->number_on_target = bl->owner->number;
10677 }
10678
10679 do_cleanups (old_chain);
10680}
10681
934709f0
PW
10682/* Swap the insertion/duplication state between two locations. */
10683
10684static void
10685swap_insertion (struct bp_location *left, struct bp_location *right)
10686{
10687 const int left_inserted = left->inserted;
10688 const int left_duplicate = left->duplicate;
10689 const struct bp_target_info left_target_info = left->target_info;
10690
1e4d1764
YQ
10691 /* Locations of tracepoints can never be duplicated. */
10692 if (is_tracepoint (left->owner))
10693 gdb_assert (!left->duplicate);
10694 if (is_tracepoint (right->owner))
10695 gdb_assert (!right->duplicate);
10696
934709f0
PW
10697 left->inserted = right->inserted;
10698 left->duplicate = right->duplicate;
10699 left->target_info = right->target_info;
10700 right->inserted = left_inserted;
10701 right->duplicate = left_duplicate;
10702 right->target_info = left_target_info;
10703}
10704
4cd9bd08 10705/* If SHOULD_INSERT is false, do not insert any breakpoint locations
b60e7edf
PA
10706 into the inferior, only remove already-inserted locations that no
10707 longer should be inserted. Functions that delete a breakpoint or
10708 breakpoints should pass false, so that deleting a breakpoint
10709 doesn't have the side effect of inserting the locations of other
10710 breakpoints that are marked not-inserted, but should_be_inserted
10711 returns true on them.
10712
10713 This behaviour is useful is situations close to tear-down -- e.g.,
10714 after an exec, while the target still has execution, but breakpoint
10715 shadows of the previous executable image should *NOT* be restored
10716 to the new image; or before detaching, where the target still has
10717 execution and wants to delete breakpoints from GDB's lists, and all
10718 breakpoints had already been removed from the inferior. */
10719
0d381245 10720static void
b60e7edf 10721update_global_location_list (int should_insert)
0d381245 10722{
74960c60 10723 struct breakpoint *b;
876fa593 10724 struct bp_location **locp, *loc;
f7545552
TT
10725 struct cleanup *cleanups;
10726
2d134ed3
PA
10727 /* Used in the duplicates detection below. When iterating over all
10728 bp_locations, points to the first bp_location of a given address.
10729 Breakpoints and watchpoints of different types are never
10730 duplicates of each other. Keep one pointer for each type of
10731 breakpoint/watchpoint, so we only need to loop over all locations
10732 once. */
10733 struct bp_location *bp_loc_first; /* breakpoint */
10734 struct bp_location *wp_loc_first; /* hardware watchpoint */
10735 struct bp_location *awp_loc_first; /* access watchpoint */
10736 struct bp_location *rwp_loc_first; /* read watchpoint */
876fa593 10737
4a64f543
MS
10738 /* Saved former bp_location array which we compare against the newly
10739 built bp_location from the current state of ALL_BREAKPOINTS. */
876fa593
JK
10740 struct bp_location **old_location, **old_locp;
10741 unsigned old_location_count;
10742
10743 old_location = bp_location;
10744 old_location_count = bp_location_count;
10745 bp_location = NULL;
10746 bp_location_count = 0;
10747 cleanups = make_cleanup (xfree, old_location);
0d381245 10748
74960c60 10749 ALL_BREAKPOINTS (b)
876fa593
JK
10750 for (loc = b->loc; loc; loc = loc->next)
10751 bp_location_count++;
10752
10753 bp_location = xmalloc (sizeof (*bp_location) * bp_location_count);
10754 locp = bp_location;
10755 ALL_BREAKPOINTS (b)
10756 for (loc = b->loc; loc; loc = loc->next)
10757 *locp++ = loc;
10758 qsort (bp_location, bp_location_count, sizeof (*bp_location),
494cfb0f 10759 bp_location_compare);
876fa593
JK
10760
10761 bp_location_target_extensions_update ();
74960c60 10762
4a64f543
MS
10763 /* Identify bp_location instances that are no longer present in the
10764 new list, and therefore should be freed. Note that it's not
10765 necessary that those locations should be removed from inferior --
10766 if there's another location at the same address (previously
10767 marked as duplicate), we don't need to remove/insert the
10768 location.
876fa593 10769
4a64f543
MS
10770 LOCP is kept in sync with OLD_LOCP, each pointing to the current
10771 and former bp_location array state respectively. */
876fa593
JK
10772
10773 locp = bp_location;
10774 for (old_locp = old_location; old_locp < old_location + old_location_count;
10775 old_locp++)
74960c60 10776 {
876fa593 10777 struct bp_location *old_loc = *old_locp;
c7d46a38 10778 struct bp_location **loc2p;
876fa593 10779
e5dd4106 10780 /* Tells if 'old_loc' is found among the new locations. If
4a64f543 10781 not, we have to free it. */
c7d46a38 10782 int found_object = 0;
20874c92
VP
10783 /* Tells if the location should remain inserted in the target. */
10784 int keep_in_target = 0;
10785 int removed = 0;
876fa593 10786
4a64f543
MS
10787 /* Skip LOCP entries which will definitely never be needed.
10788 Stop either at or being the one matching OLD_LOC. */
876fa593 10789 while (locp < bp_location + bp_location_count
c7d46a38 10790 && (*locp)->address < old_loc->address)
876fa593 10791 locp++;
c7d46a38
PA
10792
10793 for (loc2p = locp;
10794 (loc2p < bp_location + bp_location_count
10795 && (*loc2p)->address == old_loc->address);
10796 loc2p++)
10797 {
10798 if (*loc2p == old_loc)
10799 {
10800 found_object = 1;
10801 break;
10802 }
10803 }
74960c60 10804
4a64f543
MS
10805 /* If this location is no longer present, and inserted, look if
10806 there's maybe a new location at the same address. If so,
10807 mark that one inserted, and don't remove this one. This is
10808 needed so that we don't have a time window where a breakpoint
10809 at certain location is not inserted. */
74960c60 10810
876fa593 10811 if (old_loc->inserted)
0d381245 10812 {
4a64f543
MS
10813 /* If the location is inserted now, we might have to remove
10814 it. */
74960c60 10815
876fa593 10816 if (found_object && should_be_inserted (old_loc))
74960c60 10817 {
4a64f543
MS
10818 /* The location is still present in the location list,
10819 and still should be inserted. Don't do anything. */
20874c92 10820 keep_in_target = 1;
74960c60
VP
10821 }
10822 else
10823 {
4a64f543
MS
10824 /* The location is either no longer present, or got
10825 disabled. See if there's another location at the
10826 same address, in which case we don't need to remove
10827 this one from the target. */
876fa593 10828
2bdf28a0 10829 /* OLD_LOC comes from existing struct breakpoint. */
876fa593
JK
10830 if (breakpoint_address_is_meaningful (old_loc->owner))
10831 {
876fa593 10832 for (loc2p = locp;
c7d46a38
PA
10833 (loc2p < bp_location + bp_location_count
10834 && (*loc2p)->address == old_loc->address);
876fa593
JK
10835 loc2p++)
10836 {
10837 struct bp_location *loc2 = *loc2p;
10838
2d134ed3 10839 if (breakpoint_locations_match (loc2, old_loc))
c7d46a38 10840 {
85d721b8
PA
10841 /* Read watchpoint locations are switched to
10842 access watchpoints, if the former are not
10843 supported, but the latter are. */
10844 if (is_hardware_watchpoint (old_loc->owner))
10845 {
10846 gdb_assert (is_hardware_watchpoint (loc2->owner));
10847 loc2->watchpoint_type = old_loc->watchpoint_type;
10848 }
10849
934709f0
PW
10850 /* loc2 is a duplicated location. We need to check
10851 if it should be inserted in case it will be
10852 unduplicated. */
10853 if (loc2 != old_loc
10854 && unduplicated_should_be_inserted (loc2))
c7d46a38 10855 {
934709f0 10856 swap_insertion (old_loc, loc2);
c7d46a38
PA
10857 keep_in_target = 1;
10858 break;
10859 }
876fa593
JK
10860 }
10861 }
10862 }
74960c60
VP
10863 }
10864
20874c92
VP
10865 if (!keep_in_target)
10866 {
876fa593 10867 if (remove_breakpoint (old_loc, mark_uninserted))
20874c92 10868 {
4a64f543
MS
10869 /* This is just about all we can do. We could keep
10870 this location on the global list, and try to
10871 remove it next time, but there's no particular
10872 reason why we will succeed next time.
20874c92 10873
4a64f543
MS
10874 Note that at this point, old_loc->owner is still
10875 valid, as delete_breakpoint frees the breakpoint
10876 only after calling us. */
3e43a32a
MS
10877 printf_filtered (_("warning: Error removing "
10878 "breakpoint %d\n"),
876fa593 10879 old_loc->owner->number);
20874c92
VP
10880 }
10881 removed = 1;
10882 }
0d381245 10883 }
74960c60
VP
10884
10885 if (!found_object)
1c5cfe86 10886 {
db82e815
PA
10887 if (removed && non_stop
10888 && breakpoint_address_is_meaningful (old_loc->owner)
10889 && !is_hardware_watchpoint (old_loc->owner))
20874c92 10890 {
db82e815
PA
10891 /* This location was removed from the target. In
10892 non-stop mode, a race condition is possible where
10893 we've removed a breakpoint, but stop events for that
10894 breakpoint are already queued and will arrive later.
10895 We apply an heuristic to be able to distinguish such
10896 SIGTRAPs from other random SIGTRAPs: we keep this
10897 breakpoint location for a bit, and will retire it
10898 after we see some number of events. The theory here
10899 is that reporting of events should, "on the average",
10900 be fair, so after a while we'll see events from all
10901 threads that have anything of interest, and no longer
10902 need to keep this breakpoint location around. We
10903 don't hold locations forever so to reduce chances of
10904 mistaking a non-breakpoint SIGTRAP for a breakpoint
10905 SIGTRAP.
10906
10907 The heuristic failing can be disastrous on
10908 decr_pc_after_break targets.
10909
10910 On decr_pc_after_break targets, like e.g., x86-linux,
10911 if we fail to recognize a late breakpoint SIGTRAP,
10912 because events_till_retirement has reached 0 too
10913 soon, we'll fail to do the PC adjustment, and report
10914 a random SIGTRAP to the user. When the user resumes
10915 the inferior, it will most likely immediately crash
2dec564e 10916 with SIGILL/SIGBUS/SIGSEGV, or worse, get silently
db82e815
PA
10917 corrupted, because of being resumed e.g., in the
10918 middle of a multi-byte instruction, or skipped a
10919 one-byte instruction. This was actually seen happen
10920 on native x86-linux, and should be less rare on
10921 targets that do not support new thread events, like
10922 remote, due to the heuristic depending on
10923 thread_count.
10924
10925 Mistaking a random SIGTRAP for a breakpoint trap
10926 causes similar symptoms (PC adjustment applied when
10927 it shouldn't), but then again, playing with SIGTRAPs
10928 behind the debugger's back is asking for trouble.
10929
10930 Since hardware watchpoint traps are always
10931 distinguishable from other traps, so we don't need to
10932 apply keep hardware watchpoint moribund locations
10933 around. We simply always ignore hardware watchpoint
10934 traps we can no longer explain. */
10935
876fa593
JK
10936 old_loc->events_till_retirement = 3 * (thread_count () + 1);
10937 old_loc->owner = NULL;
20874c92 10938
876fa593 10939 VEC_safe_push (bp_location_p, moribund_locations, old_loc);
1c5cfe86
PA
10940 }
10941 else
f431efe5
PA
10942 {
10943 old_loc->owner = NULL;
10944 decref_bp_location (&old_loc);
10945 }
20874c92 10946 }
74960c60 10947 }
1c5cfe86 10948
348d480f
PA
10949 /* Rescan breakpoints at the same address and section, marking the
10950 first one as "first" and any others as "duplicates". This is so
10951 that the bpt instruction is only inserted once. If we have a
10952 permanent breakpoint at the same place as BPT, make that one the
10953 official one, and the rest as duplicates. Permanent breakpoints
10954 are sorted first for the same address.
10955
10956 Do the same for hardware watchpoints, but also considering the
10957 watchpoint's type (regular/access/read) and length. */
10958
10959 bp_loc_first = NULL;
10960 wp_loc_first = NULL;
10961 awp_loc_first = NULL;
10962 rwp_loc_first = NULL;
10963 ALL_BP_LOCATIONS (loc, locp)
10964 {
10965 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always
10966 non-NULL. */
348d480f 10967 struct bp_location **loc_first_p;
d3fbdd86 10968 b = loc->owner;
348d480f 10969
f8eba3c6 10970 if (!should_be_inserted (loc)
348d480f 10971 || !breakpoint_address_is_meaningful (b)
1e4d1764
YQ
10972 /* Don't detect duplicate for tracepoint locations because they are
10973 never duplicated. See the comments in field `duplicate' of
10974 `struct bp_location'. */
348d480f
PA
10975 || is_tracepoint (b))
10976 continue;
10977
10978 /* Permanent breakpoint should always be inserted. */
10979 if (b->enable_state == bp_permanent && ! loc->inserted)
10980 internal_error (__FILE__, __LINE__,
10981 _("allegedly permanent breakpoint is not "
10982 "actually inserted"));
10983
10984 if (b->type == bp_hardware_watchpoint)
10985 loc_first_p = &wp_loc_first;
10986 else if (b->type == bp_read_watchpoint)
10987 loc_first_p = &rwp_loc_first;
10988 else if (b->type == bp_access_watchpoint)
10989 loc_first_p = &awp_loc_first;
10990 else
10991 loc_first_p = &bp_loc_first;
10992
10993 if (*loc_first_p == NULL
10994 || (overlay_debugging && loc->section != (*loc_first_p)->section)
10995 || !breakpoint_locations_match (loc, *loc_first_p))
10996 {
10997 *loc_first_p = loc;
10998 loc->duplicate = 0;
10999 continue;
11000 }
11001
934709f0
PW
11002
11003 /* This and the above ensure the invariant that the first location
11004 is not duplicated, and is the inserted one.
11005 All following are marked as duplicated, and are not inserted. */
11006 if (loc->inserted)
11007 swap_insertion (loc, *loc_first_p);
348d480f
PA
11008 loc->duplicate = 1;
11009
11010 if ((*loc_first_p)->owner->enable_state == bp_permanent && loc->inserted
11011 && b->enable_state != bp_permanent)
11012 internal_error (__FILE__, __LINE__,
11013 _("another breakpoint was inserted on top of "
11014 "a permanent breakpoint"));
11015 }
11016
11017 if (breakpoints_always_inserted_mode () && should_insert
11018 && (have_live_inferiors ()
11019 || (gdbarch_has_global_breakpoints (target_gdbarch))))
11020 insert_breakpoint_locations ();
11021
1e4d1764
YQ
11022 if (should_insert)
11023 download_tracepoint_locations ();
11024
348d480f
PA
11025 do_cleanups (cleanups);
11026}
11027
11028void
11029breakpoint_retire_moribund (void)
11030{
11031 struct bp_location *loc;
11032 int ix;
11033
11034 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
11035 if (--(loc->events_till_retirement) == 0)
11036 {
11037 decref_bp_location (&loc);
11038 VEC_unordered_remove (bp_location_p, moribund_locations, ix);
11039 --ix;
11040 }
11041}
11042
11043static void
11044update_global_location_list_nothrow (int inserting)
11045{
bfd189b1 11046 volatile struct gdb_exception e;
348d480f
PA
11047
11048 TRY_CATCH (e, RETURN_MASK_ERROR)
11049 update_global_location_list (inserting);
11050}
11051
11052/* Clear BKP from a BPS. */
11053
11054static void
11055bpstat_remove_bp_location (bpstat bps, struct breakpoint *bpt)
11056{
11057 bpstat bs;
11058
11059 for (bs = bps; bs; bs = bs->next)
11060 if (bs->breakpoint_at == bpt)
11061 {
11062 bs->breakpoint_at = NULL;
11063 bs->old_val = NULL;
11064 /* bs->commands will be freed later. */
11065 }
11066}
11067
11068/* Callback for iterate_over_threads. */
11069static int
11070bpstat_remove_breakpoint_callback (struct thread_info *th, void *data)
11071{
11072 struct breakpoint *bpt = data;
11073
11074 bpstat_remove_bp_location (th->control.stop_bpstat, bpt);
11075 return 0;
11076}
11077
11078/* Helper for breakpoint and tracepoint breakpoint_ops->mention
11079 callbacks. */
11080
11081static void
11082say_where (struct breakpoint *b)
11083{
79a45e25 11084 struct ui_out *uiout = current_uiout;
348d480f
PA
11085 struct value_print_options opts;
11086
11087 get_user_print_options (&opts);
11088
11089 /* i18n: cagney/2005-02-11: Below needs to be merged into a
11090 single string. */
11091 if (b->loc == NULL)
11092 {
11093 printf_filtered (_(" (%s) pending."), b->addr_string);
11094 }
11095 else
11096 {
f8eba3c6 11097 if (opts.addressprint || b->loc->source_file == NULL)
348d480f
PA
11098 {
11099 printf_filtered (" at ");
11100 fputs_filtered (paddress (b->loc->gdbarch, b->loc->address),
11101 gdb_stdout);
11102 }
f8eba3c6
TT
11103 if (b->loc->source_file)
11104 {
11105 /* If there is a single location, we can print the location
11106 more nicely. */
11107 if (b->loc->next == NULL)
11108 printf_filtered (": file %s, line %d.",
11109 b->loc->source_file, b->loc->line_number);
11110 else
11111 /* This is not ideal, but each location may have a
11112 different file name, and this at least reflects the
11113 real situation somewhat. */
11114 printf_filtered (": %s.", b->addr_string);
11115 }
348d480f
PA
11116
11117 if (b->loc->next)
11118 {
11119 struct bp_location *loc = b->loc;
11120 int n = 0;
11121 for (; loc; loc = loc->next)
11122 ++n;
11123 printf_filtered (" (%d locations)", n);
11124 }
11125 }
11126}
11127
348d480f
PA
11128/* Default bp_location_ops methods. */
11129
11130static void
11131bp_location_dtor (struct bp_location *self)
11132{
11133 xfree (self->cond);
11134 xfree (self->function_name);
f8eba3c6 11135 xfree (self->source_file);
348d480f
PA
11136}
11137
11138static const struct bp_location_ops bp_location_ops =
11139{
11140 bp_location_dtor
11141};
11142
2060206e
PA
11143/* Default breakpoint_ops methods all breakpoint_ops ultimately
11144 inherit from. */
348d480f 11145
2060206e
PA
11146static void
11147base_breakpoint_dtor (struct breakpoint *self)
348d480f
PA
11148{
11149 decref_counted_command_line (&self->commands);
11150 xfree (self->cond_string);
348d480f 11151 xfree (self->addr_string);
f8eba3c6 11152 xfree (self->filter);
348d480f 11153 xfree (self->addr_string_range_end);
348d480f
PA
11154}
11155
2060206e
PA
11156static struct bp_location *
11157base_breakpoint_allocate_location (struct breakpoint *self)
348d480f
PA
11158{
11159 struct bp_location *loc;
11160
11161 loc = XNEW (struct bp_location);
11162 init_bp_location (loc, &bp_location_ops, self);
11163 return loc;
11164}
11165
2060206e
PA
11166static void
11167base_breakpoint_re_set (struct breakpoint *b)
11168{
11169 /* Nothing to re-set. */
11170}
11171
11172#define internal_error_pure_virtual_called() \
11173 gdb_assert_not_reached ("pure virtual function called")
11174
11175static int
11176base_breakpoint_insert_location (struct bp_location *bl)
11177{
11178 internal_error_pure_virtual_called ();
11179}
11180
11181static int
11182base_breakpoint_remove_location (struct bp_location *bl)
11183{
11184 internal_error_pure_virtual_called ();
11185}
11186
11187static int
11188base_breakpoint_breakpoint_hit (const struct bp_location *bl,
11189 struct address_space *aspace,
09ac7c10
TT
11190 CORE_ADDR bp_addr,
11191 const struct target_waitstatus *ws)
2060206e
PA
11192{
11193 internal_error_pure_virtual_called ();
11194}
11195
11196static void
11197base_breakpoint_check_status (bpstat bs)
11198{
11199 /* Always stop. */
11200}
11201
11202/* A "works_in_software_mode" breakpoint_ops method that just internal
11203 errors. */
11204
11205static int
11206base_breakpoint_works_in_software_mode (const struct breakpoint *b)
11207{
11208 internal_error_pure_virtual_called ();
11209}
11210
11211/* A "resources_needed" breakpoint_ops method that just internal
11212 errors. */
11213
11214static int
11215base_breakpoint_resources_needed (const struct bp_location *bl)
11216{
11217 internal_error_pure_virtual_called ();
11218}
11219
11220static enum print_stop_action
11221base_breakpoint_print_it (bpstat bs)
11222{
11223 internal_error_pure_virtual_called ();
11224}
11225
11226static void
11227base_breakpoint_print_one_detail (const struct breakpoint *self,
11228 struct ui_out *uiout)
11229{
11230 /* nothing */
11231}
11232
11233static void
11234base_breakpoint_print_mention (struct breakpoint *b)
11235{
11236 internal_error_pure_virtual_called ();
11237}
11238
11239static void
11240base_breakpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
11241{
11242 internal_error_pure_virtual_called ();
11243}
11244
983af33b
SDJ
11245static void
11246base_breakpoint_create_sals_from_address (char **arg,
11247 struct linespec_result *canonical,
11248 enum bptype type_wanted,
11249 char *addr_start,
11250 char **copy_arg)
11251{
11252 internal_error_pure_virtual_called ();
11253}
11254
11255static void
11256base_breakpoint_create_breakpoints_sal (struct gdbarch *gdbarch,
11257 struct linespec_result *c,
11258 struct linespec_sals *lsal,
11259 char *cond_string,
11260 enum bptype type_wanted,
11261 enum bpdisp disposition,
11262 int thread,
11263 int task, int ignore_count,
11264 const struct breakpoint_ops *o,
11265 int from_tty, int enabled,
11266 int internal)
11267{
11268 internal_error_pure_virtual_called ();
11269}
11270
11271static void
11272base_breakpoint_decode_linespec (struct breakpoint *b, char **s,
11273 struct symtabs_and_lines *sals)
11274{
11275 internal_error_pure_virtual_called ();
11276}
11277
2060206e
PA
11278static struct breakpoint_ops base_breakpoint_ops =
11279{
11280 base_breakpoint_dtor,
11281 base_breakpoint_allocate_location,
11282 base_breakpoint_re_set,
11283 base_breakpoint_insert_location,
11284 base_breakpoint_remove_location,
11285 base_breakpoint_breakpoint_hit,
11286 base_breakpoint_check_status,
11287 base_breakpoint_resources_needed,
11288 base_breakpoint_works_in_software_mode,
11289 base_breakpoint_print_it,
11290 NULL,
11291 base_breakpoint_print_one_detail,
11292 base_breakpoint_print_mention,
983af33b
SDJ
11293 base_breakpoint_print_recreate,
11294 base_breakpoint_create_sals_from_address,
11295 base_breakpoint_create_breakpoints_sal,
11296 base_breakpoint_decode_linespec,
2060206e
PA
11297};
11298
11299/* Default breakpoint_ops methods. */
11300
11301static void
348d480f
PA
11302bkpt_re_set (struct breakpoint *b)
11303{
06edf0c0
PA
11304 /* FIXME: is this still reachable? */
11305 if (b->addr_string == NULL)
11306 {
11307 /* Anything without a string can't be re-set. */
348d480f 11308 delete_breakpoint (b);
06edf0c0 11309 return;
348d480f 11310 }
06edf0c0
PA
11311
11312 breakpoint_re_set_default (b);
348d480f
PA
11313}
11314
2060206e 11315static int
348d480f
PA
11316bkpt_insert_location (struct bp_location *bl)
11317{
11318 if (bl->loc_type == bp_loc_hardware_breakpoint)
11319 return target_insert_hw_breakpoint (bl->gdbarch,
11320 &bl->target_info);
11321 else
11322 return target_insert_breakpoint (bl->gdbarch,
11323 &bl->target_info);
11324}
11325
2060206e 11326static int
348d480f
PA
11327bkpt_remove_location (struct bp_location *bl)
11328{
11329 if (bl->loc_type == bp_loc_hardware_breakpoint)
11330 return target_remove_hw_breakpoint (bl->gdbarch, &bl->target_info);
11331 else
11332 return target_remove_breakpoint (bl->gdbarch, &bl->target_info);
11333}
11334
2060206e 11335static int
348d480f 11336bkpt_breakpoint_hit (const struct bp_location *bl,
09ac7c10
TT
11337 struct address_space *aspace, CORE_ADDR bp_addr,
11338 const struct target_waitstatus *ws)
348d480f
PA
11339{
11340 struct breakpoint *b = bl->owner;
11341
09ac7c10
TT
11342 if (ws->kind != TARGET_WAITKIND_STOPPED
11343 || ws->value.sig != TARGET_SIGNAL_TRAP)
11344 return 0;
11345
348d480f
PA
11346 if (!breakpoint_address_match (bl->pspace->aspace, bl->address,
11347 aspace, bp_addr))
11348 return 0;
11349
11350 if (overlay_debugging /* unmapped overlay section */
11351 && section_is_overlay (bl->section)
11352 && !section_is_mapped (bl->section))
11353 return 0;
11354
11355 return 1;
11356}
11357
2060206e 11358static int
348d480f
PA
11359bkpt_resources_needed (const struct bp_location *bl)
11360{
11361 gdb_assert (bl->owner->type == bp_hardware_breakpoint);
11362
11363 return 1;
11364}
11365
2060206e 11366static enum print_stop_action
348d480f
PA
11367bkpt_print_it (bpstat bs)
11368{
348d480f
PA
11369 struct breakpoint *b;
11370 const struct bp_location *bl;
001c8c33 11371 int bp_temp;
79a45e25 11372 struct ui_out *uiout = current_uiout;
348d480f
PA
11373
11374 gdb_assert (bs->bp_location_at != NULL);
11375
11376 bl = bs->bp_location_at;
11377 b = bs->breakpoint_at;
11378
001c8c33
PA
11379 bp_temp = b->disposition == disp_del;
11380 if (bl->address != bl->requested_address)
11381 breakpoint_adjustment_warning (bl->requested_address,
11382 bl->address,
11383 b->number, 1);
11384 annotate_breakpoint (b->number);
11385 if (bp_temp)
11386 ui_out_text (uiout, "\nTemporary breakpoint ");
11387 else
11388 ui_out_text (uiout, "\nBreakpoint ");
11389 if (ui_out_is_mi_like_p (uiout))
348d480f 11390 {
001c8c33
PA
11391 ui_out_field_string (uiout, "reason",
11392 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11393 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
06edf0c0 11394 }
001c8c33
PA
11395 ui_out_field_int (uiout, "bkptno", b->number);
11396 ui_out_text (uiout, ", ");
06edf0c0 11397
001c8c33 11398 return PRINT_SRC_AND_LOC;
06edf0c0
PA
11399}
11400
2060206e 11401static void
06edf0c0
PA
11402bkpt_print_mention (struct breakpoint *b)
11403{
79a45e25 11404 if (ui_out_is_mi_like_p (current_uiout))
06edf0c0
PA
11405 return;
11406
11407 switch (b->type)
11408 {
11409 case bp_breakpoint:
11410 case bp_gnu_ifunc_resolver:
11411 if (b->disposition == disp_del)
11412 printf_filtered (_("Temporary breakpoint"));
11413 else
11414 printf_filtered (_("Breakpoint"));
11415 printf_filtered (_(" %d"), b->number);
11416 if (b->type == bp_gnu_ifunc_resolver)
11417 printf_filtered (_(" at gnu-indirect-function resolver"));
11418 break;
11419 case bp_hardware_breakpoint:
11420 printf_filtered (_("Hardware assisted breakpoint %d"), b->number);
11421 break;
11422 }
11423
11424 say_where (b);
11425}
11426
2060206e 11427static void
06edf0c0
PA
11428bkpt_print_recreate (struct breakpoint *tp, struct ui_file *fp)
11429{
11430 if (tp->type == bp_breakpoint && tp->disposition == disp_del)
11431 fprintf_unfiltered (fp, "tbreak");
11432 else if (tp->type == bp_breakpoint)
11433 fprintf_unfiltered (fp, "break");
11434 else if (tp->type == bp_hardware_breakpoint
11435 && tp->disposition == disp_del)
11436 fprintf_unfiltered (fp, "thbreak");
11437 else if (tp->type == bp_hardware_breakpoint)
11438 fprintf_unfiltered (fp, "hbreak");
11439 else
11440 internal_error (__FILE__, __LINE__,
11441 _("unhandled breakpoint type %d"), (int) tp->type);
11442
2060206e 11443 fprintf_unfiltered (fp, " %s", tp->addr_string);
dd11a36c 11444 print_recreate_thread (tp, fp);
06edf0c0
PA
11445}
11446
983af33b
SDJ
11447static void
11448bkpt_create_sals_from_address (char **arg,
11449 struct linespec_result *canonical,
11450 enum bptype type_wanted,
11451 char *addr_start, char **copy_arg)
11452{
11453 create_sals_from_address_default (arg, canonical, type_wanted,
11454 addr_start, copy_arg);
11455}
11456
11457static void
11458bkpt_create_breakpoints_sal (struct gdbarch *gdbarch,
11459 struct linespec_result *canonical,
11460 struct linespec_sals *lsal,
11461 char *cond_string,
11462 enum bptype type_wanted,
11463 enum bpdisp disposition,
11464 int thread,
11465 int task, int ignore_count,
11466 const struct breakpoint_ops *ops,
11467 int from_tty, int enabled,
11468 int internal)
11469{
11470 create_breakpoints_sal_default (gdbarch, canonical, lsal,
11471 cond_string, type_wanted,
11472 disposition, thread, task,
11473 ignore_count, ops, from_tty,
11474 enabled, internal);
11475}
11476
11477static void
11478bkpt_decode_linespec (struct breakpoint *b, char **s,
11479 struct symtabs_and_lines *sals)
11480{
11481 decode_linespec_default (b, s, sals);
11482}
11483
06edf0c0
PA
11484/* Virtual table for internal breakpoints. */
11485
11486static void
11487internal_bkpt_re_set (struct breakpoint *b)
11488{
11489 switch (b->type)
11490 {
11491 /* Delete overlay event and longjmp master breakpoints; they
11492 will be reset later by breakpoint_re_set. */
11493 case bp_overlay_event:
11494 case bp_longjmp_master:
11495 case bp_std_terminate_master:
11496 case bp_exception_master:
11497 delete_breakpoint (b);
11498 break;
11499
11500 /* This breakpoint is special, it's set up when the inferior
11501 starts and we really don't want to touch it. */
11502 case bp_shlib_event:
11503
11504 /* Like bp_shlib_event, this breakpoint type is special. Once
11505 it is set up, we do not want to touch it. */
11506 case bp_thread_event:
11507 break;
11508 }
11509}
11510
11511static void
11512internal_bkpt_check_status (bpstat bs)
11513{
a9b3a50f
PA
11514 if (bs->breakpoint_at->type == bp_shlib_event)
11515 {
11516 /* If requested, stop when the dynamic linker notifies GDB of
11517 events. This allows the user to get control and place
11518 breakpoints in initializer routines for dynamically loaded
11519 objects (among other things). */
11520 bs->stop = stop_on_solib_events;
11521 bs->print = stop_on_solib_events;
11522 }
11523 else
11524 bs->stop = 0;
06edf0c0
PA
11525}
11526
11527static enum print_stop_action
11528internal_bkpt_print_it (bpstat bs)
11529{
36dfb11c 11530 struct ui_out *uiout = current_uiout;
06edf0c0 11531 struct breakpoint *b;
06edf0c0 11532
06edf0c0
PA
11533 b = bs->breakpoint_at;
11534
06edf0c0
PA
11535 switch (b->type)
11536 {
348d480f
PA
11537 case bp_shlib_event:
11538 /* Did we stop because the user set the stop_on_solib_events
11539 variable? (If so, we report this as a generic, "Stopped due
11540 to shlib event" message.) */
edcc5120 11541 print_solib_event (0);
348d480f
PA
11542 break;
11543
11544 case bp_thread_event:
11545 /* Not sure how we will get here.
11546 GDB should not stop for these breakpoints. */
11547 printf_filtered (_("Thread Event Breakpoint: gdb should not stop!\n"));
348d480f
PA
11548 break;
11549
11550 case bp_overlay_event:
11551 /* By analogy with the thread event, GDB should not stop for these. */
11552 printf_filtered (_("Overlay Event Breakpoint: gdb should not stop!\n"));
348d480f
PA
11553 break;
11554
11555 case bp_longjmp_master:
11556 /* These should never be enabled. */
11557 printf_filtered (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
348d480f
PA
11558 break;
11559
11560 case bp_std_terminate_master:
11561 /* These should never be enabled. */
11562 printf_filtered (_("std::terminate Master Breakpoint: "
11563 "gdb should not stop!\n"));
348d480f
PA
11564 break;
11565
11566 case bp_exception_master:
11567 /* These should never be enabled. */
11568 printf_filtered (_("Exception Master Breakpoint: "
11569 "gdb should not stop!\n"));
06edf0c0
PA
11570 break;
11571 }
11572
001c8c33 11573 return PRINT_NOTHING;
06edf0c0
PA
11574}
11575
11576static void
11577internal_bkpt_print_mention (struct breakpoint *b)
11578{
11579 /* Nothing to mention. These breakpoints are internal. */
11580}
11581
06edf0c0
PA
11582/* Virtual table for momentary breakpoints */
11583
11584static void
11585momentary_bkpt_re_set (struct breakpoint *b)
11586{
11587 /* Keep temporary breakpoints, which can be encountered when we step
11588 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
11589 Otherwise these should have been blown away via the cleanup chain
11590 or by breakpoint_init_inferior when we rerun the executable. */
11591}
11592
11593static void
11594momentary_bkpt_check_status (bpstat bs)
11595{
11596 /* Nothing. The point of these breakpoints is causing a stop. */
11597}
11598
11599static enum print_stop_action
11600momentary_bkpt_print_it (bpstat bs)
11601{
79a45e25
PA
11602 struct ui_out *uiout = current_uiout;
11603
001c8c33 11604 if (ui_out_is_mi_like_p (uiout))
06edf0c0 11605 {
001c8c33 11606 struct breakpoint *b = bs->breakpoint_at;
348d480f 11607
001c8c33
PA
11608 switch (b->type)
11609 {
11610 case bp_finish:
11611 ui_out_field_string
11612 (uiout, "reason",
11613 async_reason_lookup (EXEC_ASYNC_FUNCTION_FINISHED));
11614 break;
348d480f 11615
001c8c33
PA
11616 case bp_until:
11617 ui_out_field_string
11618 (uiout, "reason",
11619 async_reason_lookup (EXEC_ASYNC_LOCATION_REACHED));
11620 break;
11621 }
348d480f
PA
11622 }
11623
001c8c33 11624 return PRINT_UNKNOWN;
348d480f
PA
11625}
11626
06edf0c0
PA
11627static void
11628momentary_bkpt_print_mention (struct breakpoint *b)
348d480f 11629{
06edf0c0 11630 /* Nothing to mention. These breakpoints are internal. */
348d480f
PA
11631}
11632
348d480f 11633/* The breakpoint_ops structure to be used in tracepoints. */
876fa593 11634
348d480f
PA
11635static void
11636tracepoint_re_set (struct breakpoint *b)
11637{
11638 breakpoint_re_set_default (b);
11639}
876fa593 11640
348d480f
PA
11641static int
11642tracepoint_breakpoint_hit (const struct bp_location *bl,
09ac7c10
TT
11643 struct address_space *aspace, CORE_ADDR bp_addr,
11644 const struct target_waitstatus *ws)
348d480f
PA
11645{
11646 /* By definition, the inferior does not report stops at
11647 tracepoints. */
11648 return 0;
74960c60
VP
11649}
11650
11651static void
348d480f
PA
11652tracepoint_print_one_detail (const struct breakpoint *self,
11653 struct ui_out *uiout)
74960c60 11654{
d9b3f62e
PA
11655 struct tracepoint *tp = (struct tracepoint *) self;
11656 if (tp->static_trace_marker_id)
348d480f
PA
11657 {
11658 gdb_assert (self->type == bp_static_tracepoint);
cc59ec59 11659
348d480f
PA
11660 ui_out_text (uiout, "\tmarker id is ");
11661 ui_out_field_string (uiout, "static-tracepoint-marker-string-id",
d9b3f62e 11662 tp->static_trace_marker_id);
348d480f
PA
11663 ui_out_text (uiout, "\n");
11664 }
0d381245
VP
11665}
11666
a474d7c2 11667static void
348d480f 11668tracepoint_print_mention (struct breakpoint *b)
a474d7c2 11669{
79a45e25 11670 if (ui_out_is_mi_like_p (current_uiout))
348d480f 11671 return;
cc59ec59 11672
348d480f
PA
11673 switch (b->type)
11674 {
11675 case bp_tracepoint:
11676 printf_filtered (_("Tracepoint"));
11677 printf_filtered (_(" %d"), b->number);
11678 break;
11679 case bp_fast_tracepoint:
11680 printf_filtered (_("Fast tracepoint"));
11681 printf_filtered (_(" %d"), b->number);
11682 break;
11683 case bp_static_tracepoint:
11684 printf_filtered (_("Static tracepoint"));
11685 printf_filtered (_(" %d"), b->number);
11686 break;
11687 default:
11688 internal_error (__FILE__, __LINE__,
11689 _("unhandled tracepoint type %d"), (int) b->type);
11690 }
11691
11692 say_where (b);
a474d7c2
PA
11693}
11694
348d480f 11695static void
d9b3f62e 11696tracepoint_print_recreate (struct breakpoint *self, struct ui_file *fp)
a474d7c2 11697{
d9b3f62e
PA
11698 struct tracepoint *tp = (struct tracepoint *) self;
11699
11700 if (self->type == bp_fast_tracepoint)
348d480f 11701 fprintf_unfiltered (fp, "ftrace");
d9b3f62e 11702 if (self->type == bp_static_tracepoint)
348d480f 11703 fprintf_unfiltered (fp, "strace");
d9b3f62e 11704 else if (self->type == bp_tracepoint)
348d480f
PA
11705 fprintf_unfiltered (fp, "trace");
11706 else
11707 internal_error (__FILE__, __LINE__,
d9b3f62e 11708 _("unhandled tracepoint type %d"), (int) self->type);
cc59ec59 11709
d9b3f62e
PA
11710 fprintf_unfiltered (fp, " %s", self->addr_string);
11711 print_recreate_thread (self, fp);
11712
11713 if (tp->pass_count)
11714 fprintf_unfiltered (fp, " passcount %d\n", tp->pass_count);
a474d7c2
PA
11715}
11716
983af33b
SDJ
11717static void
11718tracepoint_create_sals_from_address (char **arg,
11719 struct linespec_result *canonical,
11720 enum bptype type_wanted,
11721 char *addr_start, char **copy_arg)
11722{
11723 create_sals_from_address_default (arg, canonical, type_wanted,
11724 addr_start, copy_arg);
11725}
11726
11727static void
11728tracepoint_create_breakpoints_sal (struct gdbarch *gdbarch,
11729 struct linespec_result *canonical,
11730 struct linespec_sals *lsal,
11731 char *cond_string,
11732 enum bptype type_wanted,
11733 enum bpdisp disposition,
11734 int thread,
11735 int task, int ignore_count,
11736 const struct breakpoint_ops *ops,
11737 int from_tty, int enabled,
11738 int internal)
11739{
11740 create_breakpoints_sal_default (gdbarch, canonical, lsal,
11741 cond_string, type_wanted,
11742 disposition, thread, task,
11743 ignore_count, ops, from_tty,
11744 enabled, internal);
11745}
11746
11747static void
11748tracepoint_decode_linespec (struct breakpoint *b, char **s,
11749 struct symtabs_and_lines *sals)
11750{
11751 decode_linespec_default (b, s, sals);
11752}
11753
2060206e 11754struct breakpoint_ops tracepoint_breakpoint_ops;
348d480f 11755
983af33b
SDJ
11756/* The breakpoint_ops structure to be used on static tracepoints with
11757 markers (`-m'). */
11758
11759static void
11760strace_marker_create_sals_from_address (char **arg,
11761 struct linespec_result *canonical,
11762 enum bptype type_wanted,
11763 char *addr_start, char **copy_arg)
11764{
11765 struct linespec_sals lsal;
11766
11767 lsal.sals = decode_static_tracepoint_spec (arg);
11768
11769 *copy_arg = savestring (addr_start, *arg - addr_start);
11770
11771 canonical->addr_string = xstrdup (*copy_arg);
11772 lsal.canonical = xstrdup (*copy_arg);
11773 VEC_safe_push (linespec_sals, canonical->sals, &lsal);
11774}
11775
11776static void
11777strace_marker_create_breakpoints_sal (struct gdbarch *gdbarch,
11778 struct linespec_result *canonical,
11779 struct linespec_sals *lsal,
11780 char *cond_string,
11781 enum bptype type_wanted,
11782 enum bpdisp disposition,
11783 int thread,
11784 int task, int ignore_count,
11785 const struct breakpoint_ops *ops,
11786 int from_tty, int enabled,
11787 int internal)
11788{
11789 int i;
11790
11791 /* If the user is creating a static tracepoint by marker id
11792 (strace -m MARKER_ID), then store the sals index, so that
11793 breakpoint_re_set can try to match up which of the newly
11794 found markers corresponds to this one, and, don't try to
11795 expand multiple locations for each sal, given than SALS
11796 already should contain all sals for MARKER_ID. */
11797
11798 for (i = 0; i < lsal->sals.nelts; ++i)
11799 {
11800 struct symtabs_and_lines expanded;
11801 struct tracepoint *tp;
11802 struct cleanup *old_chain;
11803 char *addr_string;
11804
11805 expanded.nelts = 1;
11806 expanded.sals = &lsal->sals.sals[i];
11807
11808 addr_string = xstrdup (canonical->addr_string);
11809 old_chain = make_cleanup (xfree, addr_string);
11810
11811 tp = XCNEW (struct tracepoint);
11812 init_breakpoint_sal (&tp->base, gdbarch, expanded,
11813 addr_string, NULL,
11814 cond_string, type_wanted, disposition,
11815 thread, task, ignore_count, ops,
11816 from_tty, enabled, internal,
11817 canonical->special_display);
11818 /* Given that its possible to have multiple markers with
11819 the same string id, if the user is creating a static
11820 tracepoint by marker id ("strace -m MARKER_ID"), then
11821 store the sals index, so that breakpoint_re_set can
11822 try to match up which of the newly found markers
11823 corresponds to this one */
11824 tp->static_trace_marker_id_idx = i;
11825
11826 install_breakpoint (internal, &tp->base, 0);
11827
11828 discard_cleanups (old_chain);
11829 }
11830}
11831
11832static void
11833strace_marker_decode_linespec (struct breakpoint *b, char **s,
11834 struct symtabs_and_lines *sals)
11835{
11836 struct tracepoint *tp = (struct tracepoint *) b;
11837
11838 *sals = decode_static_tracepoint_spec (s);
11839 if (sals->nelts > tp->static_trace_marker_id_idx)
11840 {
11841 sals->sals[0] = sals->sals[tp->static_trace_marker_id_idx];
11842 sals->nelts = 1;
11843 }
11844 else
11845 error (_("marker %s not found"), tp->static_trace_marker_id);
11846}
11847
11848static struct breakpoint_ops strace_marker_breakpoint_ops;
11849
11850static int
11851strace_marker_p (struct breakpoint *b)
11852{
11853 return b->ops == &strace_marker_breakpoint_ops;
11854}
11855
53a5351d 11856/* Delete a breakpoint and clean up all traces of it in the data
f431efe5 11857 structures. */
c906108c
SS
11858
11859void
fba45db2 11860delete_breakpoint (struct breakpoint *bpt)
c906108c 11861{
52f0bd74 11862 struct breakpoint *b;
c906108c 11863
8a3fe4f8 11864 gdb_assert (bpt != NULL);
c906108c 11865
4a64f543
MS
11866 /* Has this bp already been deleted? This can happen because
11867 multiple lists can hold pointers to bp's. bpstat lists are
11868 especial culprits.
11869
11870 One example of this happening is a watchpoint's scope bp. When
11871 the scope bp triggers, we notice that the watchpoint is out of
11872 scope, and delete it. We also delete its scope bp. But the
11873 scope bp is marked "auto-deleting", and is already on a bpstat.
11874 That bpstat is then checked for auto-deleting bp's, which are
11875 deleted.
11876
11877 A real solution to this problem might involve reference counts in
11878 bp's, and/or giving them pointers back to their referencing
11879 bpstat's, and teaching delete_breakpoint to only free a bp's
11880 storage when no more references were extent. A cheaper bandaid
11881 was chosen. */
c906108c
SS
11882 if (bpt->type == bp_none)
11883 return;
11884
4a64f543
MS
11885 /* At least avoid this stale reference until the reference counting
11886 of breakpoints gets resolved. */
d0fb5eae 11887 if (bpt->related_breakpoint != bpt)
e5a0a904 11888 {
d0fb5eae 11889 struct breakpoint *related;
3a5c3e22 11890 struct watchpoint *w;
d0fb5eae
JK
11891
11892 if (bpt->type == bp_watchpoint_scope)
3a5c3e22 11893 w = (struct watchpoint *) bpt->related_breakpoint;
d0fb5eae 11894 else if (bpt->related_breakpoint->type == bp_watchpoint_scope)
3a5c3e22
PA
11895 w = (struct watchpoint *) bpt;
11896 else
11897 w = NULL;
11898 if (w != NULL)
11899 watchpoint_del_at_next_stop (w);
d0fb5eae
JK
11900
11901 /* Unlink bpt from the bpt->related_breakpoint ring. */
11902 for (related = bpt; related->related_breakpoint != bpt;
11903 related = related->related_breakpoint);
11904 related->related_breakpoint = bpt->related_breakpoint;
11905 bpt->related_breakpoint = bpt;
e5a0a904
JK
11906 }
11907
a9634178
TJB
11908 /* watch_command_1 creates a watchpoint but only sets its number if
11909 update_watchpoint succeeds in creating its bp_locations. If there's
11910 a problem in that process, we'll be asked to delete the half-created
11911 watchpoint. In that case, don't announce the deletion. */
11912 if (bpt->number)
11913 observer_notify_breakpoint_deleted (bpt);
c906108c 11914
c906108c
SS
11915 if (breakpoint_chain == bpt)
11916 breakpoint_chain = bpt->next;
11917
c906108c
SS
11918 ALL_BREAKPOINTS (b)
11919 if (b->next == bpt)
c5aa993b
JM
11920 {
11921 b->next = bpt->next;
11922 break;
11923 }
c906108c 11924
f431efe5
PA
11925 /* Be sure no bpstat's are pointing at the breakpoint after it's
11926 been freed. */
11927 /* FIXME, how can we find all bpstat's? We just check stop_bpstat
e5dd4106 11928 in all threads for now. Note that we cannot just remove bpstats
f431efe5
PA
11929 pointing at bpt from the stop_bpstat list entirely, as breakpoint
11930 commands are associated with the bpstat; if we remove it here,
11931 then the later call to bpstat_do_actions (&stop_bpstat); in
11932 event-top.c won't do anything, and temporary breakpoints with
11933 commands won't work. */
11934
11935 iterate_over_threads (bpstat_remove_breakpoint_callback, bpt);
11936
4a64f543
MS
11937 /* Now that breakpoint is removed from breakpoint list, update the
11938 global location list. This will remove locations that used to
11939 belong to this breakpoint. Do this before freeing the breakpoint
11940 itself, since remove_breakpoint looks at location's owner. It
11941 might be better design to have location completely
11942 self-contained, but it's not the case now. */
b60e7edf 11943 update_global_location_list (0);
74960c60 11944
348d480f 11945 bpt->ops->dtor (bpt);
4a64f543
MS
11946 /* On the chance that someone will soon try again to delete this
11947 same bp, we mark it as deleted before freeing its storage. */
c906108c 11948 bpt->type = bp_none;
b8c9b27d 11949 xfree (bpt);
c906108c
SS
11950}
11951
4d6140d9
AC
11952static void
11953do_delete_breakpoint_cleanup (void *b)
11954{
11955 delete_breakpoint (b);
11956}
11957
11958struct cleanup *
11959make_cleanup_delete_breakpoint (struct breakpoint *b)
11960{
11961 return make_cleanup (do_delete_breakpoint_cleanup, b);
11962}
11963
51be5b68
PA
11964/* Iterator function to call a user-provided callback function once
11965 for each of B and its related breakpoints. */
11966
11967static void
11968iterate_over_related_breakpoints (struct breakpoint *b,
11969 void (*function) (struct breakpoint *,
11970 void *),
11971 void *data)
11972{
11973 struct breakpoint *related;
11974
11975 related = b;
11976 do
11977 {
11978 struct breakpoint *next;
11979
11980 /* FUNCTION may delete RELATED. */
11981 next = related->related_breakpoint;
11982
11983 if (next == related)
11984 {
11985 /* RELATED is the last ring entry. */
11986 function (related, data);
11987
11988 /* FUNCTION may have deleted it, so we'd never reach back to
11989 B. There's nothing left to do anyway, so just break
11990 out. */
11991 break;
11992 }
11993 else
11994 function (related, data);
11995
11996 related = next;
11997 }
11998 while (related != b);
11999}
95a42b64
TT
12000
12001static void
12002do_delete_breakpoint (struct breakpoint *b, void *ignore)
12003{
12004 delete_breakpoint (b);
12005}
12006
51be5b68
PA
12007/* A callback for map_breakpoint_numbers that calls
12008 delete_breakpoint. */
12009
12010static void
12011do_map_delete_breakpoint (struct breakpoint *b, void *ignore)
12012{
12013 iterate_over_related_breakpoints (b, do_delete_breakpoint, NULL);
12014}
12015
c906108c 12016void
fba45db2 12017delete_command (char *arg, int from_tty)
c906108c 12018{
35df4500 12019 struct breakpoint *b, *b_tmp;
c906108c 12020
ea9365bb
TT
12021 dont_repeat ();
12022
c906108c
SS
12023 if (arg == 0)
12024 {
12025 int breaks_to_delete = 0;
12026
46c6471b
PA
12027 /* Delete all breakpoints if no argument. Do not delete
12028 internal breakpoints, these have to be deleted with an
12029 explicit breakpoint number argument. */
c5aa993b 12030 ALL_BREAKPOINTS (b)
46c6471b 12031 if (user_breakpoint_p (b))
973d738b
DJ
12032 {
12033 breaks_to_delete = 1;
12034 break;
12035 }
c906108c
SS
12036
12037 /* Ask user only if there are some breakpoints to delete. */
12038 if (!from_tty
e2e0b3e5 12039 || (breaks_to_delete && query (_("Delete all breakpoints? "))))
c906108c 12040 {
35df4500 12041 ALL_BREAKPOINTS_SAFE (b, b_tmp)
46c6471b 12042 if (user_breakpoint_p (b))
c5aa993b 12043 delete_breakpoint (b);
c906108c
SS
12044 }
12045 }
12046 else
51be5b68 12047 map_breakpoint_numbers (arg, do_map_delete_breakpoint, NULL);
c906108c
SS
12048}
12049
0d381245
VP
12050static int
12051all_locations_are_pending (struct bp_location *loc)
fe3f5fa8 12052{
0d381245 12053 for (; loc; loc = loc->next)
8645ff69
UW
12054 if (!loc->shlib_disabled
12055 && !loc->pspace->executing_startup)
0d381245
VP
12056 return 0;
12057 return 1;
fe3f5fa8
VP
12058}
12059
776592bf
DE
12060/* Subroutine of update_breakpoint_locations to simplify it.
12061 Return non-zero if multiple fns in list LOC have the same name.
12062 Null names are ignored. */
12063
12064static int
12065ambiguous_names_p (struct bp_location *loc)
12066{
12067 struct bp_location *l;
12068 htab_t htab = htab_create_alloc (13, htab_hash_string,
cc59ec59
MS
12069 (int (*) (const void *,
12070 const void *)) streq,
776592bf
DE
12071 NULL, xcalloc, xfree);
12072
12073 for (l = loc; l != NULL; l = l->next)
12074 {
12075 const char **slot;
12076 const char *name = l->function_name;
12077
12078 /* Allow for some names to be NULL, ignore them. */
12079 if (name == NULL)
12080 continue;
12081
12082 slot = (const char **) htab_find_slot (htab, (const void *) name,
12083 INSERT);
4a64f543
MS
12084 /* NOTE: We can assume slot != NULL here because xcalloc never
12085 returns NULL. */
776592bf
DE
12086 if (*slot != NULL)
12087 {
12088 htab_delete (htab);
12089 return 1;
12090 }
12091 *slot = name;
12092 }
12093
12094 htab_delete (htab);
12095 return 0;
12096}
12097
0fb4aa4b
PA
12098/* When symbols change, it probably means the sources changed as well,
12099 and it might mean the static tracepoint markers are no longer at
12100 the same address or line numbers they used to be at last we
12101 checked. Losing your static tracepoints whenever you rebuild is
12102 undesirable. This function tries to resync/rematch gdb static
12103 tracepoints with the markers on the target, for static tracepoints
12104 that have not been set by marker id. Static tracepoint that have
12105 been set by marker id are reset by marker id in breakpoint_re_set.
12106 The heuristic is:
12107
12108 1) For a tracepoint set at a specific address, look for a marker at
12109 the old PC. If one is found there, assume to be the same marker.
12110 If the name / string id of the marker found is different from the
12111 previous known name, assume that means the user renamed the marker
12112 in the sources, and output a warning.
12113
12114 2) For a tracepoint set at a given line number, look for a marker
12115 at the new address of the old line number. If one is found there,
12116 assume to be the same marker. If the name / string id of the
12117 marker found is different from the previous known name, assume that
12118 means the user renamed the marker in the sources, and output a
12119 warning.
12120
12121 3) If a marker is no longer found at the same address or line, it
12122 may mean the marker no longer exists. But it may also just mean
12123 the code changed a bit. Maybe the user added a few lines of code
12124 that made the marker move up or down (in line number terms). Ask
12125 the target for info about the marker with the string id as we knew
12126 it. If found, update line number and address in the matching
12127 static tracepoint. This will get confused if there's more than one
12128 marker with the same ID (possible in UST, although unadvised
12129 precisely because it confuses tools). */
12130
12131static struct symtab_and_line
12132update_static_tracepoint (struct breakpoint *b, struct symtab_and_line sal)
12133{
d9b3f62e 12134 struct tracepoint *tp = (struct tracepoint *) b;
0fb4aa4b
PA
12135 struct static_tracepoint_marker marker;
12136 CORE_ADDR pc;
12137 int i;
12138
12139 pc = sal.pc;
12140 if (sal.line)
12141 find_line_pc (sal.symtab, sal.line, &pc);
12142
12143 if (target_static_tracepoint_marker_at (pc, &marker))
12144 {
d9b3f62e 12145 if (strcmp (tp->static_trace_marker_id, marker.str_id) != 0)
0fb4aa4b
PA
12146 warning (_("static tracepoint %d changed probed marker from %s to %s"),
12147 b->number,
d9b3f62e 12148 tp->static_trace_marker_id, marker.str_id);
0fb4aa4b 12149
d9b3f62e
PA
12150 xfree (tp->static_trace_marker_id);
12151 tp->static_trace_marker_id = xstrdup (marker.str_id);
0fb4aa4b
PA
12152 release_static_tracepoint_marker (&marker);
12153
12154 return sal;
12155 }
12156
12157 /* Old marker wasn't found on target at lineno. Try looking it up
12158 by string ID. */
12159 if (!sal.explicit_pc
12160 && sal.line != 0
12161 && sal.symtab != NULL
d9b3f62e 12162 && tp->static_trace_marker_id != NULL)
0fb4aa4b
PA
12163 {
12164 VEC(static_tracepoint_marker_p) *markers;
12165
12166 markers
d9b3f62e 12167 = target_static_tracepoint_markers_by_strid (tp->static_trace_marker_id);
0fb4aa4b
PA
12168
12169 if (!VEC_empty(static_tracepoint_marker_p, markers))
12170 {
80e1d417 12171 struct symtab_and_line sal2;
0fb4aa4b 12172 struct symbol *sym;
80e1d417 12173 struct static_tracepoint_marker *tpmarker;
79a45e25 12174 struct ui_out *uiout = current_uiout;
0fb4aa4b 12175
80e1d417 12176 tpmarker = VEC_index (static_tracepoint_marker_p, markers, 0);
0fb4aa4b 12177
d9b3f62e 12178 xfree (tp->static_trace_marker_id);
80e1d417 12179 tp->static_trace_marker_id = xstrdup (tpmarker->str_id);
0fb4aa4b
PA
12180
12181 warning (_("marker for static tracepoint %d (%s) not "
12182 "found at previous line number"),
d9b3f62e 12183 b->number, tp->static_trace_marker_id);
0fb4aa4b 12184
80e1d417 12185 init_sal (&sal2);
0fb4aa4b 12186
80e1d417 12187 sal2.pc = tpmarker->address;
0fb4aa4b 12188
80e1d417
AS
12189 sal2 = find_pc_line (tpmarker->address, 0);
12190 sym = find_pc_sect_function (tpmarker->address, NULL);
0fb4aa4b
PA
12191 ui_out_text (uiout, "Now in ");
12192 if (sym)
12193 {
12194 ui_out_field_string (uiout, "func",
12195 SYMBOL_PRINT_NAME (sym));
12196 ui_out_text (uiout, " at ");
12197 }
80e1d417 12198 ui_out_field_string (uiout, "file", sal2.symtab->filename);
0fb4aa4b
PA
12199 ui_out_text (uiout, ":");
12200
12201 if (ui_out_is_mi_like_p (uiout))
12202 {
80e1d417 12203 char *fullname = symtab_to_fullname (sal2.symtab);
0fb4aa4b
PA
12204
12205 if (fullname)
12206 ui_out_field_string (uiout, "fullname", fullname);
12207 }
12208
80e1d417 12209 ui_out_field_int (uiout, "line", sal2.line);
0fb4aa4b
PA
12210 ui_out_text (uiout, "\n");
12211
80e1d417 12212 b->loc->line_number = sal2.line;
0fb4aa4b 12213
f8eba3c6 12214 xfree (b->loc->source_file);
0fb4aa4b 12215 if (sym)
80e1d417 12216 b->loc->source_file = xstrdup (sal2.symtab->filename);
0fb4aa4b 12217 else
f8eba3c6 12218 b->loc->source_file = NULL;
0fb4aa4b
PA
12219
12220 xfree (b->addr_string);
12221 b->addr_string = xstrprintf ("%s:%d",
80e1d417 12222 sal2.symtab->filename,
f8eba3c6 12223 b->loc->line_number);
0fb4aa4b
PA
12224
12225 /* Might be nice to check if function changed, and warn if
12226 so. */
12227
80e1d417 12228 release_static_tracepoint_marker (tpmarker);
0fb4aa4b
PA
12229 }
12230 }
12231 return sal;
12232}
12233
8d3788bd
VP
12234/* Returns 1 iff locations A and B are sufficiently same that
12235 we don't need to report breakpoint as changed. */
12236
12237static int
12238locations_are_equal (struct bp_location *a, struct bp_location *b)
12239{
12240 while (a && b)
12241 {
12242 if (a->address != b->address)
12243 return 0;
12244
12245 if (a->shlib_disabled != b->shlib_disabled)
12246 return 0;
12247
12248 if (a->enabled != b->enabled)
12249 return 0;
12250
12251 a = a->next;
12252 b = b->next;
12253 }
12254
12255 if ((a == NULL) != (b == NULL))
12256 return 0;
12257
12258 return 1;
12259}
12260
f1310107
TJB
12261/* Create new breakpoint locations for B (a hardware or software breakpoint)
12262 based on SALS and SALS_END. If SALS_END.NELTS is not zero, then B is
12263 a ranged breakpoint. */
12264
0e30163f 12265void
0d381245 12266update_breakpoint_locations (struct breakpoint *b,
f1310107
TJB
12267 struct symtabs_and_lines sals,
12268 struct symtabs_and_lines sals_end)
fe3f5fa8
VP
12269{
12270 int i;
0d381245
VP
12271 struct bp_location *existing_locations = b->loc;
12272
f8eba3c6
TT
12273 if (sals_end.nelts != 0 && (sals.nelts != 1 || sals_end.nelts != 1))
12274 {
12275 /* Ranged breakpoints have only one start location and one end
12276 location. */
12277 b->enable_state = bp_disabled;
12278 update_global_location_list (1);
12279 printf_unfiltered (_("Could not reset ranged breakpoint %d: "
12280 "multiple locations found\n"),
12281 b->number);
12282 return;
12283 }
f1310107 12284
4a64f543
MS
12285 /* If there's no new locations, and all existing locations are
12286 pending, don't do anything. This optimizes the common case where
12287 all locations are in the same shared library, that was unloaded.
12288 We'd like to retain the location, so that when the library is
12289 loaded again, we don't loose the enabled/disabled status of the
12290 individual locations. */
0d381245 12291 if (all_locations_are_pending (existing_locations) && sals.nelts == 0)
fe3f5fa8
VP
12292 return;
12293
fe3f5fa8
VP
12294 b->loc = NULL;
12295
0d381245 12296 for (i = 0; i < sals.nelts; ++i)
fe3f5fa8 12297 {
f8eba3c6
TT
12298 struct bp_location *new_loc;
12299
12300 switch_to_program_space_and_thread (sals.sals[i].pspace);
12301
12302 new_loc = add_location_to_breakpoint (b, &(sals.sals[i]));
fe3f5fa8 12303
0d381245
VP
12304 /* Reparse conditions, they might contain references to the
12305 old symtab. */
12306 if (b->cond_string != NULL)
12307 {
f1310107 12308 char *s;
bfd189b1 12309 volatile struct gdb_exception e;
fe3f5fa8 12310
0d381245
VP
12311 s = b->cond_string;
12312 TRY_CATCH (e, RETURN_MASK_ERROR)
12313 {
12314 new_loc->cond = parse_exp_1 (&s, block_for_pc (sals.sals[i].pc),
12315 0);
12316 }
12317 if (e.reason < 0)
12318 {
3e43a32a
MS
12319 warning (_("failed to reevaluate condition "
12320 "for breakpoint %d: %s"),
0d381245
VP
12321 b->number, e.message);
12322 new_loc->enabled = 0;
12323 }
12324 }
fe3f5fa8 12325
f1310107
TJB
12326 if (sals_end.nelts)
12327 {
12328 CORE_ADDR end = find_breakpoint_range_end (sals_end.sals[0]);
12329
12330 new_loc->length = end - sals.sals[0].pc + 1;
12331 }
0d381245 12332 }
fe3f5fa8 12333
514f746b
AR
12334 /* Update locations of permanent breakpoints. */
12335 if (b->enable_state == bp_permanent)
12336 make_breakpoint_permanent (b);
12337
4a64f543
MS
12338 /* If possible, carry over 'disable' status from existing
12339 breakpoints. */
0d381245
VP
12340 {
12341 struct bp_location *e = existing_locations;
776592bf
DE
12342 /* If there are multiple breakpoints with the same function name,
12343 e.g. for inline functions, comparing function names won't work.
12344 Instead compare pc addresses; this is just a heuristic as things
12345 may have moved, but in practice it gives the correct answer
12346 often enough until a better solution is found. */
12347 int have_ambiguous_names = ambiguous_names_p (b->loc);
12348
0d381245
VP
12349 for (; e; e = e->next)
12350 {
12351 if (!e->enabled && e->function_name)
12352 {
12353 struct bp_location *l = b->loc;
776592bf
DE
12354 if (have_ambiguous_names)
12355 {
12356 for (; l; l = l->next)
f1310107 12357 if (breakpoint_locations_match (e, l))
776592bf
DE
12358 {
12359 l->enabled = 0;
12360 break;
12361 }
12362 }
12363 else
12364 {
12365 for (; l; l = l->next)
12366 if (l->function_name
12367 && strcmp (e->function_name, l->function_name) == 0)
12368 {
12369 l->enabled = 0;
12370 break;
12371 }
12372 }
0d381245
VP
12373 }
12374 }
12375 }
fe3f5fa8 12376
8d3788bd
VP
12377 if (!locations_are_equal (existing_locations, b->loc))
12378 observer_notify_breakpoint_modified (b);
12379
b60e7edf 12380 update_global_location_list (1);
fe3f5fa8
VP
12381}
12382
ef23e705
TJB
12383/* Find the SaL locations corresponding to the given ADDR_STRING.
12384 On return, FOUND will be 1 if any SaL was found, zero otherwise. */
12385
12386static struct symtabs_and_lines
12387addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found)
12388{
12389 char *s;
02d20e4a 12390 struct symtabs_and_lines sals = {0};
f8eba3c6 12391 volatile struct gdb_exception e;
ef23e705 12392
983af33b 12393 gdb_assert (b->ops != NULL);
ef23e705 12394 s = addr_string;
ef23e705
TJB
12395
12396 TRY_CATCH (e, RETURN_MASK_ERROR)
12397 {
983af33b 12398 b->ops->decode_linespec (b, &s, &sals);
ef23e705
TJB
12399 }
12400 if (e.reason < 0)
12401 {
12402 int not_found_and_ok = 0;
12403 /* For pending breakpoints, it's expected that parsing will
12404 fail until the right shared library is loaded. User has
12405 already told to create pending breakpoints and don't need
12406 extra messages. If breakpoint is in bp_shlib_disabled
12407 state, then user already saw the message about that
12408 breakpoint being disabled, and don't want to see more
12409 errors. */
58438ac1 12410 if (e.error == NOT_FOUND_ERROR
ef23e705
TJB
12411 && (b->condition_not_parsed
12412 || (b->loc && b->loc->shlib_disabled)
f8eba3c6 12413 || (b->loc && b->loc->pspace->executing_startup)
ef23e705
TJB
12414 || b->enable_state == bp_disabled))
12415 not_found_and_ok = 1;
12416
12417 if (!not_found_and_ok)
12418 {
12419 /* We surely don't want to warn about the same breakpoint
12420 10 times. One solution, implemented here, is disable
12421 the breakpoint on error. Another solution would be to
12422 have separate 'warning emitted' flag. Since this
12423 happens only when a binary has changed, I don't know
12424 which approach is better. */
12425 b->enable_state = bp_disabled;
12426 throw_exception (e);
12427 }
12428 }
12429
58438ac1 12430 if (e.reason == 0 || e.error != NOT_FOUND_ERROR)
ef23e705 12431 {
f8eba3c6 12432 int i;
ef23e705 12433
f8eba3c6
TT
12434 for (i = 0; i < sals.nelts; ++i)
12435 resolve_sal_pc (&sals.sals[i]);
ef23e705
TJB
12436 if (b->condition_not_parsed && s && s[0])
12437 {
12438 char *cond_string = 0;
12439 int thread = -1;
12440 int task = 0;
12441
12442 find_condition_and_thread (s, sals.sals[0].pc,
12443 &cond_string, &thread, &task);
12444 if (cond_string)
12445 b->cond_string = cond_string;
12446 b->thread = thread;
12447 b->task = task;
12448 b->condition_not_parsed = 0;
12449 }
12450
983af33b 12451 if (b->type == bp_static_tracepoint && !strace_marker_p (b))
ef23e705 12452 sals.sals[0] = update_static_tracepoint (b, sals.sals[0]);
ef23e705 12453
58438ac1
TT
12454 *found = 1;
12455 }
12456 else
12457 *found = 0;
ef23e705
TJB
12458
12459 return sals;
12460}
12461
348d480f
PA
12462/* The default re_set method, for typical hardware or software
12463 breakpoints. Reevaluate the breakpoint and recreate its
12464 locations. */
12465
12466static void
28010a5d 12467breakpoint_re_set_default (struct breakpoint *b)
ef23e705
TJB
12468{
12469 int found;
f1310107 12470 struct symtabs_and_lines sals, sals_end;
ef23e705 12471 struct symtabs_and_lines expanded = {0};
f1310107 12472 struct symtabs_and_lines expanded_end = {0};
ef23e705
TJB
12473
12474 sals = addr_string_to_sals (b, b->addr_string, &found);
12475 if (found)
12476 {
12477 make_cleanup (xfree, sals.sals);
f8eba3c6 12478 expanded = sals;
ef23e705
TJB
12479 }
12480
f1310107
TJB
12481 if (b->addr_string_range_end)
12482 {
12483 sals_end = addr_string_to_sals (b, b->addr_string_range_end, &found);
12484 if (found)
12485 {
12486 make_cleanup (xfree, sals_end.sals);
f8eba3c6 12487 expanded_end = sals_end;
f1310107
TJB
12488 }
12489 }
12490
12491 update_breakpoint_locations (b, expanded, expanded_end);
28010a5d
PA
12492}
12493
983af33b
SDJ
12494/* Default method for creating SALs from an address string. It basically
12495 calls parse_breakpoint_sals. Return 1 for success, zero for failure. */
12496
12497static void
12498create_sals_from_address_default (char **arg,
12499 struct linespec_result *canonical,
12500 enum bptype type_wanted,
12501 char *addr_start, char **copy_arg)
12502{
12503 parse_breakpoint_sals (arg, canonical);
12504}
12505
12506/* Call create_breakpoints_sal for the given arguments. This is the default
12507 function for the `create_breakpoints_sal' method of
12508 breakpoint_ops. */
12509
12510static void
12511create_breakpoints_sal_default (struct gdbarch *gdbarch,
12512 struct linespec_result *canonical,
12513 struct linespec_sals *lsal,
12514 char *cond_string,
12515 enum bptype type_wanted,
12516 enum bpdisp disposition,
12517 int thread,
12518 int task, int ignore_count,
12519 const struct breakpoint_ops *ops,
12520 int from_tty, int enabled,
12521 int internal)
12522{
12523 create_breakpoints_sal (gdbarch, canonical, cond_string,
12524 type_wanted, disposition,
12525 thread, task, ignore_count, ops, from_tty,
12526 enabled, internal);
12527}
12528
12529/* Decode the line represented by S by calling decode_line_full. This is the
12530 default function for the `decode_linespec' method of breakpoint_ops. */
12531
12532static void
12533decode_linespec_default (struct breakpoint *b, char **s,
12534 struct symtabs_and_lines *sals)
12535{
12536 struct linespec_result canonical;
12537
12538 init_linespec_result (&canonical);
12539 decode_line_full (s, DECODE_LINE_FUNFIRSTLINE,
12540 (struct symtab *) NULL, 0,
12541 &canonical, multiple_symbols_all,
12542 b->filter);
12543
12544 /* We should get 0 or 1 resulting SALs. */
12545 gdb_assert (VEC_length (linespec_sals, canonical.sals) < 2);
12546
12547 if (VEC_length (linespec_sals, canonical.sals) > 0)
12548 {
12549 struct linespec_sals *lsal;
12550
12551 lsal = VEC_index (linespec_sals, canonical.sals, 0);
12552 *sals = lsal->sals;
12553 /* Arrange it so the destructor does not free the
12554 contents. */
12555 lsal->sals.sals = NULL;
12556 }
12557
12558 destroy_linespec_result (&canonical);
12559}
12560
28010a5d
PA
12561/* Prepare the global context for a re-set of breakpoint B. */
12562
12563static struct cleanup *
12564prepare_re_set_context (struct breakpoint *b)
12565{
12566 struct cleanup *cleanups;
12567
12568 input_radix = b->input_radix;
12569 cleanups = save_current_space_and_thread ();
f8eba3c6
TT
12570 if (b->pspace != NULL)
12571 switch_to_program_space_and_thread (b->pspace);
28010a5d
PA
12572 set_language (b->language);
12573
12574 return cleanups;
ef23e705
TJB
12575}
12576
c906108c
SS
12577/* Reset a breakpoint given it's struct breakpoint * BINT.
12578 The value we return ends up being the return value from catch_errors.
12579 Unused in this case. */
12580
12581static int
4efb68b1 12582breakpoint_re_set_one (void *bint)
c906108c 12583{
4a64f543 12584 /* Get past catch_errs. */
53a5351d 12585 struct breakpoint *b = (struct breakpoint *) bint;
348d480f 12586 struct cleanup *cleanups;
c906108c 12587
348d480f
PA
12588 cleanups = prepare_re_set_context (b);
12589 b->ops->re_set (b);
12590 do_cleanups (cleanups);
c906108c
SS
12591 return 0;
12592}
12593
69de3c6a 12594/* Re-set all breakpoints after symbols have been re-loaded. */
c906108c 12595void
69de3c6a 12596breakpoint_re_set (void)
c906108c 12597{
35df4500 12598 struct breakpoint *b, *b_tmp;
c906108c
SS
12599 enum language save_language;
12600 int save_input_radix;
6c95b8df 12601 struct cleanup *old_chain;
c5aa993b 12602
c906108c
SS
12603 save_language = current_language->la_language;
12604 save_input_radix = input_radix;
6c95b8df
PA
12605 old_chain = save_current_program_space ();
12606
35df4500 12607 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 12608 {
4a64f543 12609 /* Format possible error msg. */
fe3f5fa8 12610 char *message = xstrprintf ("Error in re-setting breakpoint %d: ",
9ebf4acf
AC
12611 b->number);
12612 struct cleanup *cleanups = make_cleanup (xfree, message);
c5aa993b 12613 catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
9ebf4acf 12614 do_cleanups (cleanups);
c5aa993b 12615 }
c906108c
SS
12616 set_language (save_language);
12617 input_radix = save_input_radix;
e62c965a 12618
0756c555 12619 jit_breakpoint_re_set ();
4efc6507 12620
6c95b8df
PA
12621 do_cleanups (old_chain);
12622
af02033e
PP
12623 create_overlay_event_breakpoint ();
12624 create_longjmp_master_breakpoint ();
12625 create_std_terminate_master_breakpoint ();
186c406b 12626 create_exception_master_breakpoint ();
1bfeeb0f
JL
12627
12628 /* While we're at it, reset the skip list too. */
12629 skip_re_set ();
c906108c
SS
12630}
12631\f
c906108c
SS
12632/* Reset the thread number of this breakpoint:
12633
12634 - If the breakpoint is for all threads, leave it as-is.
4a64f543 12635 - Else, reset it to the current thread for inferior_ptid. */
c906108c 12636void
fba45db2 12637breakpoint_re_set_thread (struct breakpoint *b)
c906108c
SS
12638{
12639 if (b->thread != -1)
12640 {
39f77062
KB
12641 if (in_thread_list (inferior_ptid))
12642 b->thread = pid_to_thread_id (inferior_ptid);
6c95b8df
PA
12643
12644 /* We're being called after following a fork. The new fork is
12645 selected as current, and unless this was a vfork will have a
12646 different program space from the original thread. Reset that
12647 as well. */
12648 b->loc->pspace = current_program_space;
c906108c
SS
12649 }
12650}
12651
03ac34d5
MS
12652/* Set ignore-count of breakpoint number BPTNUM to COUNT.
12653 If from_tty is nonzero, it prints a message to that effect,
12654 which ends with a period (no newline). */
12655
c906108c 12656void
fba45db2 12657set_ignore_count (int bptnum, int count, int from_tty)
c906108c 12658{
52f0bd74 12659 struct breakpoint *b;
c906108c
SS
12660
12661 if (count < 0)
12662 count = 0;
12663
12664 ALL_BREAKPOINTS (b)
12665 if (b->number == bptnum)
c5aa993b 12666 {
d77f58be
SS
12667 if (is_tracepoint (b))
12668 {
12669 if (from_tty && count != 0)
12670 printf_filtered (_("Ignore count ignored for tracepoint %d."),
12671 bptnum);
12672 return;
12673 }
12674
c5aa993b 12675 b->ignore_count = count;
221ea385
KS
12676 if (from_tty)
12677 {
12678 if (count == 0)
3e43a32a
MS
12679 printf_filtered (_("Will stop next time "
12680 "breakpoint %d is reached."),
221ea385
KS
12681 bptnum);
12682 else if (count == 1)
a3f17187 12683 printf_filtered (_("Will ignore next crossing of breakpoint %d."),
221ea385
KS
12684 bptnum);
12685 else
3e43a32a
MS
12686 printf_filtered (_("Will ignore next %d "
12687 "crossings of breakpoint %d."),
221ea385
KS
12688 count, bptnum);
12689 }
c5aa993b 12690 breakpoints_changed ();
8d3788bd 12691 observer_notify_breakpoint_modified (b);
c5aa993b
JM
12692 return;
12693 }
c906108c 12694
8a3fe4f8 12695 error (_("No breakpoint number %d."), bptnum);
c906108c
SS
12696}
12697
c906108c
SS
12698/* Command to set ignore-count of breakpoint N to COUNT. */
12699
12700static void
fba45db2 12701ignore_command (char *args, int from_tty)
c906108c
SS
12702{
12703 char *p = args;
52f0bd74 12704 int num;
c906108c
SS
12705
12706 if (p == 0)
e2e0b3e5 12707 error_no_arg (_("a breakpoint number"));
c5aa993b 12708
c906108c 12709 num = get_number (&p);
5c44784c 12710 if (num == 0)
8a3fe4f8 12711 error (_("bad breakpoint number: '%s'"), args);
c906108c 12712 if (*p == 0)
8a3fe4f8 12713 error (_("Second argument (specified ignore-count) is missing."));
c906108c
SS
12714
12715 set_ignore_count (num,
12716 longest_to_int (value_as_long (parse_and_eval (p))),
12717 from_tty);
221ea385
KS
12718 if (from_tty)
12719 printf_filtered ("\n");
c906108c
SS
12720}
12721\f
12722/* Call FUNCTION on each of the breakpoints
12723 whose numbers are given in ARGS. */
12724
12725static void
95a42b64
TT
12726map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *,
12727 void *),
12728 void *data)
c906108c 12729{
52f0bd74
AC
12730 int num;
12731 struct breakpoint *b, *tmp;
11cf8741 12732 int match;
197f0a60 12733 struct get_number_or_range_state state;
c906108c 12734
197f0a60 12735 if (args == 0)
e2e0b3e5 12736 error_no_arg (_("one or more breakpoint numbers"));
c906108c 12737
197f0a60
TT
12738 init_number_or_range (&state, args);
12739
12740 while (!state.finished)
c906108c 12741 {
197f0a60
TT
12742 char *p = state.string;
12743
11cf8741 12744 match = 0;
c5aa993b 12745
197f0a60 12746 num = get_number_or_range (&state);
5c44784c 12747 if (num == 0)
c5aa993b 12748 {
8a3fe4f8 12749 warning (_("bad breakpoint number at or near '%s'"), p);
5c44784c
JM
12750 }
12751 else
12752 {
12753 ALL_BREAKPOINTS_SAFE (b, tmp)
12754 if (b->number == num)
12755 {
11cf8741 12756 match = 1;
cdac0397 12757 function (b, data);
11cf8741 12758 break;
5c44784c 12759 }
11cf8741 12760 if (match == 0)
a3f17187 12761 printf_unfiltered (_("No breakpoint number %d.\n"), num);
c5aa993b 12762 }
c906108c
SS
12763 }
12764}
12765
0d381245
VP
12766static struct bp_location *
12767find_location_by_number (char *number)
12768{
12769 char *dot = strchr (number, '.');
12770 char *p1;
12771 int bp_num;
12772 int loc_num;
12773 struct breakpoint *b;
12774 struct bp_location *loc;
12775
12776 *dot = '\0';
12777
12778 p1 = number;
197f0a60 12779 bp_num = get_number (&p1);
0d381245
VP
12780 if (bp_num == 0)
12781 error (_("Bad breakpoint number '%s'"), number);
12782
12783 ALL_BREAKPOINTS (b)
12784 if (b->number == bp_num)
12785 {
12786 break;
12787 }
12788
12789 if (!b || b->number != bp_num)
12790 error (_("Bad breakpoint number '%s'"), number);
12791
12792 p1 = dot+1;
197f0a60 12793 loc_num = get_number (&p1);
0d381245
VP
12794 if (loc_num == 0)
12795 error (_("Bad breakpoint location number '%s'"), number);
12796
12797 --loc_num;
12798 loc = b->loc;
12799 for (;loc_num && loc; --loc_num, loc = loc->next)
12800 ;
12801 if (!loc)
12802 error (_("Bad breakpoint location number '%s'"), dot+1);
12803
12804 return loc;
12805}
12806
12807
1900040c
MS
12808/* Set ignore-count of breakpoint number BPTNUM to COUNT.
12809 If from_tty is nonzero, it prints a message to that effect,
12810 which ends with a period (no newline). */
12811
c906108c 12812void
fba45db2 12813disable_breakpoint (struct breakpoint *bpt)
c906108c
SS
12814{
12815 /* Never disable a watchpoint scope breakpoint; we want to
12816 hit them when we leave scope so we can delete both the
12817 watchpoint and its scope breakpoint at that time. */
12818 if (bpt->type == bp_watchpoint_scope)
12819 return;
12820
c2c6d25f 12821 /* You can't disable permanent breakpoints. */
b5de0fa7 12822 if (bpt->enable_state == bp_permanent)
c2c6d25f
JM
12823 return;
12824
b5de0fa7 12825 bpt->enable_state = bp_disabled;
c906108c 12826
d248b706
KY
12827 if (target_supports_enable_disable_tracepoint ()
12828 && current_trace_status ()->running && is_tracepoint (bpt))
12829 {
12830 struct bp_location *location;
12831
12832 for (location = bpt->loc; location; location = location->next)
12833 target_disable_tracepoint (location);
12834 }
12835
b60e7edf 12836 update_global_location_list (0);
c906108c 12837
8d3788bd 12838 observer_notify_breakpoint_modified (bpt);
c906108c
SS
12839}
12840
51be5b68
PA
12841/* A callback for iterate_over_related_breakpoints. */
12842
12843static void
12844do_disable_breakpoint (struct breakpoint *b, void *ignore)
12845{
12846 disable_breakpoint (b);
12847}
12848
95a42b64
TT
12849/* A callback for map_breakpoint_numbers that calls
12850 disable_breakpoint. */
12851
12852static void
12853do_map_disable_breakpoint (struct breakpoint *b, void *ignore)
12854{
51be5b68 12855 iterate_over_related_breakpoints (b, do_disable_breakpoint, NULL);
95a42b64
TT
12856}
12857
c906108c 12858static void
fba45db2 12859disable_command (char *args, int from_tty)
c906108c 12860{
c906108c 12861 if (args == 0)
46c6471b
PA
12862 {
12863 struct breakpoint *bpt;
12864
12865 ALL_BREAKPOINTS (bpt)
12866 if (user_breakpoint_p (bpt))
12867 disable_breakpoint (bpt);
12868 }
0d381245
VP
12869 else if (strchr (args, '.'))
12870 {
12871 struct bp_location *loc = find_location_by_number (args);
12872 if (loc)
d248b706
KY
12873 {
12874 loc->enabled = 0;
12875 if (target_supports_enable_disable_tracepoint ()
12876 && current_trace_status ()->running && loc->owner
12877 && is_tracepoint (loc->owner))
12878 target_disable_tracepoint (loc);
12879 }
b60e7edf 12880 update_global_location_list (0);
0d381245 12881 }
c906108c 12882 else
95a42b64 12883 map_breakpoint_numbers (args, do_map_disable_breakpoint, NULL);
c906108c
SS
12884}
12885
12886static void
51be5b68 12887enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition)
c906108c 12888{
afe38095 12889 int target_resources_ok;
c906108c
SS
12890
12891 if (bpt->type == bp_hardware_breakpoint)
12892 {
12893 int i;
c5aa993b 12894 i = hw_breakpoint_used_count ();
53a5351d 12895 target_resources_ok =
d92524f1 12896 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
53a5351d 12897 i + 1, 0);
c906108c 12898 if (target_resources_ok == 0)
8a3fe4f8 12899 error (_("No hardware breakpoint support in the target."));
c906108c 12900 else if (target_resources_ok < 0)
8a3fe4f8 12901 error (_("Hardware breakpoints used exceeds limit."));
c906108c
SS
12902 }
12903
cc60f2e3 12904 if (is_watchpoint (bpt))
c906108c 12905 {
d07205c2
JK
12906 /* Initialize it just to avoid a GCC false warning. */
12907 enum enable_state orig_enable_state = 0;
bfd189b1 12908 volatile struct gdb_exception e;
dde02812
ES
12909
12910 TRY_CATCH (e, RETURN_MASK_ALL)
c906108c 12911 {
3a5c3e22
PA
12912 struct watchpoint *w = (struct watchpoint *) bpt;
12913
1e718ff1
TJB
12914 orig_enable_state = bpt->enable_state;
12915 bpt->enable_state = bp_enabled;
3a5c3e22 12916 update_watchpoint (w, 1 /* reparse */);
c906108c 12917 }
dde02812 12918 if (e.reason < 0)
c5aa993b 12919 {
1e718ff1 12920 bpt->enable_state = orig_enable_state;
dde02812
ES
12921 exception_fprintf (gdb_stderr, e, _("Cannot enable watchpoint %d: "),
12922 bpt->number);
12923 return;
c5aa993b 12924 }
c906108c 12925 }
0101ce28 12926
b4c291bb
KH
12927 if (bpt->enable_state != bp_permanent)
12928 bpt->enable_state = bp_enabled;
d248b706
KY
12929
12930 if (target_supports_enable_disable_tracepoint ()
12931 && current_trace_status ()->running && is_tracepoint (bpt))
12932 {
12933 struct bp_location *location;
12934
12935 for (location = bpt->loc; location; location = location->next)
12936 target_enable_tracepoint (location);
12937 }
12938
b4c291bb 12939 bpt->disposition = disposition;
b60e7edf 12940 update_global_location_list (1);
b4c291bb
KH
12941 breakpoints_changed ();
12942
8d3788bd 12943 observer_notify_breakpoint_modified (bpt);
c906108c
SS
12944}
12945
fe3f5fa8 12946
c906108c 12947void
fba45db2 12948enable_breakpoint (struct breakpoint *bpt)
c906108c 12949{
51be5b68
PA
12950 enable_breakpoint_disp (bpt, bpt->disposition);
12951}
12952
12953static void
12954do_enable_breakpoint (struct breakpoint *bpt, void *arg)
12955{
12956 enable_breakpoint (bpt);
c906108c
SS
12957}
12958
95a42b64
TT
12959/* A callback for map_breakpoint_numbers that calls
12960 enable_breakpoint. */
12961
12962static void
12963do_map_enable_breakpoint (struct breakpoint *b, void *ignore)
12964{
51be5b68 12965 iterate_over_related_breakpoints (b, do_enable_breakpoint, NULL);
95a42b64
TT
12966}
12967
c906108c
SS
12968/* The enable command enables the specified breakpoints (or all defined
12969 breakpoints) so they once again become (or continue to be) effective
1272ad14 12970 in stopping the inferior. */
c906108c 12971
c906108c 12972static void
fba45db2 12973enable_command (char *args, int from_tty)
c906108c 12974{
c906108c 12975 if (args == 0)
46c6471b
PA
12976 {
12977 struct breakpoint *bpt;
12978
12979 ALL_BREAKPOINTS (bpt)
12980 if (user_breakpoint_p (bpt))
12981 enable_breakpoint (bpt);
12982 }
0d381245
VP
12983 else if (strchr (args, '.'))
12984 {
12985 struct bp_location *loc = find_location_by_number (args);
12986 if (loc)
d248b706
KY
12987 {
12988 loc->enabled = 1;
12989 if (target_supports_enable_disable_tracepoint ()
12990 && current_trace_status ()->running && loc->owner
12991 && is_tracepoint (loc->owner))
12992 target_enable_tracepoint (loc);
12993 }
b60e7edf 12994 update_global_location_list (1);
0d381245 12995 }
c906108c 12996 else
95a42b64 12997 map_breakpoint_numbers (args, do_map_enable_breakpoint, NULL);
c906108c
SS
12998}
12999
13000static void
51be5b68
PA
13001do_enable_breakpoint_disp (struct breakpoint *bpt, void *arg)
13002{
13003 enum bpdisp disp = *(enum bpdisp *) arg;
13004
13005 enable_breakpoint_disp (bpt, disp);
13006}
13007
13008static void
13009do_map_enable_once_breakpoint (struct breakpoint *bpt, void *ignore)
c906108c 13010{
51be5b68
PA
13011 enum bpdisp disp = disp_disable;
13012
13013 iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
c906108c
SS
13014}
13015
c906108c 13016static void
fba45db2 13017enable_once_command (char *args, int from_tty)
c906108c 13018{
51be5b68 13019 map_breakpoint_numbers (args, do_map_enable_once_breakpoint, NULL);
c906108c
SS
13020}
13021
13022static void
51be5b68 13023do_map_enable_delete_breakpoint (struct breakpoint *bpt, void *ignore)
c906108c 13024{
51be5b68
PA
13025 enum bpdisp disp = disp_del;
13026
13027 iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
c906108c
SS
13028}
13029
c906108c 13030static void
fba45db2 13031enable_delete_command (char *args, int from_tty)
c906108c 13032{
51be5b68 13033 map_breakpoint_numbers (args, do_map_enable_delete_breakpoint, NULL);
c906108c
SS
13034}
13035\f
fa8d40ab
JJ
13036static void
13037set_breakpoint_cmd (char *args, int from_tty)
13038{
13039}
13040
13041static void
13042show_breakpoint_cmd (char *args, int from_tty)
13043{
13044}
13045
1f3b5d1b
PP
13046/* Invalidate last known value of any hardware watchpoint if
13047 the memory which that value represents has been written to by
13048 GDB itself. */
13049
13050static void
13051invalidate_bp_value_on_memory_change (CORE_ADDR addr, int len,
13052 const bfd_byte *data)
13053{
13054 struct breakpoint *bp;
13055
13056 ALL_BREAKPOINTS (bp)
13057 if (bp->enable_state == bp_enabled
3a5c3e22 13058 && bp->type == bp_hardware_watchpoint)
1f3b5d1b 13059 {
3a5c3e22 13060 struct watchpoint *wp = (struct watchpoint *) bp;
1f3b5d1b 13061
3a5c3e22
PA
13062 if (wp->val_valid && wp->val)
13063 {
13064 struct bp_location *loc;
13065
13066 for (loc = bp->loc; loc != NULL; loc = loc->next)
13067 if (loc->loc_type == bp_loc_hardware_watchpoint
13068 && loc->address + loc->length > addr
13069 && addr + len > loc->address)
13070 {
13071 value_free (wp->val);
13072 wp->val = NULL;
13073 wp->val_valid = 0;
13074 }
13075 }
1f3b5d1b
PP
13076 }
13077}
13078
1bfeeb0f
JL
13079/* Use the last displayed codepoint's values, or nothing
13080 if they aren't valid. */
c906108c
SS
13081
13082struct symtabs_and_lines
f8eba3c6 13083decode_line_spec_1 (char *string, int flags)
c906108c
SS
13084{
13085 struct symtabs_and_lines sals;
cc59ec59 13086
c906108c 13087 if (string == 0)
8a3fe4f8 13088 error (_("Empty line specification."));
1bfeeb0f 13089 if (last_displayed_sal_is_valid ())
f8eba3c6 13090 sals = decode_line_1 (&string, flags,
1bfeeb0f 13091 get_last_displayed_symtab (),
f8eba3c6 13092 get_last_displayed_line ());
c906108c 13093 else
f8eba3c6 13094 sals = decode_line_1 (&string, flags, (struct symtab *) NULL, 0);
c906108c 13095 if (*string)
8a3fe4f8 13096 error (_("Junk at end of line specification: %s"), string);
c906108c
SS
13097 return sals;
13098}
8181d85f
DJ
13099
13100/* Create and insert a raw software breakpoint at PC. Return an
13101 identifier, which should be used to remove the breakpoint later.
13102 In general, places which call this should be using something on the
13103 breakpoint chain instead; this function should be eliminated
13104 someday. */
13105
13106void *
6c95b8df
PA
13107deprecated_insert_raw_breakpoint (struct gdbarch *gdbarch,
13108 struct address_space *aspace, CORE_ADDR pc)
8181d85f
DJ
13109{
13110 struct bp_target_info *bp_tgt;
13111
6c95b8df 13112 bp_tgt = XZALLOC (struct bp_target_info);
8181d85f 13113
6c95b8df 13114 bp_tgt->placed_address_space = aspace;
8181d85f 13115 bp_tgt->placed_address = pc;
6c95b8df 13116
a6d9a66e 13117 if (target_insert_breakpoint (gdbarch, bp_tgt) != 0)
8181d85f
DJ
13118 {
13119 /* Could not insert the breakpoint. */
13120 xfree (bp_tgt);
13121 return NULL;
13122 }
13123
13124 return bp_tgt;
13125}
13126
4a64f543
MS
13127/* Remove a breakpoint BP inserted by
13128 deprecated_insert_raw_breakpoint. */
8181d85f
DJ
13129
13130int
a6d9a66e 13131deprecated_remove_raw_breakpoint (struct gdbarch *gdbarch, void *bp)
8181d85f
DJ
13132{
13133 struct bp_target_info *bp_tgt = bp;
13134 int ret;
13135
a6d9a66e 13136 ret = target_remove_breakpoint (gdbarch, bp_tgt);
8181d85f
DJ
13137 xfree (bp_tgt);
13138
13139 return ret;
13140}
13141
4a64f543
MS
13142/* One (or perhaps two) breakpoints used for software single
13143 stepping. */
8181d85f
DJ
13144
13145static void *single_step_breakpoints[2];
a6d9a66e 13146static struct gdbarch *single_step_gdbarch[2];
8181d85f
DJ
13147
13148/* Create and insert a breakpoint for software single step. */
13149
13150void
6c95b8df 13151insert_single_step_breakpoint (struct gdbarch *gdbarch,
4a64f543
MS
13152 struct address_space *aspace,
13153 CORE_ADDR next_pc)
8181d85f
DJ
13154{
13155 void **bpt_p;
13156
13157 if (single_step_breakpoints[0] == NULL)
a6d9a66e
UW
13158 {
13159 bpt_p = &single_step_breakpoints[0];
13160 single_step_gdbarch[0] = gdbarch;
13161 }
8181d85f
DJ
13162 else
13163 {
13164 gdb_assert (single_step_breakpoints[1] == NULL);
13165 bpt_p = &single_step_breakpoints[1];
a6d9a66e 13166 single_step_gdbarch[1] = gdbarch;
8181d85f
DJ
13167 }
13168
4a64f543
MS
13169 /* NOTE drow/2006-04-11: A future improvement to this function would
13170 be to only create the breakpoints once, and actually put them on
13171 the breakpoint chain. That would let us use set_raw_breakpoint.
13172 We could adjust the addresses each time they were needed. Doing
13173 this requires corresponding changes elsewhere where single step
13174 breakpoints are handled, however. So, for now, we use this. */
8181d85f 13175
6c95b8df 13176 *bpt_p = deprecated_insert_raw_breakpoint (gdbarch, aspace, next_pc);
8181d85f 13177 if (*bpt_p == NULL)
5af949e3
UW
13178 error (_("Could not insert single-step breakpoint at %s"),
13179 paddress (gdbarch, next_pc));
8181d85f
DJ
13180}
13181
f02253f1
HZ
13182/* Check if the breakpoints used for software single stepping
13183 were inserted or not. */
13184
13185int
13186single_step_breakpoints_inserted (void)
13187{
13188 return (single_step_breakpoints[0] != NULL
13189 || single_step_breakpoints[1] != NULL);
13190}
13191
8181d85f
DJ
13192/* Remove and delete any breakpoints used for software single step. */
13193
13194void
13195remove_single_step_breakpoints (void)
13196{
13197 gdb_assert (single_step_breakpoints[0] != NULL);
13198
13199 /* See insert_single_step_breakpoint for more about this deprecated
13200 call. */
a6d9a66e
UW
13201 deprecated_remove_raw_breakpoint (single_step_gdbarch[0],
13202 single_step_breakpoints[0]);
13203 single_step_gdbarch[0] = NULL;
8181d85f
DJ
13204 single_step_breakpoints[0] = NULL;
13205
13206 if (single_step_breakpoints[1] != NULL)
13207 {
a6d9a66e
UW
13208 deprecated_remove_raw_breakpoint (single_step_gdbarch[1],
13209 single_step_breakpoints[1]);
13210 single_step_gdbarch[1] = NULL;
8181d85f
DJ
13211 single_step_breakpoints[1] = NULL;
13212 }
13213}
13214
d03285ec
UW
13215/* Delete software single step breakpoints without removing them from
13216 the inferior. This is intended to be used if the inferior's address
13217 space where they were inserted is already gone, e.g. after exit or
13218 exec. */
13219
13220void
13221cancel_single_step_breakpoints (void)
13222{
13223 int i;
13224
13225 for (i = 0; i < 2; i++)
13226 if (single_step_breakpoints[i])
13227 {
13228 xfree (single_step_breakpoints[i]);
13229 single_step_breakpoints[i] = NULL;
13230 single_step_gdbarch[i] = NULL;
13231 }
13232}
13233
13234/* Detach software single-step breakpoints from INFERIOR_PTID without
13235 removing them. */
13236
13237static void
13238detach_single_step_breakpoints (void)
13239{
13240 int i;
13241
13242 for (i = 0; i < 2; i++)
13243 if (single_step_breakpoints[i])
13244 target_remove_breakpoint (single_step_gdbarch[i],
13245 single_step_breakpoints[i]);
13246}
13247
4a64f543
MS
13248/* Check whether a software single-step breakpoint is inserted at
13249 PC. */
1aafd4da
UW
13250
13251static int
cc59ec59
MS
13252single_step_breakpoint_inserted_here_p (struct address_space *aspace,
13253 CORE_ADDR pc)
1aafd4da
UW
13254{
13255 int i;
13256
13257 for (i = 0; i < 2; i++)
13258 {
13259 struct bp_target_info *bp_tgt = single_step_breakpoints[i];
6c95b8df
PA
13260 if (bp_tgt
13261 && breakpoint_address_match (bp_tgt->placed_address_space,
13262 bp_tgt->placed_address,
13263 aspace, pc))
1aafd4da
UW
13264 return 1;
13265 }
13266
13267 return 0;
13268}
13269
a96d9b2e
SDJ
13270/* Returns 0 if 'bp' is NOT a syscall catchpoint,
13271 non-zero otherwise. */
13272static int
13273is_syscall_catchpoint_enabled (struct breakpoint *bp)
13274{
13275 if (syscall_catchpoint_p (bp)
13276 && bp->enable_state != bp_disabled
13277 && bp->enable_state != bp_call_disabled)
13278 return 1;
13279 else
13280 return 0;
13281}
13282
13283int
13284catch_syscall_enabled (void)
13285{
13286 struct inferior *inf = current_inferior ();
13287
13288 return inf->total_syscalls_count != 0;
13289}
13290
13291int
13292catching_syscall_number (int syscall_number)
13293{
13294 struct breakpoint *bp;
13295
13296 ALL_BREAKPOINTS (bp)
13297 if (is_syscall_catchpoint_enabled (bp))
13298 {
be5c67c1
PA
13299 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bp;
13300
13301 if (c->syscalls_to_be_caught)
a96d9b2e
SDJ
13302 {
13303 int i, iter;
13304 for (i = 0;
be5c67c1 13305 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
13306 i++)
13307 if (syscall_number == iter)
13308 return 1;
13309 }
13310 else
13311 return 1;
13312 }
13313
13314 return 0;
13315}
13316
13317/* Complete syscall names. Used by "catch syscall". */
13318static char **
13319catch_syscall_completer (struct cmd_list_element *cmd,
13320 char *text, char *word)
13321{
13322 const char **list = get_syscall_names ();
c38eea1a
MS
13323 char **retlist
13324 = (list == NULL) ? NULL : complete_on_enum (list, text, word);
cc59ec59 13325
c38eea1a
MS
13326 xfree (list);
13327 return retlist;
a96d9b2e
SDJ
13328}
13329
1042e4c0
SS
13330/* Tracepoint-specific operations. */
13331
13332/* Set tracepoint count to NUM. */
13333static void
13334set_tracepoint_count (int num)
13335{
13336 tracepoint_count = num;
4fa62494 13337 set_internalvar_integer (lookup_internalvar ("tpnum"), num);
1042e4c0
SS
13338}
13339
13340void
13341trace_command (char *arg, int from_tty)
13342{
8cdf0e15
VP
13343 if (create_breakpoint (get_current_arch (),
13344 arg,
13345 NULL, 0, 1 /* parse arg */,
0fb4aa4b
PA
13346 0 /* tempflag */,
13347 bp_tracepoint /* type_wanted */,
8cdf0e15
VP
13348 0 /* Ignore count */,
13349 pending_break_support,
348d480f 13350 &tracepoint_breakpoint_ops,
8cdf0e15 13351 from_tty,
84f4c1fe
PM
13352 1 /* enabled */,
13353 0 /* internal */))
fd9b8c24 13354 set_tracepoint_count (breakpoint_count);
1042e4c0
SS
13355}
13356
7a697b8d
SS
13357void
13358ftrace_command (char *arg, int from_tty)
13359{
8cdf0e15
VP
13360 if (create_breakpoint (get_current_arch (),
13361 arg,
13362 NULL, 0, 1 /* parse arg */,
0fb4aa4b
PA
13363 0 /* tempflag */,
13364 bp_fast_tracepoint /* type_wanted */,
13365 0 /* Ignore count */,
13366 pending_break_support,
348d480f 13367 &tracepoint_breakpoint_ops,
0fb4aa4b 13368 from_tty,
84f4c1fe
PM
13369 1 /* enabled */,
13370 0 /* internal */))
0fb4aa4b
PA
13371 set_tracepoint_count (breakpoint_count);
13372}
13373
13374/* strace command implementation. Creates a static tracepoint. */
13375
13376void
13377strace_command (char *arg, int from_tty)
13378{
983af33b
SDJ
13379 struct breakpoint_ops *ops;
13380
13381 /* Decide if we are dealing with a static tracepoint marker (`-m'),
13382 or with a normal static tracepoint. */
13383 if (arg && strncmp (arg, "-m", 2) == 0 && isspace (arg[2]))
13384 ops = &strace_marker_breakpoint_ops;
13385 else
13386 ops = &tracepoint_breakpoint_ops;
13387
0fb4aa4b
PA
13388 if (create_breakpoint (get_current_arch (),
13389 arg,
13390 NULL, 0, 1 /* parse arg */,
13391 0 /* tempflag */,
13392 bp_static_tracepoint /* type_wanted */,
8cdf0e15
VP
13393 0 /* Ignore count */,
13394 pending_break_support,
983af33b 13395 ops,
8cdf0e15 13396 from_tty,
84f4c1fe
PM
13397 1 /* enabled */,
13398 0 /* internal */))
fd9b8c24 13399 set_tracepoint_count (breakpoint_count);
7a697b8d
SS
13400}
13401
409873ef
SS
13402/* Set up a fake reader function that gets command lines from a linked
13403 list that was acquired during tracepoint uploading. */
13404
13405static struct uploaded_tp *this_utp;
3149d8c1 13406static int next_cmd;
409873ef
SS
13407
13408static char *
13409read_uploaded_action (void)
13410{
13411 char *rslt;
13412
3149d8c1 13413 VEC_iterate (char_ptr, this_utp->cmd_strings, next_cmd, rslt);
409873ef 13414
3149d8c1 13415 next_cmd++;
409873ef
SS
13416
13417 return rslt;
13418}
13419
00bf0b85
SS
13420/* Given information about a tracepoint as recorded on a target (which
13421 can be either a live system or a trace file), attempt to create an
13422 equivalent GDB tracepoint. This is not a reliable process, since
13423 the target does not necessarily have all the information used when
13424 the tracepoint was originally defined. */
13425
d9b3f62e 13426struct tracepoint *
00bf0b85 13427create_tracepoint_from_upload (struct uploaded_tp *utp)
d5551862 13428{
409873ef 13429 char *addr_str, small_buf[100];
d9b3f62e 13430 struct tracepoint *tp;
fd9b8c24 13431
409873ef
SS
13432 if (utp->at_string)
13433 addr_str = utp->at_string;
13434 else
13435 {
13436 /* In the absence of a source location, fall back to raw
13437 address. Since there is no way to confirm that the address
13438 means the same thing as when the trace was started, warn the
13439 user. */
3e43a32a
MS
13440 warning (_("Uploaded tracepoint %d has no "
13441 "source location, using raw address"),
409873ef
SS
13442 utp->number);
13443 sprintf (small_buf, "*%s", hex_string (utp->addr));
13444 addr_str = small_buf;
13445 }
13446
13447 /* There's not much we can do with a sequence of bytecodes. */
13448 if (utp->cond && !utp->cond_string)
3e43a32a
MS
13449 warning (_("Uploaded tracepoint %d condition "
13450 "has no source form, ignoring it"),
409873ef 13451 utp->number);
d5551862 13452
8cdf0e15 13453 if (!create_breakpoint (get_current_arch (),
409873ef
SS
13454 addr_str,
13455 utp->cond_string, -1, 0 /* parse cond/thread */,
8cdf0e15 13456 0 /* tempflag */,
0fb4aa4b 13457 utp->type /* type_wanted */,
8cdf0e15
VP
13458 0 /* Ignore count */,
13459 pending_break_support,
348d480f 13460 &tracepoint_breakpoint_ops,
8cdf0e15 13461 0 /* from_tty */,
84f4c1fe
PM
13462 utp->enabled /* enabled */,
13463 0 /* internal */))
fd9b8c24
PA
13464 return NULL;
13465
00bf0b85
SS
13466 set_tracepoint_count (breakpoint_count);
13467
409873ef 13468 /* Get the tracepoint we just created. */
fd9b8c24
PA
13469 tp = get_tracepoint (tracepoint_count);
13470 gdb_assert (tp != NULL);
d5551862 13471
00bf0b85
SS
13472 if (utp->pass > 0)
13473 {
d9b3f62e 13474 sprintf (small_buf, "%d %d", utp->pass, tp->base.number);
00bf0b85 13475
409873ef 13476 trace_pass_command (small_buf, 0);
00bf0b85
SS
13477 }
13478
409873ef
SS
13479 /* If we have uploaded versions of the original commands, set up a
13480 special-purpose "reader" function and call the usual command line
13481 reader, then pass the result to the breakpoint command-setting
13482 function. */
3149d8c1 13483 if (!VEC_empty (char_ptr, utp->cmd_strings))
00bf0b85 13484 {
409873ef 13485 struct command_line *cmd_list;
00bf0b85 13486
409873ef 13487 this_utp = utp;
3149d8c1 13488 next_cmd = 0;
d5551862 13489
409873ef
SS
13490 cmd_list = read_command_lines_1 (read_uploaded_action, 1, NULL, NULL);
13491
d9b3f62e 13492 breakpoint_set_commands (&tp->base, cmd_list);
00bf0b85 13493 }
3149d8c1
SS
13494 else if (!VEC_empty (char_ptr, utp->actions)
13495 || !VEC_empty (char_ptr, utp->step_actions))
3e43a32a
MS
13496 warning (_("Uploaded tracepoint %d actions "
13497 "have no source form, ignoring them"),
409873ef 13498 utp->number);
00bf0b85 13499
f196051f
SS
13500 /* Copy any status information that might be available. */
13501 tp->base.hit_count = utp->hit_count;
13502 tp->traceframe_usage = utp->traceframe_usage;
13503
00bf0b85 13504 return tp;
d9b3f62e 13505}
00bf0b85 13506
1042e4c0
SS
13507/* Print information on tracepoint number TPNUM_EXP, or all if
13508 omitted. */
13509
13510static void
e5a67952 13511tracepoints_info (char *args, int from_tty)
1042e4c0 13512{
79a45e25 13513 struct ui_out *uiout = current_uiout;
e5a67952 13514 int num_printed;
1042e4c0 13515
e5a67952 13516 num_printed = breakpoint_1 (args, 0, is_tracepoint);
d77f58be
SS
13517
13518 if (num_printed == 0)
1042e4c0 13519 {
e5a67952 13520 if (args == NULL || *args == '\0')
d77f58be
SS
13521 ui_out_message (uiout, 0, "No tracepoints.\n");
13522 else
e5a67952 13523 ui_out_message (uiout, 0, "No tracepoint matching '%s'.\n", args);
1042e4c0 13524 }
ad443146
SS
13525
13526 default_collect_info ();
1042e4c0
SS
13527}
13528
4a64f543 13529/* The 'enable trace' command enables tracepoints.
1042e4c0
SS
13530 Not supported by all targets. */
13531static void
13532enable_trace_command (char *args, int from_tty)
13533{
13534 enable_command (args, from_tty);
13535}
13536
4a64f543 13537/* The 'disable trace' command disables tracepoints.
1042e4c0
SS
13538 Not supported by all targets. */
13539static void
13540disable_trace_command (char *args, int from_tty)
13541{
13542 disable_command (args, from_tty);
13543}
13544
4a64f543 13545/* Remove a tracepoint (or all if no argument). */
1042e4c0
SS
13546static void
13547delete_trace_command (char *arg, int from_tty)
13548{
35df4500 13549 struct breakpoint *b, *b_tmp;
1042e4c0
SS
13550
13551 dont_repeat ();
13552
13553 if (arg == 0)
13554 {
13555 int breaks_to_delete = 0;
13556
13557 /* Delete all breakpoints if no argument.
13558 Do not delete internal or call-dummy breakpoints, these
4a64f543
MS
13559 have to be deleted with an explicit breakpoint number
13560 argument. */
1042e4c0 13561 ALL_TRACEPOINTS (b)
46c6471b 13562 if (is_tracepoint (b) && user_breakpoint_p (b))
1042e4c0
SS
13563 {
13564 breaks_to_delete = 1;
13565 break;
13566 }
1042e4c0
SS
13567
13568 /* Ask user only if there are some breakpoints to delete. */
13569 if (!from_tty
13570 || (breaks_to_delete && query (_("Delete all tracepoints? "))))
13571 {
35df4500 13572 ALL_BREAKPOINTS_SAFE (b, b_tmp)
46c6471b 13573 if (is_tracepoint (b) && user_breakpoint_p (b))
1042e4c0 13574 delete_breakpoint (b);
1042e4c0
SS
13575 }
13576 }
13577 else
51be5b68 13578 map_breakpoint_numbers (arg, do_map_delete_breakpoint, NULL);
1042e4c0
SS
13579}
13580
197f0a60
TT
13581/* Helper function for trace_pass_command. */
13582
13583static void
d9b3f62e 13584trace_pass_set_count (struct tracepoint *tp, int count, int from_tty)
197f0a60 13585{
d9b3f62e
PA
13586 tp->pass_count = count;
13587 observer_notify_tracepoint_modified (tp->base.number);
197f0a60
TT
13588 if (from_tty)
13589 printf_filtered (_("Setting tracepoint %d's passcount to %d\n"),
d9b3f62e 13590 tp->base.number, count);
197f0a60
TT
13591}
13592
1042e4c0
SS
13593/* Set passcount for tracepoint.
13594
13595 First command argument is passcount, second is tracepoint number.
13596 If tracepoint number omitted, apply to most recently defined.
13597 Also accepts special argument "all". */
13598
13599static void
13600trace_pass_command (char *args, int from_tty)
13601{
d9b3f62e 13602 struct tracepoint *t1;
1042e4c0 13603 unsigned int count;
1042e4c0
SS
13604
13605 if (args == 0 || *args == 0)
3e43a32a
MS
13606 error (_("passcount command requires an "
13607 "argument (count + optional TP num)"));
1042e4c0 13608
4a64f543 13609 count = strtoul (args, &args, 10); /* Count comes first, then TP num. */
1042e4c0
SS
13610
13611 while (*args && isspace ((int) *args))
13612 args++;
13613
13614 if (*args && strncasecmp (args, "all", 3) == 0)
13615 {
d9b3f62e
PA
13616 struct breakpoint *b;
13617
1042e4c0 13618 args += 3; /* Skip special argument "all". */
1042e4c0
SS
13619 if (*args)
13620 error (_("Junk at end of arguments."));
1042e4c0 13621
d9b3f62e 13622 ALL_TRACEPOINTS (b)
197f0a60 13623 {
d9b3f62e 13624 t1 = (struct tracepoint *) b;
197f0a60
TT
13625 trace_pass_set_count (t1, count, from_tty);
13626 }
13627 }
13628 else if (*args == '\0')
1042e4c0 13629 {
197f0a60 13630 t1 = get_tracepoint_by_number (&args, NULL, 1);
1042e4c0 13631 if (t1)
197f0a60
TT
13632 trace_pass_set_count (t1, count, from_tty);
13633 }
13634 else
13635 {
13636 struct get_number_or_range_state state;
13637
13638 init_number_or_range (&state, args);
13639 while (!state.finished)
1042e4c0 13640 {
197f0a60
TT
13641 t1 = get_tracepoint_by_number (&args, &state, 1);
13642 if (t1)
13643 trace_pass_set_count (t1, count, from_tty);
1042e4c0
SS
13644 }
13645 }
1042e4c0
SS
13646}
13647
d9b3f62e 13648struct tracepoint *
1042e4c0
SS
13649get_tracepoint (int num)
13650{
13651 struct breakpoint *t;
13652
13653 ALL_TRACEPOINTS (t)
13654 if (t->number == num)
d9b3f62e 13655 return (struct tracepoint *) t;
1042e4c0
SS
13656
13657 return NULL;
13658}
13659
d5551862
SS
13660/* Find the tracepoint with the given target-side number (which may be
13661 different from the tracepoint number after disconnecting and
13662 reconnecting). */
13663
d9b3f62e 13664struct tracepoint *
d5551862
SS
13665get_tracepoint_by_number_on_target (int num)
13666{
d9b3f62e 13667 struct breakpoint *b;
d5551862 13668
d9b3f62e
PA
13669 ALL_TRACEPOINTS (b)
13670 {
13671 struct tracepoint *t = (struct tracepoint *) b;
13672
13673 if (t->number_on_target == num)
13674 return t;
13675 }
d5551862
SS
13676
13677 return NULL;
13678}
13679
1042e4c0 13680/* Utility: parse a tracepoint number and look it up in the list.
197f0a60
TT
13681 If STATE is not NULL, use, get_number_or_range_state and ignore ARG.
13682 If OPTIONAL_P is true, then if the argument is missing, the most
1042e4c0 13683 recent tracepoint (tracepoint_count) is returned. */
d9b3f62e 13684struct tracepoint *
197f0a60
TT
13685get_tracepoint_by_number (char **arg,
13686 struct get_number_or_range_state *state,
13687 int optional_p)
1042e4c0
SS
13688{
13689 extern int tracepoint_count;
13690 struct breakpoint *t;
13691 int tpnum;
13692 char *instring = arg == NULL ? NULL : *arg;
13693
197f0a60
TT
13694 if (state)
13695 {
13696 gdb_assert (!state->finished);
13697 tpnum = get_number_or_range (state);
13698 }
13699 else if (arg == NULL || *arg == NULL || ! **arg)
1042e4c0
SS
13700 {
13701 if (optional_p)
13702 tpnum = tracepoint_count;
13703 else
13704 error_no_arg (_("tracepoint number"));
13705 }
13706 else
197f0a60 13707 tpnum = get_number (arg);
1042e4c0
SS
13708
13709 if (tpnum <= 0)
13710 {
13711 if (instring && *instring)
13712 printf_filtered (_("bad tracepoint number at or near '%s'\n"),
13713 instring);
13714 else
3e43a32a
MS
13715 printf_filtered (_("Tracepoint argument missing "
13716 "and no previous tracepoint\n"));
1042e4c0
SS
13717 return NULL;
13718 }
13719
13720 ALL_TRACEPOINTS (t)
13721 if (t->number == tpnum)
13722 {
d9b3f62e 13723 return (struct tracepoint *) t;
1042e4c0
SS
13724 }
13725
1042e4c0
SS
13726 printf_unfiltered ("No tracepoint number %d.\n", tpnum);
13727 return NULL;
13728}
13729
d9b3f62e
PA
13730void
13731print_recreate_thread (struct breakpoint *b, struct ui_file *fp)
13732{
13733 if (b->thread != -1)
13734 fprintf_unfiltered (fp, " thread %d", b->thread);
13735
13736 if (b->task != 0)
13737 fprintf_unfiltered (fp, " task %d", b->task);
13738
13739 fprintf_unfiltered (fp, "\n");
13740}
13741
6149aea9
PA
13742/* Save information on user settable breakpoints (watchpoints, etc) to
13743 a new script file named FILENAME. If FILTER is non-NULL, call it
13744 on each breakpoint and only include the ones for which it returns
13745 non-zero. */
13746
1042e4c0 13747static void
6149aea9
PA
13748save_breakpoints (char *filename, int from_tty,
13749 int (*filter) (const struct breakpoint *))
1042e4c0
SS
13750{
13751 struct breakpoint *tp;
6149aea9 13752 int any = 0;
a7bdde9e 13753 char *pathname;
1042e4c0 13754 struct cleanup *cleanup;
a7bdde9e 13755 struct ui_file *fp;
6149aea9 13756 int extra_trace_bits = 0;
1042e4c0 13757
6149aea9
PA
13758 if (filename == 0 || *filename == 0)
13759 error (_("Argument required (file name in which to save)"));
1042e4c0
SS
13760
13761 /* See if we have anything to save. */
6149aea9 13762 ALL_BREAKPOINTS (tp)
1042e4c0 13763 {
6149aea9 13764 /* Skip internal and momentary breakpoints. */
09d682a4 13765 if (!user_breakpoint_p (tp))
6149aea9
PA
13766 continue;
13767
13768 /* If we have a filter, only save the breakpoints it accepts. */
13769 if (filter && !filter (tp))
13770 continue;
13771
13772 any = 1;
13773
13774 if (is_tracepoint (tp))
13775 {
13776 extra_trace_bits = 1;
13777
13778 /* We can stop searching. */
13779 break;
13780 }
1042e4c0 13781 }
6149aea9
PA
13782
13783 if (!any)
1042e4c0 13784 {
6149aea9 13785 warning (_("Nothing to save."));
1042e4c0
SS
13786 return;
13787 }
13788
6149aea9 13789 pathname = tilde_expand (filename);
1042e4c0 13790 cleanup = make_cleanup (xfree, pathname);
a7bdde9e 13791 fp = gdb_fopen (pathname, "w");
059fb39f 13792 if (!fp)
6149aea9
PA
13793 error (_("Unable to open file '%s' for saving (%s)"),
13794 filename, safe_strerror (errno));
a7bdde9e 13795 make_cleanup_ui_file_delete (fp);
8bf6485c 13796
6149aea9
PA
13797 if (extra_trace_bits)
13798 save_trace_state_variables (fp);
8bf6485c 13799
6149aea9 13800 ALL_BREAKPOINTS (tp)
1042e4c0 13801 {
6149aea9 13802 /* Skip internal and momentary breakpoints. */
09d682a4 13803 if (!user_breakpoint_p (tp))
6149aea9 13804 continue;
8bf6485c 13805
6149aea9
PA
13806 /* If we have a filter, only save the breakpoints it accepts. */
13807 if (filter && !filter (tp))
13808 continue;
13809
348d480f 13810 tp->ops->print_recreate (tp, fp);
1042e4c0 13811
6149aea9
PA
13812 /* Note, we can't rely on tp->number for anything, as we can't
13813 assume the recreated breakpoint numbers will match. Use $bpnum
13814 instead. */
13815
13816 if (tp->cond_string)
13817 fprintf_unfiltered (fp, " condition $bpnum %s\n", tp->cond_string);
13818
13819 if (tp->ignore_count)
13820 fprintf_unfiltered (fp, " ignore $bpnum %d\n", tp->ignore_count);
13821
a7bdde9e 13822 if (tp->commands)
1042e4c0 13823 {
a7bdde9e
VP
13824 volatile struct gdb_exception ex;
13825
6149aea9 13826 fprintf_unfiltered (fp, " commands\n");
a7bdde9e 13827
79a45e25 13828 ui_out_redirect (current_uiout, fp);
14dba4b4 13829 TRY_CATCH (ex, RETURN_MASK_ALL)
1042e4c0 13830 {
79a45e25 13831 print_command_lines (current_uiout, tp->commands->commands, 2);
a7bdde9e 13832 }
79a45e25 13833 ui_out_redirect (current_uiout, NULL);
1042e4c0 13834
a7bdde9e
VP
13835 if (ex.reason < 0)
13836 throw_exception (ex);
1042e4c0 13837
a7bdde9e 13838 fprintf_unfiltered (fp, " end\n");
1042e4c0 13839 }
6149aea9
PA
13840
13841 if (tp->enable_state == bp_disabled)
13842 fprintf_unfiltered (fp, "disable\n");
13843
13844 /* If this is a multi-location breakpoint, check if the locations
13845 should be individually disabled. Watchpoint locations are
13846 special, and not user visible. */
13847 if (!is_watchpoint (tp) && tp->loc && tp->loc->next)
13848 {
13849 struct bp_location *loc;
13850 int n = 1;
13851
13852 for (loc = tp->loc; loc != NULL; loc = loc->next, n++)
13853 if (!loc->enabled)
13854 fprintf_unfiltered (fp, "disable $bpnum.%d\n", n);
13855 }
1042e4c0 13856 }
8bf6485c 13857
6149aea9 13858 if (extra_trace_bits && *default_collect)
8bf6485c
SS
13859 fprintf_unfiltered (fp, "set default-collect %s\n", default_collect);
13860
1042e4c0
SS
13861 do_cleanups (cleanup);
13862 if (from_tty)
6149aea9
PA
13863 printf_filtered (_("Saved to file '%s'.\n"), filename);
13864}
13865
13866/* The `save breakpoints' command. */
13867
13868static void
13869save_breakpoints_command (char *args, int from_tty)
13870{
13871 save_breakpoints (args, from_tty, NULL);
13872}
13873
13874/* The `save tracepoints' command. */
13875
13876static void
13877save_tracepoints_command (char *args, int from_tty)
13878{
13879 save_breakpoints (args, from_tty, is_tracepoint);
1042e4c0
SS
13880}
13881
13882/* Create a vector of all tracepoints. */
13883
13884VEC(breakpoint_p) *
eeae04df 13885all_tracepoints (void)
1042e4c0
SS
13886{
13887 VEC(breakpoint_p) *tp_vec = 0;
13888 struct breakpoint *tp;
13889
13890 ALL_TRACEPOINTS (tp)
13891 {
13892 VEC_safe_push (breakpoint_p, tp_vec, tp);
13893 }
13894
13895 return tp_vec;
13896}
13897
c906108c 13898\f
4a64f543
MS
13899/* This help string is used for the break, hbreak, tbreak and thbreak
13900 commands. It is defined as a macro to prevent duplication.
13901 COMMAND should be a string constant containing the name of the
13902 command. */
31e2b00f
AS
13903#define BREAK_ARGS_HELP(command) \
13904command" [LOCATION] [thread THREADNUM] [if CONDITION]\n\
13905LOCATION may be a line number, function name, or \"*\" and an address.\n\
13906If a line number is specified, break at start of code for that line.\n\
13907If a function is specified, break at start of code for that function.\n\
13908If an address is specified, break at that exact address.\n\
dc10affe
PA
13909With no LOCATION, uses current execution address of the selected\n\
13910stack frame. This is useful for breaking on return to a stack frame.\n\
31e2b00f
AS
13911\n\
13912THREADNUM is the number from \"info threads\".\n\
13913CONDITION is a boolean expression.\n\
13914\n\
d41c0fc8
PA
13915Multiple breakpoints at one place are permitted, and useful if their\n\
13916conditions are different.\n\
31e2b00f
AS
13917\n\
13918Do \"help breakpoints\" for info on other commands dealing with breakpoints."
13919
44feb3ce
TT
13920/* List of subcommands for "catch". */
13921static struct cmd_list_element *catch_cmdlist;
13922
13923/* List of subcommands for "tcatch". */
13924static struct cmd_list_element *tcatch_cmdlist;
13925
9ac4176b 13926void
44feb3ce
TT
13927add_catch_command (char *name, char *docstring,
13928 void (*sfunc) (char *args, int from_tty,
13929 struct cmd_list_element *command),
a96d9b2e
SDJ
13930 char **(*completer) (struct cmd_list_element *cmd,
13931 char *text, char *word),
44feb3ce
TT
13932 void *user_data_catch,
13933 void *user_data_tcatch)
13934{
13935 struct cmd_list_element *command;
13936
13937 command = add_cmd (name, class_breakpoint, NULL, docstring,
13938 &catch_cmdlist);
13939 set_cmd_sfunc (command, sfunc);
13940 set_cmd_context (command, user_data_catch);
a96d9b2e 13941 set_cmd_completer (command, completer);
44feb3ce
TT
13942
13943 command = add_cmd (name, class_breakpoint, NULL, docstring,
13944 &tcatch_cmdlist);
13945 set_cmd_sfunc (command, sfunc);
13946 set_cmd_context (command, user_data_tcatch);
a96d9b2e 13947 set_cmd_completer (command, completer);
44feb3ce
TT
13948}
13949
6c95b8df 13950static void
a79b8f6e 13951clear_syscall_counts (struct inferior *inf)
6c95b8df 13952{
6c95b8df
PA
13953 inf->total_syscalls_count = 0;
13954 inf->any_syscall_count = 0;
13955 VEC_free (int, inf->syscalls_counts);
13956}
13957
6149aea9
PA
13958static void
13959save_command (char *arg, int from_tty)
13960{
3e43a32a
MS
13961 printf_unfiltered (_("\"save\" must be followed by "
13962 "the name of a save subcommand.\n"));
6149aea9
PA
13963 help_list (save_cmdlist, "save ", -1, gdb_stdout);
13964}
13965
84f4c1fe
PM
13966struct breakpoint *
13967iterate_over_breakpoints (int (*callback) (struct breakpoint *, void *),
13968 void *data)
13969{
35df4500 13970 struct breakpoint *b, *b_tmp;
84f4c1fe 13971
35df4500 13972 ALL_BREAKPOINTS_SAFE (b, b_tmp)
84f4c1fe
PM
13973 {
13974 if ((*callback) (b, data))
13975 return b;
13976 }
13977
13978 return NULL;
13979}
13980
0574c78f
GB
13981/* Zero if any of the breakpoint's locations could be a location where
13982 functions have been inlined, nonzero otherwise. */
13983
13984static int
13985is_non_inline_function (struct breakpoint *b)
13986{
13987 /* The shared library event breakpoint is set on the address of a
13988 non-inline function. */
13989 if (b->type == bp_shlib_event)
13990 return 1;
13991
13992 return 0;
13993}
13994
13995/* Nonzero if the specified PC cannot be a location where functions
13996 have been inlined. */
13997
13998int
09ac7c10
TT
13999pc_at_non_inline_function (struct address_space *aspace, CORE_ADDR pc,
14000 const struct target_waitstatus *ws)
0574c78f
GB
14001{
14002 struct breakpoint *b;
14003 struct bp_location *bl;
14004
14005 ALL_BREAKPOINTS (b)
14006 {
14007 if (!is_non_inline_function (b))
14008 continue;
14009
14010 for (bl = b->loc; bl != NULL; bl = bl->next)
14011 {
14012 if (!bl->shlib_disabled
09ac7c10 14013 && bpstat_check_location (bl, aspace, pc, ws))
0574c78f
GB
14014 return 1;
14015 }
14016 }
14017
14018 return 0;
14019}
14020
2060206e
PA
14021void
14022initialize_breakpoint_ops (void)
14023{
14024 static int initialized = 0;
14025
14026 struct breakpoint_ops *ops;
14027
14028 if (initialized)
14029 return;
14030 initialized = 1;
14031
14032 /* The breakpoint_ops structure to be inherit by all kinds of
14033 breakpoints (real breakpoints, i.e., user "break" breakpoints,
14034 internal and momentary breakpoints, etc.). */
14035 ops = &bkpt_base_breakpoint_ops;
14036 *ops = base_breakpoint_ops;
14037 ops->re_set = bkpt_re_set;
14038 ops->insert_location = bkpt_insert_location;
14039 ops->remove_location = bkpt_remove_location;
14040 ops->breakpoint_hit = bkpt_breakpoint_hit;
983af33b
SDJ
14041 ops->create_sals_from_address = bkpt_create_sals_from_address;
14042 ops->create_breakpoints_sal = bkpt_create_breakpoints_sal;
14043 ops->decode_linespec = bkpt_decode_linespec;
2060206e
PA
14044
14045 /* The breakpoint_ops structure to be used in regular breakpoints. */
14046 ops = &bkpt_breakpoint_ops;
14047 *ops = bkpt_base_breakpoint_ops;
14048 ops->re_set = bkpt_re_set;
14049 ops->resources_needed = bkpt_resources_needed;
14050 ops->print_it = bkpt_print_it;
14051 ops->print_mention = bkpt_print_mention;
14052 ops->print_recreate = bkpt_print_recreate;
14053
14054 /* Ranged breakpoints. */
14055 ops = &ranged_breakpoint_ops;
14056 *ops = bkpt_breakpoint_ops;
14057 ops->breakpoint_hit = breakpoint_hit_ranged_breakpoint;
14058 ops->resources_needed = resources_needed_ranged_breakpoint;
14059 ops->print_it = print_it_ranged_breakpoint;
14060 ops->print_one = print_one_ranged_breakpoint;
14061 ops->print_one_detail = print_one_detail_ranged_breakpoint;
14062 ops->print_mention = print_mention_ranged_breakpoint;
14063 ops->print_recreate = print_recreate_ranged_breakpoint;
14064
14065 /* Internal breakpoints. */
14066 ops = &internal_breakpoint_ops;
14067 *ops = bkpt_base_breakpoint_ops;
14068 ops->re_set = internal_bkpt_re_set;
14069 ops->check_status = internal_bkpt_check_status;
14070 ops->print_it = internal_bkpt_print_it;
14071 ops->print_mention = internal_bkpt_print_mention;
14072
14073 /* Momentary breakpoints. */
14074 ops = &momentary_breakpoint_ops;
14075 *ops = bkpt_base_breakpoint_ops;
14076 ops->re_set = momentary_bkpt_re_set;
14077 ops->check_status = momentary_bkpt_check_status;
14078 ops->print_it = momentary_bkpt_print_it;
14079 ops->print_mention = momentary_bkpt_print_mention;
14080
14081 /* GNU v3 exception catchpoints. */
14082 ops = &gnu_v3_exception_catchpoint_ops;
14083 *ops = bkpt_breakpoint_ops;
14084 ops->print_it = print_it_exception_catchpoint;
14085 ops->print_one = print_one_exception_catchpoint;
14086 ops->print_mention = print_mention_exception_catchpoint;
14087 ops->print_recreate = print_recreate_exception_catchpoint;
14088
14089 /* Watchpoints. */
14090 ops = &watchpoint_breakpoint_ops;
14091 *ops = base_breakpoint_ops;
3a5c3e22 14092 ops->dtor = dtor_watchpoint;
2060206e
PA
14093 ops->re_set = re_set_watchpoint;
14094 ops->insert_location = insert_watchpoint;
14095 ops->remove_location = remove_watchpoint;
14096 ops->breakpoint_hit = breakpoint_hit_watchpoint;
14097 ops->check_status = check_status_watchpoint;
14098 ops->resources_needed = resources_needed_watchpoint;
14099 ops->works_in_software_mode = works_in_software_mode_watchpoint;
14100 ops->print_it = print_it_watchpoint;
14101 ops->print_mention = print_mention_watchpoint;
14102 ops->print_recreate = print_recreate_watchpoint;
14103
14104 /* Masked watchpoints. */
14105 ops = &masked_watchpoint_breakpoint_ops;
14106 *ops = watchpoint_breakpoint_ops;
14107 ops->insert_location = insert_masked_watchpoint;
14108 ops->remove_location = remove_masked_watchpoint;
14109 ops->resources_needed = resources_needed_masked_watchpoint;
14110 ops->works_in_software_mode = works_in_software_mode_masked_watchpoint;
14111 ops->print_it = print_it_masked_watchpoint;
14112 ops->print_one_detail = print_one_detail_masked_watchpoint;
14113 ops->print_mention = print_mention_masked_watchpoint;
14114 ops->print_recreate = print_recreate_masked_watchpoint;
14115
14116 /* Tracepoints. */
14117 ops = &tracepoint_breakpoint_ops;
14118 *ops = base_breakpoint_ops;
14119 ops->re_set = tracepoint_re_set;
14120 ops->breakpoint_hit = tracepoint_breakpoint_hit;
14121 ops->print_one_detail = tracepoint_print_one_detail;
14122 ops->print_mention = tracepoint_print_mention;
14123 ops->print_recreate = tracepoint_print_recreate;
983af33b
SDJ
14124 ops->create_sals_from_address = tracepoint_create_sals_from_address;
14125 ops->create_breakpoints_sal = tracepoint_create_breakpoints_sal;
14126 ops->decode_linespec = tracepoint_decode_linespec;
14127
14128 /* Static tracepoints with marker (`-m'). */
14129 ops = &strace_marker_breakpoint_ops;
14130 *ops = tracepoint_breakpoint_ops;
14131 ops->create_sals_from_address = strace_marker_create_sals_from_address;
14132 ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
14133 ops->decode_linespec = strace_marker_decode_linespec;
2060206e
PA
14134
14135 /* Fork catchpoints. */
14136 ops = &catch_fork_breakpoint_ops;
14137 *ops = base_breakpoint_ops;
14138 ops->insert_location = insert_catch_fork;
14139 ops->remove_location = remove_catch_fork;
14140 ops->breakpoint_hit = breakpoint_hit_catch_fork;
14141 ops->print_it = print_it_catch_fork;
14142 ops->print_one = print_one_catch_fork;
14143 ops->print_mention = print_mention_catch_fork;
14144 ops->print_recreate = print_recreate_catch_fork;
14145
14146 /* Vfork catchpoints. */
14147 ops = &catch_vfork_breakpoint_ops;
14148 *ops = base_breakpoint_ops;
14149 ops->insert_location = insert_catch_vfork;
14150 ops->remove_location = remove_catch_vfork;
14151 ops->breakpoint_hit = breakpoint_hit_catch_vfork;
14152 ops->print_it = print_it_catch_vfork;
14153 ops->print_one = print_one_catch_vfork;
14154 ops->print_mention = print_mention_catch_vfork;
14155 ops->print_recreate = print_recreate_catch_vfork;
14156
14157 /* Exec catchpoints. */
14158 ops = &catch_exec_breakpoint_ops;
14159 *ops = base_breakpoint_ops;
14160 ops->dtor = dtor_catch_exec;
14161 ops->insert_location = insert_catch_exec;
14162 ops->remove_location = remove_catch_exec;
14163 ops->breakpoint_hit = breakpoint_hit_catch_exec;
14164 ops->print_it = print_it_catch_exec;
14165 ops->print_one = print_one_catch_exec;
14166 ops->print_mention = print_mention_catch_exec;
14167 ops->print_recreate = print_recreate_catch_exec;
14168
14169 /* Syscall catchpoints. */
14170 ops = &catch_syscall_breakpoint_ops;
14171 *ops = base_breakpoint_ops;
14172 ops->dtor = dtor_catch_syscall;
14173 ops->insert_location = insert_catch_syscall;
14174 ops->remove_location = remove_catch_syscall;
14175 ops->breakpoint_hit = breakpoint_hit_catch_syscall;
14176 ops->print_it = print_it_catch_syscall;
14177 ops->print_one = print_one_catch_syscall;
14178 ops->print_mention = print_mention_catch_syscall;
14179 ops->print_recreate = print_recreate_catch_syscall;
edcc5120
TT
14180
14181 /* Solib-related catchpoints. */
14182 ops = &catch_solib_breakpoint_ops;
14183 *ops = base_breakpoint_ops;
14184 ops->dtor = dtor_catch_solib;
14185 ops->insert_location = insert_catch_solib;
14186 ops->remove_location = remove_catch_solib;
14187 ops->breakpoint_hit = breakpoint_hit_catch_solib;
14188 ops->check_status = check_status_catch_solib;
14189 ops->print_it = print_it_catch_solib;
14190 ops->print_one = print_one_catch_solib;
14191 ops->print_mention = print_mention_catch_solib;
14192 ops->print_recreate = print_recreate_catch_solib;
2060206e
PA
14193}
14194
c906108c 14195void
fba45db2 14196_initialize_breakpoint (void)
c906108c
SS
14197{
14198 struct cmd_list_element *c;
14199
2060206e
PA
14200 initialize_breakpoint_ops ();
14201
84acb35a 14202 observer_attach_solib_unloaded (disable_breakpoints_in_unloaded_shlib);
6c95b8df 14203 observer_attach_inferior_exit (clear_syscall_counts);
1f3b5d1b 14204 observer_attach_memory_changed (invalidate_bp_value_on_memory_change);
84acb35a 14205
17450429
PP
14206 breakpoint_objfile_key = register_objfile_data ();
14207
c906108c
SS
14208 breakpoint_chain = 0;
14209 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
14210 before a breakpoint is set. */
14211 breakpoint_count = 0;
14212
1042e4c0
SS
14213 tracepoint_count = 0;
14214
1bedd215
AC
14215 add_com ("ignore", class_breakpoint, ignore_command, _("\
14216Set ignore-count of breakpoint number N to COUNT.\n\
14217Usage is `ignore N COUNT'."));
c906108c 14218 if (xdb_commands)
c5aa993b 14219 add_com_alias ("bc", "ignore", class_breakpoint, 1);
c906108c 14220
1bedd215
AC
14221 add_com ("commands", class_breakpoint, commands_command, _("\
14222Set commands to be executed when a breakpoint is hit.\n\
c906108c
SS
14223Give breakpoint number as argument after \"commands\".\n\
14224With no argument, the targeted breakpoint is the last one set.\n\
14225The commands themselves follow starting on the next line.\n\
14226Type a line containing \"end\" to indicate the end of them.\n\
14227Give \"silent\" as the first line to make the breakpoint silent;\n\
1bedd215 14228then no output is printed when it is hit, except what the commands print."));
c906108c 14229
1bedd215
AC
14230 add_com ("condition", class_breakpoint, condition_command, _("\
14231Specify breakpoint number N to break only if COND is true.\n\
c906108c 14232Usage is `condition N COND', where N is an integer and COND is an\n\
1bedd215 14233expression to be evaluated whenever breakpoint N is reached."));
c906108c 14234
1bedd215 14235 c = add_com ("tbreak", class_breakpoint, tbreak_command, _("\
31e2b00f 14236Set a temporary breakpoint.\n\
c906108c
SS
14237Like \"break\" except the breakpoint is only temporary,\n\
14238so it will be deleted when hit. Equivalent to \"break\" followed\n\
31e2b00f
AS
14239by using \"enable delete\" on the breakpoint number.\n\
14240\n"
14241BREAK_ARGS_HELP ("tbreak")));
5ba2abeb 14242 set_cmd_completer (c, location_completer);
c94fdfd0 14243
1bedd215 14244 c = add_com ("hbreak", class_breakpoint, hbreak_command, _("\
a3be7890 14245Set a hardware assisted breakpoint.\n\
c906108c 14246Like \"break\" except the breakpoint requires hardware support,\n\
31e2b00f
AS
14247some target hardware may not have this support.\n\
14248\n"
14249BREAK_ARGS_HELP ("hbreak")));
5ba2abeb 14250 set_cmd_completer (c, location_completer);
c906108c 14251
1bedd215 14252 c = add_com ("thbreak", class_breakpoint, thbreak_command, _("\
31e2b00f 14253Set a temporary hardware assisted breakpoint.\n\
c906108c 14254Like \"hbreak\" except the breakpoint is only temporary,\n\
31e2b00f
AS
14255so it will be deleted when hit.\n\
14256\n"
14257BREAK_ARGS_HELP ("thbreak")));
5ba2abeb 14258 set_cmd_completer (c, location_completer);
c906108c 14259
1bedd215
AC
14260 add_prefix_cmd ("enable", class_breakpoint, enable_command, _("\
14261Enable some breakpoints.\n\
c906108c
SS
14262Give breakpoint numbers (separated by spaces) as arguments.\n\
14263With no subcommand, breakpoints are enabled until you command otherwise.\n\
14264This is used to cancel the effect of the \"disable\" command.\n\
1bedd215 14265With a subcommand you can enable temporarily."),
c906108c
SS
14266 &enablelist, "enable ", 1, &cmdlist);
14267 if (xdb_commands)
1bedd215
AC
14268 add_com ("ab", class_breakpoint, enable_command, _("\
14269Enable some breakpoints.\n\
c906108c
SS
14270Give breakpoint numbers (separated by spaces) as arguments.\n\
14271With no subcommand, breakpoints are enabled until you command otherwise.\n\
14272This is used to cancel the effect of the \"disable\" command.\n\
1bedd215 14273With a subcommand you can enable temporarily."));
c906108c
SS
14274
14275 add_com_alias ("en", "enable", class_breakpoint, 1);
14276
84951ab5 14277 add_prefix_cmd ("breakpoints", class_breakpoint, enable_command, _("\
1bedd215 14278Enable some breakpoints.\n\
c906108c
SS
14279Give breakpoint numbers (separated by spaces) as arguments.\n\
14280This is used to cancel the effect of the \"disable\" command.\n\
1bedd215 14281May be abbreviated to simply \"enable\".\n"),
c5aa993b 14282 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
c906108c 14283
1a966eab
AC
14284 add_cmd ("once", no_class, enable_once_command, _("\
14285Enable breakpoints for one hit. Give breakpoint numbers.\n\
14286If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
c906108c
SS
14287 &enablebreaklist);
14288
1a966eab
AC
14289 add_cmd ("delete", no_class, enable_delete_command, _("\
14290Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
14291If a breakpoint is hit while enabled in this fashion, it is deleted."),
c906108c
SS
14292 &enablebreaklist);
14293
1a966eab
AC
14294 add_cmd ("delete", no_class, enable_delete_command, _("\
14295Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
14296If a breakpoint is hit while enabled in this fashion, it is deleted."),
c906108c
SS
14297 &enablelist);
14298
1a966eab
AC
14299 add_cmd ("once", no_class, enable_once_command, _("\
14300Enable breakpoints for one hit. Give breakpoint numbers.\n\
14301If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
c906108c
SS
14302 &enablelist);
14303
1bedd215
AC
14304 add_prefix_cmd ("disable", class_breakpoint, disable_command, _("\
14305Disable some breakpoints.\n\
c906108c
SS
14306Arguments are breakpoint numbers with spaces in between.\n\
14307To disable all breakpoints, give no argument.\n\
64b9b334 14308A disabled breakpoint is not forgotten, but has no effect until re-enabled."),
c906108c
SS
14309 &disablelist, "disable ", 1, &cmdlist);
14310 add_com_alias ("dis", "disable", class_breakpoint, 1);
14311 add_com_alias ("disa", "disable", class_breakpoint, 1);
14312 if (xdb_commands)
1bedd215
AC
14313 add_com ("sb", class_breakpoint, disable_command, _("\
14314Disable some breakpoints.\n\
c906108c
SS
14315Arguments are breakpoint numbers with spaces in between.\n\
14316To disable all breakpoints, give no argument.\n\
64b9b334 14317A disabled breakpoint is not forgotten, but has no effect until re-enabled."));
c906108c 14318
1a966eab
AC
14319 add_cmd ("breakpoints", class_alias, disable_command, _("\
14320Disable some breakpoints.\n\
c906108c
SS
14321Arguments are breakpoint numbers with spaces in between.\n\
14322To disable all breakpoints, give no argument.\n\
64b9b334 14323A disabled breakpoint is not forgotten, but has no effect until re-enabled.\n\
1a966eab 14324This command may be abbreviated \"disable\"."),
c906108c
SS
14325 &disablelist);
14326
1bedd215
AC
14327 add_prefix_cmd ("delete", class_breakpoint, delete_command, _("\
14328Delete some breakpoints or auto-display expressions.\n\
c906108c
SS
14329Arguments are breakpoint numbers with spaces in between.\n\
14330To delete all breakpoints, give no argument.\n\
14331\n\
14332Also a prefix command for deletion of other GDB objects.\n\
1bedd215 14333The \"unset\" command is also an alias for \"delete\"."),
c906108c
SS
14334 &deletelist, "delete ", 1, &cmdlist);
14335 add_com_alias ("d", "delete", class_breakpoint, 1);
7f198e01 14336 add_com_alias ("del", "delete", class_breakpoint, 1);
c906108c 14337 if (xdb_commands)
1bedd215
AC
14338 add_com ("db", class_breakpoint, delete_command, _("\
14339Delete some breakpoints.\n\
c906108c 14340Arguments are breakpoint numbers with spaces in between.\n\
1bedd215 14341To delete all breakpoints, give no argument.\n"));
c906108c 14342
1a966eab
AC
14343 add_cmd ("breakpoints", class_alias, delete_command, _("\
14344Delete some breakpoints or auto-display expressions.\n\
c906108c
SS
14345Arguments are breakpoint numbers with spaces in between.\n\
14346To delete all breakpoints, give no argument.\n\
1a966eab 14347This command may be abbreviated \"delete\"."),
c906108c
SS
14348 &deletelist);
14349
1bedd215
AC
14350 add_com ("clear", class_breakpoint, clear_command, _("\
14351Clear breakpoint at specified line or function.\n\
c906108c
SS
14352Argument may be line number, function name, or \"*\" and an address.\n\
14353If line number is specified, all breakpoints in that line are cleared.\n\
14354If function is specified, breakpoints at beginning of function are cleared.\n\
1bedd215
AC
14355If an address is specified, breakpoints at that address are cleared.\n\
14356\n\
14357With no argument, clears all breakpoints in the line that the selected frame\n\
c906108c
SS
14358is executing in.\n\
14359\n\
1bedd215 14360See also the \"delete\" command which clears breakpoints by number."));
a6cc4789 14361 add_com_alias ("cl", "clear", class_breakpoint, 1);
c906108c 14362
1bedd215 14363 c = add_com ("break", class_breakpoint, break_command, _("\
31e2b00f
AS
14364Set breakpoint at specified line or function.\n"
14365BREAK_ARGS_HELP ("break")));
5ba2abeb 14366 set_cmd_completer (c, location_completer);
c94fdfd0 14367
c906108c
SS
14368 add_com_alias ("b", "break", class_run, 1);
14369 add_com_alias ("br", "break", class_run, 1);
14370 add_com_alias ("bre", "break", class_run, 1);
14371 add_com_alias ("brea", "break", class_run, 1);
14372
7681d515
PM
14373 if (xdb_commands)
14374 add_com_alias ("ba", "break", class_breakpoint, 1);
c906108c
SS
14375
14376 if (dbx_commands)
14377 {
1bedd215
AC
14378 add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command, _("\
14379Break in function/address or break at a line in the current file."),
c5aa993b
JM
14380 &stoplist, "stop ", 1, &cmdlist);
14381 add_cmd ("in", class_breakpoint, stopin_command,
1a966eab 14382 _("Break in function or address."), &stoplist);
c5aa993b 14383 add_cmd ("at", class_breakpoint, stopat_command,
1a966eab 14384 _("Break at a line in the current file."), &stoplist);
1bedd215
AC
14385 add_com ("status", class_info, breakpoints_info, _("\
14386Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
14387The \"Type\" column indicates one of:\n\
14388\tbreakpoint - normal breakpoint\n\
14389\twatchpoint - watchpoint\n\
14390The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
14391the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
14392breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1bedd215
AC
14393address and file/line number respectively.\n\
14394\n\
14395Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
14396are set to the address of the last breakpoint listed unless the command\n\
14397is prefixed with \"server \".\n\n\
c906108c 14398Convenience variable \"$bpnum\" contains the number of the last\n\
1bedd215 14399breakpoint set."));
c906108c
SS
14400 }
14401
1bedd215 14402 add_info ("breakpoints", breakpoints_info, _("\
e5a67952 14403Status of specified breakpoints (all user-settable breakpoints if no argument).\n\
c906108c
SS
14404The \"Type\" column indicates one of:\n\
14405\tbreakpoint - normal breakpoint\n\
14406\twatchpoint - watchpoint\n\
14407The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
14408the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
14409breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1bedd215
AC
14410address and file/line number respectively.\n\
14411\n\
14412Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
14413are set to the address of the last breakpoint listed unless the command\n\
14414is prefixed with \"server \".\n\n\
c906108c 14415Convenience variable \"$bpnum\" contains the number of the last\n\
1bedd215 14416breakpoint set."));
c906108c 14417
6b04bdb7
MS
14418 add_info_alias ("b", "breakpoints", 1);
14419
c906108c 14420 if (xdb_commands)
1bedd215
AC
14421 add_com ("lb", class_breakpoint, breakpoints_info, _("\
14422Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
14423The \"Type\" column indicates one of:\n\
14424\tbreakpoint - normal breakpoint\n\
14425\twatchpoint - watchpoint\n\
14426The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
14427the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
14428breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1bedd215
AC
14429address and file/line number respectively.\n\
14430\n\
14431Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
14432are set to the address of the last breakpoint listed unless the command\n\
14433is prefixed with \"server \".\n\n\
c906108c 14434Convenience variable \"$bpnum\" contains the number of the last\n\
1bedd215 14435breakpoint set."));
c906108c 14436
1a966eab
AC
14437 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints, _("\
14438Status of all breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
14439The \"Type\" column indicates one of:\n\
14440\tbreakpoint - normal breakpoint\n\
14441\twatchpoint - watchpoint\n\
14442\tlongjmp - internal breakpoint used to step through longjmp()\n\
14443\tlongjmp resume - internal breakpoint at the target of longjmp()\n\
14444\tuntil - internal breakpoint used by the \"until\" command\n\
1a966eab
AC
14445\tfinish - internal breakpoint used by the \"finish\" command\n\
14446The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
c906108c
SS
14447the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
14448breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1a966eab
AC
14449address and file/line number respectively.\n\
14450\n\
14451Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
14452are set to the address of the last breakpoint listed unless the command\n\
14453is prefixed with \"server \".\n\n\
c906108c 14454Convenience variable \"$bpnum\" contains the number of the last\n\
1a966eab 14455breakpoint set."),
c906108c
SS
14456 &maintenanceinfolist);
14457
44feb3ce
TT
14458 add_prefix_cmd ("catch", class_breakpoint, catch_command, _("\
14459Set catchpoints to catch events."),
14460 &catch_cmdlist, "catch ",
14461 0/*allow-unknown*/, &cmdlist);
14462
14463 add_prefix_cmd ("tcatch", class_breakpoint, tcatch_command, _("\
14464Set temporary catchpoints to catch events."),
14465 &tcatch_cmdlist, "tcatch ",
14466 0/*allow-unknown*/, &cmdlist);
14467
14468 /* Add catch and tcatch sub-commands. */
14469 add_catch_command ("catch", _("\
88e7d25d 14470Catch an exception, when caught."),
44feb3ce 14471 catch_catch_command,
a96d9b2e 14472 NULL,
44feb3ce
TT
14473 CATCH_PERMANENT,
14474 CATCH_TEMPORARY);
14475 add_catch_command ("throw", _("\
88e7d25d 14476Catch an exception, when thrown."),
44feb3ce 14477 catch_throw_command,
a96d9b2e 14478 NULL,
44feb3ce
TT
14479 CATCH_PERMANENT,
14480 CATCH_TEMPORARY);
14481 add_catch_command ("fork", _("Catch calls to fork."),
14482 catch_fork_command_1,
a96d9b2e 14483 NULL,
44feb3ce
TT
14484 (void *) (uintptr_t) catch_fork_permanent,
14485 (void *) (uintptr_t) catch_fork_temporary);
14486 add_catch_command ("vfork", _("Catch calls to vfork."),
14487 catch_fork_command_1,
a96d9b2e 14488 NULL,
44feb3ce
TT
14489 (void *) (uintptr_t) catch_vfork_permanent,
14490 (void *) (uintptr_t) catch_vfork_temporary);
14491 add_catch_command ("exec", _("Catch calls to exec."),
14492 catch_exec_command_1,
a96d9b2e
SDJ
14493 NULL,
14494 CATCH_PERMANENT,
14495 CATCH_TEMPORARY);
edcc5120
TT
14496 add_catch_command ("load", _("Catch loads of shared libraries.\n\
14497Usage: catch load [REGEX]\n\
14498If REGEX is given, only stop for libraries matching the regular expression."),
14499 catch_load_command_1,
14500 NULL,
14501 CATCH_PERMANENT,
14502 CATCH_TEMPORARY);
14503 add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
14504Usage: catch unload [REGEX]\n\
14505If REGEX is given, only stop for libraries matching the regular expression."),
14506 catch_unload_command_1,
14507 NULL,
14508 CATCH_PERMANENT,
14509 CATCH_TEMPORARY);
a96d9b2e
SDJ
14510 add_catch_command ("syscall", _("\
14511Catch system calls by their names and/or numbers.\n\
14512Arguments say which system calls to catch. If no arguments\n\
14513are given, every system call will be caught.\n\
14514Arguments, if given, should be one or more system call names\n\
14515(if your system supports that), or system call numbers."),
14516 catch_syscall_command_1,
14517 catch_syscall_completer,
44feb3ce
TT
14518 CATCH_PERMANENT,
14519 CATCH_TEMPORARY);
c5aa993b 14520
1bedd215
AC
14521 c = add_com ("watch", class_breakpoint, watch_command, _("\
14522Set a watchpoint for an expression.\n\
06a64a0b 14523Usage: watch [-l|-location] EXPRESSION\n\
c906108c 14524A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
14525an expression changes.\n\
14526If -l or -location is given, this evaluates EXPRESSION and watches\n\
14527the memory to which it refers."));
65d12d83 14528 set_cmd_completer (c, expression_completer);
c906108c 14529
1bedd215
AC
14530 c = add_com ("rwatch", class_breakpoint, rwatch_command, _("\
14531Set a read watchpoint for an expression.\n\
06a64a0b 14532Usage: rwatch [-l|-location] EXPRESSION\n\
c906108c 14533A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
14534an expression is read.\n\
14535If -l or -location is given, this evaluates EXPRESSION and watches\n\
14536the memory to which it refers."));
65d12d83 14537 set_cmd_completer (c, expression_completer);
c906108c 14538
1bedd215
AC
14539 c = add_com ("awatch", class_breakpoint, awatch_command, _("\
14540Set a watchpoint for an expression.\n\
06a64a0b 14541Usage: awatch [-l|-location] EXPRESSION\n\
c906108c 14542A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
14543an expression is either read or written.\n\
14544If -l or -location is given, this evaluates EXPRESSION and watches\n\
14545the memory to which it refers."));
65d12d83 14546 set_cmd_completer (c, expression_completer);
c906108c 14547
d77f58be 14548 add_info ("watchpoints", watchpoints_info, _("\
e5a67952 14549Status of specified watchpoints (all watchpoints if no argument)."));
c906108c 14550
920d2a44
AC
14551 /* XXX: cagney/2005-02-23: This should be a boolean, and should
14552 respond to changes - contrary to the description. */
85c07804
AC
14553 add_setshow_zinteger_cmd ("can-use-hw-watchpoints", class_support,
14554 &can_use_hw_watchpoints, _("\
14555Set debugger's willingness to use watchpoint hardware."), _("\
14556Show debugger's willingness to use watchpoint hardware."), _("\
c906108c
SS
14557If zero, gdb will not use hardware for new watchpoints, even if\n\
14558such is available. (However, any hardware watchpoints that were\n\
14559created before setting this to nonzero, will continue to use watchpoint\n\
85c07804
AC
14560hardware.)"),
14561 NULL,
920d2a44 14562 show_can_use_hw_watchpoints,
85c07804 14563 &setlist, &showlist);
c906108c
SS
14564
14565 can_use_hw_watchpoints = 1;
fa8d40ab 14566
1042e4c0
SS
14567 /* Tracepoint manipulation commands. */
14568
14569 c = add_com ("trace", class_breakpoint, trace_command, _("\
14570Set a tracepoint at specified line or function.\n\
14571\n"
14572BREAK_ARGS_HELP ("trace") "\n\
14573Do \"help tracepoints\" for info on other tracepoint commands."));
14574 set_cmd_completer (c, location_completer);
14575
14576 add_com_alias ("tp", "trace", class_alias, 0);
14577 add_com_alias ("tr", "trace", class_alias, 1);
14578 add_com_alias ("tra", "trace", class_alias, 1);
14579 add_com_alias ("trac", "trace", class_alias, 1);
14580
7a697b8d
SS
14581 c = add_com ("ftrace", class_breakpoint, ftrace_command, _("\
14582Set a fast tracepoint at specified line or function.\n\
14583\n"
14584BREAK_ARGS_HELP ("ftrace") "\n\
14585Do \"help tracepoints\" for info on other tracepoint commands."));
14586 set_cmd_completer (c, location_completer);
14587
0fb4aa4b
PA
14588 c = add_com ("strace", class_breakpoint, strace_command, _("\
14589Set a static tracepoint at specified line, function or marker.\n\
14590\n\
14591strace [LOCATION] [if CONDITION]\n\
14592LOCATION may be a line number, function name, \"*\" and an address,\n\
14593or -m MARKER_ID.\n\
14594If a line number is specified, probe the marker at start of code\n\
14595for that line. If a function is specified, probe the marker at start\n\
14596of code for that function. If an address is specified, probe the marker\n\
14597at that exact address. If a marker id is specified, probe the marker\n\
14598with that name. With no LOCATION, uses current execution address of\n\
14599the selected stack frame.\n\
14600Static tracepoints accept an extra collect action -- ``collect $_sdata''.\n\
14601This collects arbitrary user data passed in the probe point call to the\n\
14602tracing library. You can inspect it when analyzing the trace buffer,\n\
14603by printing the $_sdata variable like any other convenience variable.\n\
14604\n\
14605CONDITION is a boolean expression.\n\
14606\n\
d41c0fc8
PA
14607Multiple tracepoints at one place are permitted, and useful if their\n\
14608conditions are different.\n\
0fb4aa4b
PA
14609\n\
14610Do \"help breakpoints\" for info on other commands dealing with breakpoints.\n\
14611Do \"help tracepoints\" for info on other tracepoint commands."));
14612 set_cmd_completer (c, location_completer);
14613
1042e4c0 14614 add_info ("tracepoints", tracepoints_info, _("\
e5a67952 14615Status of specified tracepoints (all tracepoints if no argument).\n\
1042e4c0
SS
14616Convenience variable \"$tpnum\" contains the number of the\n\
14617last tracepoint set."));
14618
14619 add_info_alias ("tp", "tracepoints", 1);
14620
14621 add_cmd ("tracepoints", class_trace, delete_trace_command, _("\
14622Delete specified tracepoints.\n\
14623Arguments are tracepoint numbers, separated by spaces.\n\
14624No argument means delete all tracepoints."),
14625 &deletelist);
14626
14627 c = add_cmd ("tracepoints", class_trace, disable_trace_command, _("\
14628Disable specified tracepoints.\n\
14629Arguments are tracepoint numbers, separated by spaces.\n\
14630No argument means disable all tracepoints."),
14631 &disablelist);
14632 deprecate_cmd (c, "disable");
14633
14634 c = add_cmd ("tracepoints", class_trace, enable_trace_command, _("\
14635Enable specified tracepoints.\n\
14636Arguments are tracepoint numbers, separated by spaces.\n\
14637No argument means enable all tracepoints."),
14638 &enablelist);
14639 deprecate_cmd (c, "enable");
14640
14641 add_com ("passcount", class_trace, trace_pass_command, _("\
14642Set the passcount for a tracepoint.\n\
14643The trace will end when the tracepoint has been passed 'count' times.\n\
14644Usage: passcount COUNT TPNUM, where TPNUM may also be \"all\";\n\
14645if TPNUM is omitted, passcount refers to the last tracepoint defined."));
14646
6149aea9
PA
14647 add_prefix_cmd ("save", class_breakpoint, save_command,
14648 _("Save breakpoint definitions as a script."),
14649 &save_cmdlist, "save ",
14650 0/*allow-unknown*/, &cmdlist);
14651
14652 c = add_cmd ("breakpoints", class_breakpoint, save_breakpoints_command, _("\
14653Save current breakpoint definitions as a script.\n\
cce7e648 14654This includes all types of breakpoints (breakpoints, watchpoints,\n\
6149aea9
PA
14655catchpoints, tracepoints). Use the 'source' command in another debug\n\
14656session to restore them."),
14657 &save_cmdlist);
14658 set_cmd_completer (c, filename_completer);
14659
14660 c = add_cmd ("tracepoints", class_trace, save_tracepoints_command, _("\
1042e4c0 14661Save current tracepoint definitions as a script.\n\
6149aea9
PA
14662Use the 'source' command in another debug session to restore them."),
14663 &save_cmdlist);
1042e4c0
SS
14664 set_cmd_completer (c, filename_completer);
14665
6149aea9
PA
14666 c = add_com_alias ("save-tracepoints", "save tracepoints", class_trace, 0);
14667 deprecate_cmd (c, "save tracepoints");
14668
1bedd215 14669 add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, _("\
fa8d40ab
JJ
14670Breakpoint specific settings\n\
14671Configure various breakpoint-specific variables such as\n\
1bedd215 14672pending breakpoint behavior"),
fa8d40ab
JJ
14673 &breakpoint_set_cmdlist, "set breakpoint ",
14674 0/*allow-unknown*/, &setlist);
1bedd215 14675 add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, _("\
fa8d40ab
JJ
14676Breakpoint specific settings\n\
14677Configure various breakpoint-specific variables such as\n\
1bedd215 14678pending breakpoint behavior"),
fa8d40ab
JJ
14679 &breakpoint_show_cmdlist, "show breakpoint ",
14680 0/*allow-unknown*/, &showlist);
14681
7915a72c
AC
14682 add_setshow_auto_boolean_cmd ("pending", no_class,
14683 &pending_break_support, _("\
14684Set debugger's behavior regarding pending breakpoints."), _("\
14685Show debugger's behavior regarding pending breakpoints."), _("\
6e1d7d6c
AC
14686If on, an unrecognized breakpoint location will cause gdb to create a\n\
14687pending breakpoint. If off, an unrecognized breakpoint location results in\n\
14688an error. If auto, an unrecognized breakpoint location results in a\n\
7915a72c 14689user-query to see if a pending breakpoint should be created."),
2c5b56ce 14690 NULL,
920d2a44 14691 show_pending_break_support,
6e1d7d6c
AC
14692 &breakpoint_set_cmdlist,
14693 &breakpoint_show_cmdlist);
fa8d40ab
JJ
14694
14695 pending_break_support = AUTO_BOOLEAN_AUTO;
765dc015
VP
14696
14697 add_setshow_boolean_cmd ("auto-hw", no_class,
14698 &automatic_hardware_breakpoints, _("\
14699Set automatic usage of hardware breakpoints."), _("\
14700Show automatic usage of hardware breakpoints."), _("\
14701If set, the debugger will automatically use hardware breakpoints for\n\
14702breakpoints set with \"break\" but falling in read-only memory. If not set,\n\
14703a warning will be emitted for such breakpoints."),
14704 NULL,
14705 show_automatic_hardware_breakpoints,
14706 &breakpoint_set_cmdlist,
14707 &breakpoint_show_cmdlist);
74960c60 14708
33e5cbd6
PA
14709 add_setshow_enum_cmd ("always-inserted", class_support,
14710 always_inserted_enums, &always_inserted_mode, _("\
74960c60
VP
14711Set mode for inserting breakpoints."), _("\
14712Show mode for inserting breakpoints."), _("\
33e5cbd6
PA
14713When this mode is off, breakpoints are inserted in inferior when it is\n\
14714resumed, and removed when execution stops. When this mode is on,\n\
14715breakpoints are inserted immediately and removed only when the user\n\
14716deletes the breakpoint. When this mode is auto (which is the default),\n\
14717the behaviour depends on the non-stop setting (see help set non-stop).\n\
14718In this case, if gdb is controlling the inferior in non-stop mode, gdb\n\
14719behaves as if always-inserted mode is on; if gdb is controlling the\n\
14720inferior in all-stop mode, gdb behaves as if always-inserted mode is off."),
74960c60
VP
14721 NULL,
14722 &show_always_inserted_mode,
14723 &breakpoint_set_cmdlist,
14724 &breakpoint_show_cmdlist);
f1310107
TJB
14725
14726 add_com ("break-range", class_breakpoint, break_range_command, _("\
14727Set a breakpoint for an address range.\n\
14728break-range START-LOCATION, END-LOCATION\n\
14729where START-LOCATION and END-LOCATION can be one of the following:\n\
14730 LINENUM, for that line in the current file,\n\
14731 FILE:LINENUM, for that line in that file,\n\
14732 +OFFSET, for that number of lines after the current line\n\
14733 or the start of the range\n\
14734 FUNCTION, for the first line in that function,\n\
14735 FILE:FUNCTION, to distinguish among like-named static functions.\n\
14736 *ADDRESS, for the instruction at that address.\n\
14737\n\
14738The breakpoint will stop execution of the inferior whenever it executes\n\
14739an instruction at any address within the [START-LOCATION, END-LOCATION]\n\
14740range (including START-LOCATION and END-LOCATION)."));
14741
765dc015 14742 automatic_hardware_breakpoints = 1;
f3b1572e
PA
14743
14744 observer_attach_about_to_proceed (breakpoint_about_to_proceed);
c906108c 14745}
This page took 2.170319 seconds and 4 git commands to generate.