gdb/
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
CommitLineData
c906108c 1/* Everything about breakpoints, for GDB.
8926118c 2
28e7fd62 3 Copyright (C) 1986-2013 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"
55aa24fb
SDJ
63#include "gdb_regex.h"
64#include "probe.h"
e9cafbcc 65#include "cli/cli-utils.h"
be34f849 66#include "continuations.h"
1bfeeb0f
JL
67#include "stack.h"
68#include "skip.h"
edcc5120 69#include "gdb_regex.h"
b775012e 70#include "ax-gdb.h"
e2e4d78b 71#include "dummy-frame.h"
c906108c 72
d3ce09f5
SS
73#include "format.h"
74
1042e4c0
SS
75/* readline include files */
76#include "readline/readline.h"
77#include "readline/history.h"
78
79/* readline defines this. */
80#undef savestring
81
034dad6f 82#include "mi/mi-common.h"
7371cf6d 83#include "python/python.h"
104c1213 84
e7e8980f
YQ
85/* Enums for exception-handling support. */
86enum exception_event_kind
87{
88 EX_EVENT_THROW,
89 EX_EVENT_CATCH
90};
91
4a64f543 92/* Prototypes for local functions. */
c906108c 93
a14ed312 94static void enable_delete_command (char *, int);
c906108c 95
a14ed312 96static void enable_once_command (char *, int);
c906108c 97
816338b5
SS
98static void enable_count_command (char *, int);
99
a14ed312 100static void disable_command (char *, int);
c906108c 101
a14ed312 102static void enable_command (char *, int);
c906108c 103
95a42b64
TT
104static void map_breakpoint_numbers (char *, void (*) (struct breakpoint *,
105 void *),
106 void *);
c906108c 107
a14ed312 108static void ignore_command (char *, int);
c906108c 109
4efb68b1 110static int breakpoint_re_set_one (void *);
c906108c 111
348d480f
PA
112static void breakpoint_re_set_default (struct breakpoint *);
113
983af33b
SDJ
114static void create_sals_from_address_default (char **,
115 struct linespec_result *,
116 enum bptype, char *,
117 char **);
118
119static void create_breakpoints_sal_default (struct gdbarch *,
120 struct linespec_result *,
121 struct linespec_sals *,
e7e0cddf 122 char *, char *, enum bptype,
983af33b
SDJ
123 enum bpdisp, int, int,
124 int,
125 const struct breakpoint_ops *,
44f238bb 126 int, int, int, unsigned);
983af33b
SDJ
127
128static void decode_linespec_default (struct breakpoint *, char **,
129 struct symtabs_and_lines *);
130
a14ed312 131static void clear_command (char *, int);
c906108c 132
a14ed312 133static void catch_command (char *, int);
c906108c 134
a9634178 135static int can_use_hardware_watchpoint (struct value *);
c906108c 136
98deb0da 137static void break_command_1 (char *, int, int);
c906108c 138
a14ed312 139static void mention (struct breakpoint *);
c906108c 140
348d480f
PA
141static struct breakpoint *set_raw_breakpoint_without_location (struct gdbarch *,
142 enum bptype,
c0a91b2b 143 const struct breakpoint_ops *);
3742cc8b
YQ
144static struct bp_location *add_location_to_breakpoint (struct breakpoint *,
145 const struct symtab_and_line *);
146
4a64f543
MS
147/* This function is used in gdbtk sources and thus can not be made
148 static. */
63c252f8 149struct breakpoint *set_raw_breakpoint (struct gdbarch *gdbarch,
348d480f 150 struct symtab_and_line,
c0a91b2b
TT
151 enum bptype,
152 const struct breakpoint_ops *);
c906108c 153
06edf0c0
PA
154static struct breakpoint *
155 momentary_breakpoint_from_master (struct breakpoint *orig,
156 enum bptype type,
c0a91b2b 157 const struct breakpoint_ops *ops);
06edf0c0 158
76897487
KB
159static void breakpoint_adjustment_warning (CORE_ADDR, CORE_ADDR, int, int);
160
a6d9a66e
UW
161static CORE_ADDR adjust_breakpoint_address (struct gdbarch *gdbarch,
162 CORE_ADDR bpaddr,
88f7da05 163 enum bptype bptype);
76897487 164
6c95b8df
PA
165static void describe_other_breakpoints (struct gdbarch *,
166 struct program_space *, CORE_ADDR,
5af949e3 167 struct obj_section *, int);
c906108c 168
6c95b8df
PA
169static int breakpoint_address_match (struct address_space *aspace1,
170 CORE_ADDR addr1,
171 struct address_space *aspace2,
172 CORE_ADDR addr2);
173
85d721b8
PA
174static int watchpoint_locations_match (struct bp_location *loc1,
175 struct bp_location *loc2);
176
f1310107
TJB
177static int breakpoint_location_address_match (struct bp_location *bl,
178 struct address_space *aspace,
179 CORE_ADDR addr);
180
a14ed312 181static void breakpoints_info (char *, int);
c906108c 182
d77f58be
SS
183static void watchpoints_info (char *, int);
184
e5a67952
MS
185static int breakpoint_1 (char *, int,
186 int (*) (const struct breakpoint *));
c906108c 187
4efb68b1 188static int breakpoint_cond_eval (void *);
c906108c 189
4efb68b1 190static void cleanup_executing_breakpoints (void *);
c906108c 191
a14ed312 192static void commands_command (char *, int);
c906108c 193
a14ed312 194static void condition_command (char *, int);
c906108c 195
c5aa993b
JM
196typedef enum
197 {
198 mark_inserted,
199 mark_uninserted
200 }
201insertion_state_t;
c906108c 202
0bde7532 203static int remove_breakpoint (struct bp_location *, insertion_state_t);
6c95b8df 204static int remove_breakpoint_1 (struct bp_location *, insertion_state_t);
c906108c 205
e514a9d6 206static enum print_stop_action print_bp_stop_message (bpstat bs);
c906108c 207
4efb68b1 208static int watchpoint_check (void *);
c906108c 209
a14ed312 210static void maintenance_info_breakpoints (char *, int);
c906108c 211
a14ed312 212static int hw_breakpoint_used_count (void);
c906108c 213
a1398e0c
PA
214static int hw_watchpoint_use_count (struct breakpoint *);
215
216static int hw_watchpoint_used_count_others (struct breakpoint *except,
217 enum bptype type,
218 int *other_type_used);
c906108c 219
a14ed312 220static void hbreak_command (char *, int);
c906108c 221
a14ed312 222static void thbreak_command (char *, int);
c906108c 223
816338b5
SS
224static void enable_breakpoint_disp (struct breakpoint *, enum bpdisp,
225 int count);
c906108c 226
a14ed312 227static void stop_command (char *arg, int from_tty);
7a292a7a 228
a14ed312 229static void stopin_command (char *arg, int from_tty);
7a292a7a 230
a14ed312 231static void stopat_command (char *arg, int from_tty);
7a292a7a 232
a14ed312 233static char *ep_parse_optional_if_clause (char **arg);
7a292a7a 234
d85310f7
MS
235static void catch_exception_command_1 (enum exception_event_kind ex_event,
236 char *arg, int tempflag, int from_tty);
7a292a7a 237
a14ed312 238static void tcatch_command (char *arg, int from_tty);
7a292a7a 239
d03285ec
UW
240static void detach_single_step_breakpoints (void);
241
6c95b8df
PA
242static int single_step_breakpoint_inserted_here_p (struct address_space *,
243 CORE_ADDR pc);
1aafd4da 244
fe3f5fa8 245static void free_bp_location (struct bp_location *loc);
f431efe5
PA
246static void incref_bp_location (struct bp_location *loc);
247static void decref_bp_location (struct bp_location **loc);
fe3f5fa8 248
39d61571 249static struct bp_location *allocate_bp_location (struct breakpoint *bpt);
a5606eee 250
b60e7edf 251static void update_global_location_list (int);
a5606eee 252
b60e7edf 253static void update_global_location_list_nothrow (int);
74960c60 254
d77f58be 255static int is_hardware_watchpoint (const struct breakpoint *bpt);
74960c60
VP
256
257static void insert_breakpoint_locations (void);
a5606eee 258
a96d9b2e
SDJ
259static int syscall_catchpoint_p (struct breakpoint *b);
260
1042e4c0
SS
261static void tracepoints_info (char *, int);
262
263static void delete_trace_command (char *, int);
264
265static void enable_trace_command (char *, int);
266
267static void disable_trace_command (char *, int);
268
269static void trace_pass_command (char *, int);
270
558a9d82
YQ
271static void set_tracepoint_count (int num);
272
9c06b0b4
TJB
273static int is_masked_watchpoint (const struct breakpoint *b);
274
b775012e
LM
275static struct bp_location **get_first_locp_gte_addr (CORE_ADDR address);
276
983af33b
SDJ
277/* Return 1 if B refers to a static tracepoint set by marker ("-m"), zero
278 otherwise. */
279
280static int strace_marker_p (struct breakpoint *b);
0fb4aa4b 281
edcc5120
TT
282static void init_catchpoint (struct breakpoint *b,
283 struct gdbarch *gdbarch, int tempflag,
284 char *cond_string,
285 const struct breakpoint_ops *ops);
286
2060206e
PA
287/* The abstract base class all breakpoint_ops structures inherit
288 from. */
289static struct breakpoint_ops base_breakpoint_ops;
290
291/* The breakpoint_ops structure to be inherited by all breakpoint_ops
292 that are implemented on top of software or hardware breakpoints
293 (user breakpoints, internal and momentary breakpoints, etc.). */
294static struct breakpoint_ops bkpt_base_breakpoint_ops;
295
296/* Internal breakpoints class type. */
06edf0c0 297static struct breakpoint_ops internal_breakpoint_ops;
2060206e
PA
298
299/* Momentary breakpoints class type. */
06edf0c0
PA
300static struct breakpoint_ops momentary_breakpoint_ops;
301
e2e4d78b
JK
302/* Momentary breakpoints for bp_longjmp and bp_exception class type. */
303static struct breakpoint_ops longjmp_breakpoint_ops;
304
2060206e
PA
305/* The breakpoint_ops structure to be used in regular user created
306 breakpoints. */
307struct breakpoint_ops bkpt_breakpoint_ops;
308
55aa24fb
SDJ
309/* Breakpoints set on probes. */
310static struct breakpoint_ops bkpt_probe_breakpoint_ops;
311
e7e0cddf
SS
312/* Dynamic printf class type. */
313static struct breakpoint_ops dprintf_breakpoint_ops;
314
d3ce09f5
SS
315/* The style in which to perform a dynamic printf. This is a user
316 option because different output options have different tradeoffs;
317 if GDB does the printing, there is better error handling if there
318 is a problem with any of the arguments, but using an inferior
319 function lets you have special-purpose printers and sending of
320 output to the same place as compiled-in print functions. */
321
322static const char dprintf_style_gdb[] = "gdb";
323static const char dprintf_style_call[] = "call";
324static const char dprintf_style_agent[] = "agent";
325static const char *const dprintf_style_enums[] = {
326 dprintf_style_gdb,
327 dprintf_style_call,
328 dprintf_style_agent,
329 NULL
330};
331static const char *dprintf_style = dprintf_style_gdb;
332
333/* The function to use for dynamic printf if the preferred style is to
334 call into the inferior. The value is simply a string that is
335 copied into the command, so it can be anything that GDB can
336 evaluate to a callable address, not necessarily a function name. */
337
338static char *dprintf_function = "";
339
340/* The channel to use for dynamic printf if the preferred style is to
341 call into the inferior; if a nonempty string, it will be passed to
342 the call as the first argument, with the format string as the
343 second. As with the dprintf function, this can be anything that
344 GDB knows how to evaluate, so in addition to common choices like
345 "stderr", this could be an app-specific expression like
346 "mystreams[curlogger]". */
347
348static char *dprintf_channel = "";
349
350/* True if dprintf commands should continue to operate even if GDB
351 has disconnected. */
352static int disconnected_dprintf = 1;
353
5cea2a26
PA
354/* A reference-counted struct command_line. This lets multiple
355 breakpoints share a single command list. */
356struct counted_command_line
357{
358 /* The reference count. */
359 int refc;
360
361 /* The command list. */
362 struct command_line *commands;
363};
364
365struct command_line *
366breakpoint_commands (struct breakpoint *b)
367{
368 return b->commands ? b->commands->commands : NULL;
369}
3daf8fe5 370
f3b1572e
PA
371/* Flag indicating that a command has proceeded the inferior past the
372 current breakpoint. */
373
374static int breakpoint_proceeded;
375
956a9fb9 376const char *
2cec12e5
AR
377bpdisp_text (enum bpdisp disp)
378{
4a64f543
MS
379 /* NOTE: the following values are a part of MI protocol and
380 represent values of 'disp' field returned when inferior stops at
381 a breakpoint. */
bc043ef3 382 static const char * const bpdisps[] = {"del", "dstp", "dis", "keep"};
cc59ec59 383
2cec12e5
AR
384 return bpdisps[(int) disp];
385}
c906108c 386
4a64f543 387/* Prototypes for exported functions. */
c906108c 388/* If FALSE, gdb will not use hardware support for watchpoints, even
4a64f543 389 if such is available. */
c906108c
SS
390static int can_use_hw_watchpoints;
391
920d2a44
AC
392static void
393show_can_use_hw_watchpoints (struct ui_file *file, int from_tty,
394 struct cmd_list_element *c,
395 const char *value)
396{
3e43a32a
MS
397 fprintf_filtered (file,
398 _("Debugger's willingness to use "
399 "watchpoint hardware is %s.\n"),
920d2a44
AC
400 value);
401}
402
fa8d40ab
JJ
403/* If AUTO_BOOLEAN_FALSE, gdb will not attempt to create pending breakpoints.
404 If AUTO_BOOLEAN_TRUE, gdb will automatically create pending breakpoints
4a64f543 405 for unrecognized breakpoint locations.
fa8d40ab
JJ
406 If AUTO_BOOLEAN_AUTO, gdb will query when breakpoints are unrecognized. */
407static enum auto_boolean pending_break_support;
920d2a44
AC
408static void
409show_pending_break_support (struct ui_file *file, int from_tty,
410 struct cmd_list_element *c,
411 const char *value)
412{
3e43a32a
MS
413 fprintf_filtered (file,
414 _("Debugger's behavior regarding "
415 "pending breakpoints is %s.\n"),
920d2a44
AC
416 value);
417}
fa8d40ab 418
765dc015 419/* If 1, gdb will automatically use hardware breakpoints for breakpoints
4a64f543 420 set with "break" but falling in read-only memory.
765dc015
VP
421 If 0, gdb will warn about such breakpoints, but won't automatically
422 use hardware breakpoints. */
423static int automatic_hardware_breakpoints;
424static void
425show_automatic_hardware_breakpoints (struct ui_file *file, int from_tty,
426 struct cmd_list_element *c,
427 const char *value)
428{
3e43a32a
MS
429 fprintf_filtered (file,
430 _("Automatic usage of hardware breakpoints is %s.\n"),
765dc015
VP
431 value);
432}
433
33e5cbd6
PA
434/* If on, gdb will keep breakpoints inserted even as inferior is
435 stopped, and immediately insert any new breakpoints. If off, gdb
436 will insert breakpoints into inferior only when resuming it, and
437 will remove breakpoints upon stop. If auto, GDB will behave as ON
438 if in non-stop mode, and as OFF if all-stop mode.*/
439
72d0e2c5
YQ
440static enum auto_boolean always_inserted_mode = AUTO_BOOLEAN_AUTO;
441
33e5cbd6 442static void
74960c60 443show_always_inserted_mode (struct ui_file *file, int from_tty,
33e5cbd6 444 struct cmd_list_element *c, const char *value)
74960c60 445{
72d0e2c5 446 if (always_inserted_mode == AUTO_BOOLEAN_AUTO)
3e43a32a
MS
447 fprintf_filtered (file,
448 _("Always inserted breakpoint "
449 "mode is %s (currently %s).\n"),
33e5cbd6
PA
450 value,
451 breakpoints_always_inserted_mode () ? "on" : "off");
452 else
3e43a32a
MS
453 fprintf_filtered (file, _("Always inserted breakpoint mode is %s.\n"),
454 value);
74960c60
VP
455}
456
33e5cbd6
PA
457int
458breakpoints_always_inserted_mode (void)
459{
72d0e2c5
YQ
460 return (always_inserted_mode == AUTO_BOOLEAN_TRUE
461 || (always_inserted_mode == AUTO_BOOLEAN_AUTO && non_stop));
33e5cbd6 462}
765dc015 463
b775012e
LM
464static const char condition_evaluation_both[] = "host or target";
465
466/* Modes for breakpoint condition evaluation. */
467static const char condition_evaluation_auto[] = "auto";
468static const char condition_evaluation_host[] = "host";
469static const char condition_evaluation_target[] = "target";
470static const char *const condition_evaluation_enums[] = {
471 condition_evaluation_auto,
472 condition_evaluation_host,
473 condition_evaluation_target,
474 NULL
475};
476
477/* Global that holds the current mode for breakpoint condition evaluation. */
478static const char *condition_evaluation_mode_1 = condition_evaluation_auto;
479
480/* Global that we use to display information to the user (gets its value from
481 condition_evaluation_mode_1. */
482static const char *condition_evaluation_mode = condition_evaluation_auto;
483
484/* Translate a condition evaluation mode MODE into either "host"
485 or "target". This is used mostly to translate from "auto" to the
486 real setting that is being used. It returns the translated
487 evaluation mode. */
488
489static const char *
490translate_condition_evaluation_mode (const char *mode)
491{
492 if (mode == condition_evaluation_auto)
493 {
494 if (target_supports_evaluation_of_breakpoint_conditions ())
495 return condition_evaluation_target;
496 else
497 return condition_evaluation_host;
498 }
499 else
500 return mode;
501}
502
503/* Discovers what condition_evaluation_auto translates to. */
504
505static const char *
506breakpoint_condition_evaluation_mode (void)
507{
508 return translate_condition_evaluation_mode (condition_evaluation_mode);
509}
510
511/* Return true if GDB should evaluate breakpoint conditions or false
512 otherwise. */
513
514static int
515gdb_evaluates_breakpoint_condition_p (void)
516{
517 const char *mode = breakpoint_condition_evaluation_mode ();
518
519 return (mode == condition_evaluation_host);
520}
521
a14ed312 522void _initialize_breakpoint (void);
c906108c 523
c906108c
SS
524/* Are we executing breakpoint commands? */
525static int executing_breakpoint_commands;
526
c02f5703
MS
527/* Are overlay event breakpoints enabled? */
528static int overlay_events_enabled;
529
e09342b5
TJB
530/* See description in breakpoint.h. */
531int target_exact_watchpoints = 0;
532
c906108c 533/* Walk the following statement or block through all breakpoints.
e5dd4106 534 ALL_BREAKPOINTS_SAFE does so even if the statement deletes the
4a64f543 535 current breakpoint. */
c906108c 536
5c44784c 537#define ALL_BREAKPOINTS(B) for (B = breakpoint_chain; B; B = B->next)
c906108c 538
5c44784c
JM
539#define ALL_BREAKPOINTS_SAFE(B,TMP) \
540 for (B = breakpoint_chain; \
541 B ? (TMP=B->next, 1): 0; \
542 B = TMP)
c906108c 543
4a64f543
MS
544/* Similar iterator for the low-level breakpoints. SAFE variant is
545 not provided so update_global_location_list must not be called
546 while executing the block of ALL_BP_LOCATIONS. */
7cc221ef 547
876fa593
JK
548#define ALL_BP_LOCATIONS(B,BP_TMP) \
549 for (BP_TMP = bp_location; \
550 BP_TMP < bp_location + bp_location_count && (B = *BP_TMP); \
551 BP_TMP++)
7cc221ef 552
b775012e
LM
553/* Iterates through locations with address ADDRESS for the currently selected
554 program space. BP_LOCP_TMP points to each object. BP_LOCP_START points
555 to where the loop should start from.
556 If BP_LOCP_START is a NULL pointer, the macro automatically seeks the
557 appropriate location to start with. */
558
559#define ALL_BP_LOCATIONS_AT_ADDR(BP_LOCP_TMP, BP_LOCP_START, ADDRESS) \
560 for (BP_LOCP_START = BP_LOCP_START == NULL ? get_first_locp_gte_addr (ADDRESS) : BP_LOCP_START, \
561 BP_LOCP_TMP = BP_LOCP_START; \
562 BP_LOCP_START \
563 && (BP_LOCP_TMP < bp_location + bp_location_count \
564 && (*BP_LOCP_TMP)->address == ADDRESS); \
565 BP_LOCP_TMP++)
566
1042e4c0
SS
567/* Iterator for tracepoints only. */
568
569#define ALL_TRACEPOINTS(B) \
570 for (B = breakpoint_chain; B; B = B->next) \
d77f58be 571 if (is_tracepoint (B))
1042e4c0 572
7cc221ef 573/* Chains of all breakpoints defined. */
c906108c
SS
574
575struct breakpoint *breakpoint_chain;
576
876fa593
JK
577/* Array is sorted by bp_location_compare - primarily by the ADDRESS. */
578
579static struct bp_location **bp_location;
580
581/* Number of elements of BP_LOCATION. */
582
583static unsigned bp_location_count;
584
4a64f543
MS
585/* Maximum alignment offset between bp_target_info.PLACED_ADDRESS and
586 ADDRESS for the current elements of BP_LOCATION which get a valid
587 result from bp_location_has_shadow. You can use it for roughly
588 limiting the subrange of BP_LOCATION to scan for shadow bytes for
589 an address you need to read. */
876fa593
JK
590
591static CORE_ADDR bp_location_placed_address_before_address_max;
592
4a64f543
MS
593/* Maximum offset plus alignment between bp_target_info.PLACED_ADDRESS
594 + bp_target_info.SHADOW_LEN and ADDRESS for the current elements of
595 BP_LOCATION which get a valid result from bp_location_has_shadow.
596 You can use it for roughly limiting the subrange of BP_LOCATION to
597 scan for shadow bytes for an address you need to read. */
876fa593
JK
598
599static CORE_ADDR bp_location_shadow_len_after_address_max;
7cc221ef 600
4a64f543
MS
601/* The locations that no longer correspond to any breakpoint, unlinked
602 from bp_location array, but for which a hit may still be reported
603 by a target. */
20874c92
VP
604VEC(bp_location_p) *moribund_locations = NULL;
605
c906108c
SS
606/* Number of last breakpoint made. */
607
95a42b64
TT
608static int breakpoint_count;
609
86b17b60
PA
610/* The value of `breakpoint_count' before the last command that
611 created breakpoints. If the last (break-like) command created more
612 than one breakpoint, then the difference between BREAKPOINT_COUNT
613 and PREV_BREAKPOINT_COUNT is more than one. */
614static int prev_breakpoint_count;
c906108c 615
1042e4c0
SS
616/* Number of last tracepoint made. */
617
95a42b64 618static int tracepoint_count;
1042e4c0 619
6149aea9
PA
620static struct cmd_list_element *breakpoint_set_cmdlist;
621static struct cmd_list_element *breakpoint_show_cmdlist;
9291a0cd 622struct cmd_list_element *save_cmdlist;
6149aea9 623
468d015d
JJ
624/* Return whether a breakpoint is an active enabled breakpoint. */
625static int
626breakpoint_enabled (struct breakpoint *b)
627{
0d381245 628 return (b->enable_state == bp_enabled);
468d015d
JJ
629}
630
c906108c
SS
631/* Set breakpoint count to NUM. */
632
95a42b64 633static void
fba45db2 634set_breakpoint_count (int num)
c906108c 635{
86b17b60 636 prev_breakpoint_count = breakpoint_count;
c906108c 637 breakpoint_count = num;
4fa62494 638 set_internalvar_integer (lookup_internalvar ("bpnum"), num);
c906108c
SS
639}
640
86b17b60
PA
641/* Used by `start_rbreak_breakpoints' below, to record the current
642 breakpoint count before "rbreak" creates any breakpoint. */
643static int rbreak_start_breakpoint_count;
644
95a42b64
TT
645/* Called at the start an "rbreak" command to record the first
646 breakpoint made. */
86b17b60 647
95a42b64
TT
648void
649start_rbreak_breakpoints (void)
650{
86b17b60 651 rbreak_start_breakpoint_count = breakpoint_count;
95a42b64
TT
652}
653
654/* Called at the end of an "rbreak" command to record the last
655 breakpoint made. */
86b17b60 656
95a42b64
TT
657void
658end_rbreak_breakpoints (void)
659{
86b17b60 660 prev_breakpoint_count = rbreak_start_breakpoint_count;
95a42b64
TT
661}
662
4a64f543 663/* Used in run_command to zero the hit count when a new run starts. */
c906108c
SS
664
665void
fba45db2 666clear_breakpoint_hit_counts (void)
c906108c
SS
667{
668 struct breakpoint *b;
669
670 ALL_BREAKPOINTS (b)
671 b->hit_count = 0;
672}
673
9add0f1b
TT
674/* Allocate a new counted_command_line with reference count of 1.
675 The new structure owns COMMANDS. */
676
677static struct counted_command_line *
678alloc_counted_command_line (struct command_line *commands)
679{
680 struct counted_command_line *result
681 = xmalloc (sizeof (struct counted_command_line));
cc59ec59 682
9add0f1b
TT
683 result->refc = 1;
684 result->commands = commands;
685 return result;
686}
687
688/* Increment reference count. This does nothing if CMD is NULL. */
689
690static void
691incref_counted_command_line (struct counted_command_line *cmd)
692{
693 if (cmd)
694 ++cmd->refc;
695}
696
697/* Decrement reference count. If the reference count reaches 0,
698 destroy the counted_command_line. Sets *CMDP to NULL. This does
699 nothing if *CMDP is NULL. */
700
701static void
702decref_counted_command_line (struct counted_command_line **cmdp)
703{
704 if (*cmdp)
705 {
706 if (--(*cmdp)->refc == 0)
707 {
708 free_command_lines (&(*cmdp)->commands);
709 xfree (*cmdp);
710 }
711 *cmdp = NULL;
712 }
713}
714
715/* A cleanup function that calls decref_counted_command_line. */
716
717static void
718do_cleanup_counted_command_line (void *arg)
719{
720 decref_counted_command_line (arg);
721}
722
723/* Create a cleanup that calls decref_counted_command_line on the
724 argument. */
725
726static struct cleanup *
727make_cleanup_decref_counted_command_line (struct counted_command_line **cmdp)
728{
729 return make_cleanup (do_cleanup_counted_command_line, cmdp);
730}
731
c906108c 732\f
48cb2d85
VP
733/* Return the breakpoint with the specified number, or NULL
734 if the number does not refer to an existing breakpoint. */
735
736struct breakpoint *
737get_breakpoint (int num)
738{
739 struct breakpoint *b;
740
741 ALL_BREAKPOINTS (b)
742 if (b->number == num)
743 return b;
744
745 return NULL;
746}
5c44784c 747
c906108c 748\f
adc36818 749
b775012e
LM
750/* Mark locations as "conditions have changed" in case the target supports
751 evaluating conditions on its side. */
752
753static void
754mark_breakpoint_modified (struct breakpoint *b)
755{
756 struct bp_location *loc;
757
758 /* This is only meaningful if the target is
759 evaluating conditions and if the user has
760 opted for condition evaluation on the target's
761 side. */
762 if (gdb_evaluates_breakpoint_condition_p ()
763 || !target_supports_evaluation_of_breakpoint_conditions ())
764 return;
765
766 if (!is_breakpoint (b))
767 return;
768
769 for (loc = b->loc; loc; loc = loc->next)
770 loc->condition_changed = condition_modified;
771}
772
773/* Mark location as "conditions have changed" in case the target supports
774 evaluating conditions on its side. */
775
776static void
777mark_breakpoint_location_modified (struct bp_location *loc)
778{
779 /* This is only meaningful if the target is
780 evaluating conditions and if the user has
781 opted for condition evaluation on the target's
782 side. */
783 if (gdb_evaluates_breakpoint_condition_p ()
784 || !target_supports_evaluation_of_breakpoint_conditions ())
785
786 return;
787
788 if (!is_breakpoint (loc->owner))
789 return;
790
791 loc->condition_changed = condition_modified;
792}
793
794/* Sets the condition-evaluation mode using the static global
795 condition_evaluation_mode. */
796
797static void
798set_condition_evaluation_mode (char *args, int from_tty,
799 struct cmd_list_element *c)
800{
b775012e
LM
801 const char *old_mode, *new_mode;
802
803 if ((condition_evaluation_mode_1 == condition_evaluation_target)
804 && !target_supports_evaluation_of_breakpoint_conditions ())
805 {
806 condition_evaluation_mode_1 = condition_evaluation_mode;
807 warning (_("Target does not support breakpoint condition evaluation.\n"
808 "Using host evaluation mode instead."));
809 return;
810 }
811
812 new_mode = translate_condition_evaluation_mode (condition_evaluation_mode_1);
813 old_mode = translate_condition_evaluation_mode (condition_evaluation_mode);
814
abf1152a
JK
815 /* Flip the switch. Flip it even if OLD_MODE == NEW_MODE as one of the
816 settings was "auto". */
817 condition_evaluation_mode = condition_evaluation_mode_1;
818
b775012e
LM
819 /* Only update the mode if the user picked a different one. */
820 if (new_mode != old_mode)
821 {
822 struct bp_location *loc, **loc_tmp;
823 /* If the user switched to a different evaluation mode, we
824 need to synch the changes with the target as follows:
825
826 "host" -> "target": Send all (valid) conditions to the target.
827 "target" -> "host": Remove all the conditions from the target.
828 */
829
b775012e
LM
830 if (new_mode == condition_evaluation_target)
831 {
832 /* Mark everything modified and synch conditions with the
833 target. */
834 ALL_BP_LOCATIONS (loc, loc_tmp)
835 mark_breakpoint_location_modified (loc);
836 }
837 else
838 {
839 /* Manually mark non-duplicate locations to synch conditions
840 with the target. We do this to remove all the conditions the
841 target knows about. */
842 ALL_BP_LOCATIONS (loc, loc_tmp)
843 if (is_breakpoint (loc->owner) && loc->inserted)
844 loc->needs_update = 1;
845 }
846
847 /* Do the update. */
848 update_global_location_list (1);
849 }
850
851 return;
852}
853
854/* Shows the current mode of breakpoint condition evaluation. Explicitly shows
855 what "auto" is translating to. */
856
857static void
858show_condition_evaluation_mode (struct ui_file *file, int from_tty,
859 struct cmd_list_element *c, const char *value)
860{
861 if (condition_evaluation_mode == condition_evaluation_auto)
862 fprintf_filtered (file,
863 _("Breakpoint condition evaluation "
864 "mode is %s (currently %s).\n"),
865 value,
866 breakpoint_condition_evaluation_mode ());
867 else
868 fprintf_filtered (file, _("Breakpoint condition evaluation mode is %s.\n"),
869 value);
870}
871
872/* A comparison function for bp_location AP and BP that is used by
873 bsearch. This comparison function only cares about addresses, unlike
874 the more general bp_location_compare function. */
875
876static int
877bp_location_compare_addrs (const void *ap, const void *bp)
878{
879 struct bp_location *a = *(void **) ap;
880 struct bp_location *b = *(void **) bp;
881
882 if (a->address == b->address)
883 return 0;
884 else
885 return ((a->address > b->address) - (a->address < b->address));
886}
887
888/* Helper function to skip all bp_locations with addresses
889 less than ADDRESS. It returns the first bp_location that
890 is greater than or equal to ADDRESS. If none is found, just
891 return NULL. */
892
893static struct bp_location **
894get_first_locp_gte_addr (CORE_ADDR address)
895{
896 struct bp_location dummy_loc;
897 struct bp_location *dummy_locp = &dummy_loc;
898 struct bp_location **locp_found = NULL;
899
900 /* Initialize the dummy location's address field. */
901 memset (&dummy_loc, 0, sizeof (struct bp_location));
902 dummy_loc.address = address;
903
904 /* Find a close match to the first location at ADDRESS. */
905 locp_found = bsearch (&dummy_locp, bp_location, bp_location_count,
906 sizeof (struct bp_location **),
907 bp_location_compare_addrs);
908
909 /* Nothing was found, nothing left to do. */
910 if (locp_found == NULL)
911 return NULL;
912
913 /* We may have found a location that is at ADDRESS but is not the first in the
914 location's list. Go backwards (if possible) and locate the first one. */
915 while ((locp_found - 1) >= bp_location
916 && (*(locp_found - 1))->address == address)
917 locp_found--;
918
919 return locp_found;
920}
921
adc36818
PM
922void
923set_breakpoint_condition (struct breakpoint *b, char *exp,
924 int from_tty)
925{
3a5c3e22
PA
926 xfree (b->cond_string);
927 b->cond_string = NULL;
adc36818 928
3a5c3e22 929 if (is_watchpoint (b))
adc36818 930 {
3a5c3e22
PA
931 struct watchpoint *w = (struct watchpoint *) b;
932
933 xfree (w->cond_exp);
934 w->cond_exp = NULL;
935 }
936 else
937 {
938 struct bp_location *loc;
939
940 for (loc = b->loc; loc; loc = loc->next)
941 {
942 xfree (loc->cond);
943 loc->cond = NULL;
b775012e
LM
944
945 /* No need to free the condition agent expression
946 bytecode (if we have one). We will handle this
947 when we go through update_global_location_list. */
3a5c3e22 948 }
adc36818 949 }
adc36818
PM
950
951 if (*exp == 0)
952 {
953 if (from_tty)
954 printf_filtered (_("Breakpoint %d now unconditional.\n"), b->number);
955 }
956 else
957 {
958 char *arg = exp;
cc59ec59 959
adc36818
PM
960 /* I don't know if it matters whether this is the string the user
961 typed in or the decompiled expression. */
962 b->cond_string = xstrdup (arg);
963 b->condition_not_parsed = 0;
964
965 if (is_watchpoint (b))
966 {
3a5c3e22
PA
967 struct watchpoint *w = (struct watchpoint *) b;
968
adc36818
PM
969 innermost_block = NULL;
970 arg = exp;
1bb9788d 971 w->cond_exp = parse_exp_1 (&arg, 0, 0, 0);
adc36818
PM
972 if (*arg)
973 error (_("Junk at end of expression"));
3a5c3e22 974 w->cond_exp_valid_block = innermost_block;
adc36818
PM
975 }
976 else
977 {
3a5c3e22
PA
978 struct bp_location *loc;
979
adc36818
PM
980 for (loc = b->loc; loc; loc = loc->next)
981 {
982 arg = exp;
983 loc->cond =
1bb9788d
TT
984 parse_exp_1 (&arg, loc->address,
985 block_for_pc (loc->address), 0);
adc36818
PM
986 if (*arg)
987 error (_("Junk at end of expression"));
988 }
989 }
990 }
b775012e
LM
991 mark_breakpoint_modified (b);
992
ef37bb07 993 annotate_breakpoints_changed ();
8d3788bd 994 observer_notify_breakpoint_modified (b);
adc36818
PM
995}
996
d55637df
TT
997/* Completion for the "condition" command. */
998
999static VEC (char_ptr) *
1000condition_completer (struct cmd_list_element *cmd, char *text, char *word)
1001{
1002 char *space;
1003
1004 text = skip_spaces (text);
1005 space = skip_to_space (text);
1006 if (*space == '\0')
1007 {
1008 int len;
1009 struct breakpoint *b;
1010 VEC (char_ptr) *result = NULL;
1011
1012 if (text[0] == '$')
1013 {
1014 /* We don't support completion of history indices. */
1015 if (isdigit (text[1]))
1016 return NULL;
1017 return complete_internalvar (&text[1]);
1018 }
1019
1020 /* We're completing the breakpoint number. */
1021 len = strlen (text);
1022
1023 ALL_BREAKPOINTS (b)
1024 {
1025 int single = b->loc->next == NULL;
1026 struct bp_location *loc;
1027 int count = 1;
1028
1029 for (loc = b->loc; loc; loc = loc->next)
1030 {
1031 char location[50];
1032
1033 if (single)
8c042590 1034 xsnprintf (location, sizeof (location), "%d", b->number);
d55637df 1035 else
8c042590
PM
1036 xsnprintf (location, sizeof (location), "%d.%d", b->number,
1037 count);
d55637df
TT
1038
1039 if (strncmp (location, text, len) == 0)
1040 VEC_safe_push (char_ptr, result, xstrdup (location));
1041
1042 ++count;
1043 }
1044 }
1045
1046 return result;
1047 }
1048
1049 /* We're completing the expression part. */
1050 text = skip_spaces (space);
1051 return expression_completer (cmd, text, word);
1052}
1053
c906108c
SS
1054/* condition N EXP -- set break condition of breakpoint N to EXP. */
1055
1056static void
fba45db2 1057condition_command (char *arg, int from_tty)
c906108c 1058{
52f0bd74 1059 struct breakpoint *b;
c906108c 1060 char *p;
52f0bd74 1061 int bnum;
c906108c
SS
1062
1063 if (arg == 0)
e2e0b3e5 1064 error_no_arg (_("breakpoint number"));
c906108c
SS
1065
1066 p = arg;
1067 bnum = get_number (&p);
5c44784c 1068 if (bnum == 0)
8a3fe4f8 1069 error (_("Bad breakpoint argument: '%s'"), arg);
c906108c
SS
1070
1071 ALL_BREAKPOINTS (b)
1072 if (b->number == bnum)
2f069f6f 1073 {
7371cf6d
PM
1074 /* Check if this breakpoint has a Python object assigned to
1075 it, and if it has a definition of the "stop"
1076 method. This method and conditions entered into GDB from
1077 the CLI are mutually exclusive. */
1078 if (b->py_bp_object
1079 && gdbpy_breakpoint_has_py_cond (b->py_bp_object))
1080 error (_("Cannot set a condition where a Python 'stop' "
1081 "method has been defined in the breakpoint."));
2566ad2d 1082 set_breakpoint_condition (b, p, from_tty);
b775012e
LM
1083
1084 if (is_breakpoint (b))
1085 update_global_location_list (1);
1086
2f069f6f
JB
1087 return;
1088 }
c906108c 1089
8a3fe4f8 1090 error (_("No breakpoint number %d."), bnum);
c906108c
SS
1091}
1092
a7bdde9e
VP
1093/* Check that COMMAND do not contain commands that are suitable
1094 only for tracepoints and not suitable for ordinary breakpoints.
4a64f543
MS
1095 Throw if any such commands is found. */
1096
a7bdde9e
VP
1097static void
1098check_no_tracepoint_commands (struct command_line *commands)
1099{
1100 struct command_line *c;
cc59ec59 1101
a7bdde9e
VP
1102 for (c = commands; c; c = c->next)
1103 {
1104 int i;
1105
1106 if (c->control_type == while_stepping_control)
3e43a32a
MS
1107 error (_("The 'while-stepping' command can "
1108 "only be used for tracepoints"));
a7bdde9e
VP
1109
1110 for (i = 0; i < c->body_count; ++i)
1111 check_no_tracepoint_commands ((c->body_list)[i]);
1112
1113 /* Not that command parsing removes leading whitespace and comment
4a64f543 1114 lines and also empty lines. So, we only need to check for
a7bdde9e
VP
1115 command directly. */
1116 if (strstr (c->line, "collect ") == c->line)
1117 error (_("The 'collect' command can only be used for tracepoints"));
1118
51661e93
VP
1119 if (strstr (c->line, "teval ") == c->line)
1120 error (_("The 'teval' command can only be used for tracepoints"));
a7bdde9e
VP
1121 }
1122}
1123
d77f58be
SS
1124/* Encapsulate tests for different types of tracepoints. */
1125
d9b3f62e
PA
1126static int
1127is_tracepoint_type (enum bptype type)
1128{
1129 return (type == bp_tracepoint
1130 || type == bp_fast_tracepoint
1131 || type == bp_static_tracepoint);
1132}
1133
a7bdde9e 1134int
d77f58be 1135is_tracepoint (const struct breakpoint *b)
a7bdde9e 1136{
d9b3f62e 1137 return is_tracepoint_type (b->type);
a7bdde9e 1138}
d9b3f62e 1139
e5dd4106 1140/* A helper function that validates that COMMANDS are valid for a
95a42b64
TT
1141 breakpoint. This function will throw an exception if a problem is
1142 found. */
48cb2d85 1143
95a42b64
TT
1144static void
1145validate_commands_for_breakpoint (struct breakpoint *b,
1146 struct command_line *commands)
48cb2d85 1147{
d77f58be 1148 if (is_tracepoint (b))
a7bdde9e 1149 {
4a64f543
MS
1150 /* We need to verify that each top-level element of commands is
1151 valid for tracepoints, that there's at most one
1152 while-stepping element, and that while-stepping's body has
1153 valid tracing commands excluding nested while-stepping. */
a7bdde9e
VP
1154 struct command_line *c;
1155 struct command_line *while_stepping = 0;
1156 for (c = commands; c; c = c->next)
1157 {
a7bdde9e
VP
1158 if (c->control_type == while_stepping_control)
1159 {
1160 if (b->type == bp_fast_tracepoint)
3e43a32a
MS
1161 error (_("The 'while-stepping' command "
1162 "cannot be used for fast tracepoint"));
0fb4aa4b 1163 else if (b->type == bp_static_tracepoint)
3e43a32a
MS
1164 error (_("The 'while-stepping' command "
1165 "cannot be used for static tracepoint"));
a7bdde9e
VP
1166
1167 if (while_stepping)
3e43a32a
MS
1168 error (_("The 'while-stepping' command "
1169 "can be used only once"));
a7bdde9e
VP
1170 else
1171 while_stepping = c;
1172 }
1173 }
1174 if (while_stepping)
1175 {
1176 struct command_line *c2;
1177
1178 gdb_assert (while_stepping->body_count == 1);
1179 c2 = while_stepping->body_list[0];
1180 for (; c2; c2 = c2->next)
1181 {
a7bdde9e
VP
1182 if (c2->control_type == while_stepping_control)
1183 error (_("The 'while-stepping' command cannot be nested"));
1184 }
1185 }
1186 }
1187 else
1188 {
1189 check_no_tracepoint_commands (commands);
1190 }
95a42b64
TT
1191}
1192
0fb4aa4b
PA
1193/* Return a vector of all the static tracepoints set at ADDR. The
1194 caller is responsible for releasing the vector. */
1195
1196VEC(breakpoint_p) *
1197static_tracepoints_here (CORE_ADDR addr)
1198{
1199 struct breakpoint *b;
1200 VEC(breakpoint_p) *found = 0;
1201 struct bp_location *loc;
1202
1203 ALL_BREAKPOINTS (b)
1204 if (b->type == bp_static_tracepoint)
1205 {
1206 for (loc = b->loc; loc; loc = loc->next)
1207 if (loc->address == addr)
1208 VEC_safe_push(breakpoint_p, found, b);
1209 }
1210
1211 return found;
1212}
1213
95a42b64 1214/* Set the command list of B to COMMANDS. If breakpoint is tracepoint,
4a64f543 1215 validate that only allowed commands are included. */
95a42b64
TT
1216
1217void
4a64f543
MS
1218breakpoint_set_commands (struct breakpoint *b,
1219 struct command_line *commands)
95a42b64
TT
1220{
1221 validate_commands_for_breakpoint (b, commands);
a7bdde9e 1222
9add0f1b
TT
1223 decref_counted_command_line (&b->commands);
1224 b->commands = alloc_counted_command_line (commands);
ef37bb07 1225 annotate_breakpoints_changed ();
8d3788bd 1226 observer_notify_breakpoint_modified (b);
48cb2d85
VP
1227}
1228
45a43567
TT
1229/* Set the internal `silent' flag on the breakpoint. Note that this
1230 is not the same as the "silent" that may appear in the breakpoint's
1231 commands. */
1232
1233void
1234breakpoint_set_silent (struct breakpoint *b, int silent)
1235{
1236 int old_silent = b->silent;
1237
1238 b->silent = silent;
1239 if (old_silent != silent)
8d3788bd 1240 observer_notify_breakpoint_modified (b);
45a43567
TT
1241}
1242
1243/* Set the thread for this breakpoint. If THREAD is -1, make the
1244 breakpoint work for any thread. */
1245
1246void
1247breakpoint_set_thread (struct breakpoint *b, int thread)
1248{
1249 int old_thread = b->thread;
1250
1251 b->thread = thread;
1252 if (old_thread != thread)
8d3788bd 1253 observer_notify_breakpoint_modified (b);
45a43567
TT
1254}
1255
1256/* Set the task for this breakpoint. If TASK is 0, make the
1257 breakpoint work for any task. */
1258
1259void
1260breakpoint_set_task (struct breakpoint *b, int task)
1261{
1262 int old_task = b->task;
1263
1264 b->task = task;
1265 if (old_task != task)
8d3788bd 1266 observer_notify_breakpoint_modified (b);
45a43567
TT
1267}
1268
95a42b64
TT
1269void
1270check_tracepoint_command (char *line, void *closure)
a7bdde9e
VP
1271{
1272 struct breakpoint *b = closure;
cc59ec59 1273
a7bdde9e
VP
1274 validate_actionline (&line, b);
1275}
1276
95a42b64
TT
1277/* A structure used to pass information through
1278 map_breakpoint_numbers. */
1279
1280struct commands_info
1281{
1282 /* True if the command was typed at a tty. */
1283 int from_tty;
86b17b60
PA
1284
1285 /* The breakpoint range spec. */
1286 char *arg;
1287
95a42b64
TT
1288 /* Non-NULL if the body of the commands are being read from this
1289 already-parsed command. */
1290 struct command_line *control;
86b17b60 1291
95a42b64
TT
1292 /* The command lines read from the user, or NULL if they have not
1293 yet been read. */
1294 struct counted_command_line *cmd;
1295};
1296
1297/* A callback for map_breakpoint_numbers that sets the commands for
1298 commands_command. */
1299
c906108c 1300static void
95a42b64 1301do_map_commands_command (struct breakpoint *b, void *data)
c906108c 1302{
95a42b64 1303 struct commands_info *info = data;
c906108c 1304
95a42b64
TT
1305 if (info->cmd == NULL)
1306 {
1307 struct command_line *l;
5c44784c 1308
95a42b64
TT
1309 if (info->control != NULL)
1310 l = copy_command_lines (info->control->body_list[0]);
1311 else
86b17b60
PA
1312 {
1313 struct cleanup *old_chain;
1314 char *str;
c5aa993b 1315
3e43a32a
MS
1316 str = xstrprintf (_("Type commands for breakpoint(s) "
1317 "%s, one per line."),
86b17b60
PA
1318 info->arg);
1319
1320 old_chain = make_cleanup (xfree, str);
1321
1322 l = read_command_lines (str,
1323 info->from_tty, 1,
d77f58be 1324 (is_tracepoint (b)
86b17b60
PA
1325 ? check_tracepoint_command : 0),
1326 b);
1327
1328 do_cleanups (old_chain);
1329 }
a7bdde9e 1330
95a42b64
TT
1331 info->cmd = alloc_counted_command_line (l);
1332 }
1333
1334 /* If a breakpoint was on the list more than once, we don't need to
1335 do anything. */
1336 if (b->commands != info->cmd)
1337 {
1338 validate_commands_for_breakpoint (b, info->cmd->commands);
1339 incref_counted_command_line (info->cmd);
1340 decref_counted_command_line (&b->commands);
1341 b->commands = info->cmd;
ef37bb07 1342 annotate_breakpoints_changed ();
8d3788bd 1343 observer_notify_breakpoint_modified (b);
c5aa993b 1344 }
95a42b64
TT
1345}
1346
1347static void
4a64f543
MS
1348commands_command_1 (char *arg, int from_tty,
1349 struct command_line *control)
95a42b64
TT
1350{
1351 struct cleanup *cleanups;
1352 struct commands_info info;
1353
1354 info.from_tty = from_tty;
1355 info.control = control;
1356 info.cmd = NULL;
1357 /* If we read command lines from the user, then `info' will hold an
1358 extra reference to the commands that we must clean up. */
1359 cleanups = make_cleanup_decref_counted_command_line (&info.cmd);
1360
1361 if (arg == NULL || !*arg)
1362 {
86b17b60 1363 if (breakpoint_count - prev_breakpoint_count > 1)
4a64f543
MS
1364 arg = xstrprintf ("%d-%d", prev_breakpoint_count + 1,
1365 breakpoint_count);
95a42b64
TT
1366 else if (breakpoint_count > 0)
1367 arg = xstrprintf ("%d", breakpoint_count);
86b17b60
PA
1368 else
1369 {
1370 /* So that we don't try to free the incoming non-NULL
1371 argument in the cleanup below. Mapping breakpoint
1372 numbers will fail in this case. */
1373 arg = NULL;
1374 }
95a42b64 1375 }
9766ced4
SS
1376 else
1377 /* The command loop has some static state, so we need to preserve
1378 our argument. */
1379 arg = xstrdup (arg);
86b17b60
PA
1380
1381 if (arg != NULL)
1382 make_cleanup (xfree, arg);
1383
1384 info.arg = arg;
95a42b64
TT
1385
1386 map_breakpoint_numbers (arg, do_map_commands_command, &info);
1387
1388 if (info.cmd == NULL)
1389 error (_("No breakpoints specified."));
1390
1391 do_cleanups (cleanups);
1392}
1393
1394static void
1395commands_command (char *arg, int from_tty)
1396{
1397 commands_command_1 (arg, from_tty, NULL);
c906108c 1398}
40c03ae8
EZ
1399
1400/* Like commands_command, but instead of reading the commands from
1401 input stream, takes them from an already parsed command structure.
1402
1403 This is used by cli-script.c to DTRT with breakpoint commands
1404 that are part of if and while bodies. */
1405enum command_control_type
1406commands_from_control_command (char *arg, struct command_line *cmd)
1407{
95a42b64
TT
1408 commands_command_1 (arg, 0, cmd);
1409 return simple_control;
40c03ae8 1410}
876fa593
JK
1411
1412/* Return non-zero if BL->TARGET_INFO contains valid information. */
1413
1414static int
1415bp_location_has_shadow (struct bp_location *bl)
1416{
1417 if (bl->loc_type != bp_loc_software_breakpoint)
1418 return 0;
1419 if (!bl->inserted)
1420 return 0;
1421 if (bl->target_info.shadow_len == 0)
e5dd4106 1422 /* BL isn't valid, or doesn't shadow memory. */
876fa593
JK
1423 return 0;
1424 return 1;
1425}
1426
8defab1a 1427/* Update BUF, which is LEN bytes read from the target address MEMADDR,
876fa593
JK
1428 by replacing any memory breakpoints with their shadowed contents.
1429
35c63cd8
JB
1430 If READBUF is not NULL, this buffer must not overlap with any of
1431 the breakpoint location's shadow_contents buffers. Otherwise,
1432 a failed assertion internal error will be raised.
1433
876fa593 1434 The range of shadowed area by each bp_location is:
35df4500
TJB
1435 bl->address - bp_location_placed_address_before_address_max
1436 up to bl->address + bp_location_shadow_len_after_address_max
876fa593
JK
1437 The range we were requested to resolve shadows for is:
1438 memaddr ... memaddr + len
1439 Thus the safe cutoff boundaries for performance optimization are
35df4500
TJB
1440 memaddr + len <= (bl->address
1441 - bp_location_placed_address_before_address_max)
876fa593 1442 and:
35df4500 1443 bl->address + bp_location_shadow_len_after_address_max <= memaddr */
c906108c 1444
8defab1a 1445void
f0ba3972
PA
1446breakpoint_xfer_memory (gdb_byte *readbuf, gdb_byte *writebuf,
1447 const gdb_byte *writebuf_org,
1448 ULONGEST memaddr, LONGEST len)
c906108c 1449{
4a64f543
MS
1450 /* Left boundary, right boundary and median element of our binary
1451 search. */
876fa593
JK
1452 unsigned bc_l, bc_r, bc;
1453
4a64f543
MS
1454 /* Find BC_L which is a leftmost element which may affect BUF
1455 content. It is safe to report lower value but a failure to
1456 report higher one. */
876fa593
JK
1457
1458 bc_l = 0;
1459 bc_r = bp_location_count;
1460 while (bc_l + 1 < bc_r)
1461 {
35df4500 1462 struct bp_location *bl;
876fa593
JK
1463
1464 bc = (bc_l + bc_r) / 2;
35df4500 1465 bl = bp_location[bc];
876fa593 1466
4a64f543
MS
1467 /* Check first BL->ADDRESS will not overflow due to the added
1468 constant. Then advance the left boundary only if we are sure
1469 the BC element can in no way affect the BUF content (MEMADDR
1470 to MEMADDR + LEN range).
876fa593 1471
4a64f543
MS
1472 Use the BP_LOCATION_SHADOW_LEN_AFTER_ADDRESS_MAX safety
1473 offset so that we cannot miss a breakpoint with its shadow
1474 range tail still reaching MEMADDR. */
c5aa993b 1475
35df4500
TJB
1476 if ((bl->address + bp_location_shadow_len_after_address_max
1477 >= bl->address)
1478 && (bl->address + bp_location_shadow_len_after_address_max
1479 <= memaddr))
876fa593
JK
1480 bc_l = bc;
1481 else
1482 bc_r = bc;
1483 }
1484
128070bb
PA
1485 /* Due to the binary search above, we need to make sure we pick the
1486 first location that's at BC_L's address. E.g., if there are
1487 multiple locations at the same address, BC_L may end up pointing
1488 at a duplicate location, and miss the "master"/"inserted"
1489 location. Say, given locations L1, L2 and L3 at addresses A and
1490 B:
1491
1492 L1@A, L2@A, L3@B, ...
1493
1494 BC_L could end up pointing at location L2, while the "master"
1495 location could be L1. Since the `loc->inserted' flag is only set
1496 on "master" locations, we'd forget to restore the shadow of L1
1497 and L2. */
1498 while (bc_l > 0
1499 && bp_location[bc_l]->address == bp_location[bc_l - 1]->address)
1500 bc_l--;
1501
876fa593
JK
1502 /* Now do full processing of the found relevant range of elements. */
1503
1504 for (bc = bc_l; bc < bp_location_count; bc++)
c5aa993b 1505 {
35df4500 1506 struct bp_location *bl = bp_location[bc];
876fa593
JK
1507 CORE_ADDR bp_addr = 0;
1508 int bp_size = 0;
1509 int bptoffset = 0;
1510
35df4500
TJB
1511 /* bp_location array has BL->OWNER always non-NULL. */
1512 if (bl->owner->type == bp_none)
8a3fe4f8 1513 warning (_("reading through apparently deleted breakpoint #%d?"),
35df4500 1514 bl->owner->number);
ffce0d52 1515
e5dd4106 1516 /* Performance optimization: any further element can no longer affect BUF
876fa593
JK
1517 content. */
1518
35df4500
TJB
1519 if (bl->address >= bp_location_placed_address_before_address_max
1520 && memaddr + len <= (bl->address
1521 - bp_location_placed_address_before_address_max))
876fa593
JK
1522 break;
1523
35df4500 1524 if (!bp_location_has_shadow (bl))
c5aa993b 1525 continue;
35df4500 1526 if (!breakpoint_address_match (bl->target_info.placed_address_space, 0,
6c95b8df
PA
1527 current_program_space->aspace, 0))
1528 continue;
1529
c5aa993b
JM
1530 /* Addresses and length of the part of the breakpoint that
1531 we need to copy. */
35df4500
TJB
1532 bp_addr = bl->target_info.placed_address;
1533 bp_size = bl->target_info.shadow_len;
8defab1a 1534
c5aa993b
JM
1535 if (bp_addr + bp_size <= memaddr)
1536 /* The breakpoint is entirely before the chunk of memory we
1537 are reading. */
1538 continue;
8defab1a 1539
c5aa993b
JM
1540 if (bp_addr >= memaddr + len)
1541 /* The breakpoint is entirely after the chunk of memory we are
4a64f543 1542 reading. */
c5aa993b 1543 continue;
c5aa993b 1544
8defab1a
DJ
1545 /* Offset within shadow_contents. */
1546 if (bp_addr < memaddr)
1547 {
1548 /* Only copy the second part of the breakpoint. */
1549 bp_size -= memaddr - bp_addr;
1550 bptoffset = memaddr - bp_addr;
1551 bp_addr = memaddr;
1552 }
c5aa993b 1553
8defab1a
DJ
1554 if (bp_addr + bp_size > memaddr + len)
1555 {
1556 /* Only copy the first part of the breakpoint. */
1557 bp_size -= (bp_addr + bp_size) - (memaddr + len);
1558 }
c5aa993b 1559
f0ba3972
PA
1560 if (readbuf != NULL)
1561 {
35c63cd8
JB
1562 /* Verify that the readbuf buffer does not overlap with
1563 the shadow_contents buffer. */
1564 gdb_assert (bl->target_info.shadow_contents >= readbuf + len
1565 || readbuf >= (bl->target_info.shadow_contents
1566 + bl->target_info.shadow_len));
1567
f0ba3972
PA
1568 /* Update the read buffer with this inserted breakpoint's
1569 shadow. */
1570 memcpy (readbuf + bp_addr - memaddr,
1571 bl->target_info.shadow_contents + bptoffset, bp_size);
1572 }
1573 else
1574 {
1575 struct gdbarch *gdbarch = bl->gdbarch;
1576 const unsigned char *bp;
1577 CORE_ADDR placed_address = bl->target_info.placed_address;
1578 unsigned placed_size = bl->target_info.placed_size;
1579
1580 /* Update the shadow with what we want to write to memory. */
1581 memcpy (bl->target_info.shadow_contents + bptoffset,
1582 writebuf_org + bp_addr - memaddr, bp_size);
1583
1584 /* Determine appropriate breakpoint contents and size for this
1585 address. */
1586 bp = gdbarch_breakpoint_from_pc (gdbarch, &placed_address, &placed_size);
1587
1588 /* Update the final write buffer with this inserted
1589 breakpoint's INSN. */
1590 memcpy (writebuf + bp_addr - memaddr, bp + bptoffset, bp_size);
1591 }
c5aa993b 1592 }
c906108c 1593}
c906108c 1594\f
c5aa993b 1595
b775012e
LM
1596/* Return true if BPT is either a software breakpoint or a hardware
1597 breakpoint. */
1598
1599int
1600is_breakpoint (const struct breakpoint *bpt)
1601{
1602 return (bpt->type == bp_breakpoint
e7e0cddf
SS
1603 || bpt->type == bp_hardware_breakpoint
1604 || bpt->type == bp_dprintf);
b775012e
LM
1605}
1606
60e1c644
PA
1607/* Return true if BPT is of any hardware watchpoint kind. */
1608
a5606eee 1609static int
d77f58be 1610is_hardware_watchpoint (const struct breakpoint *bpt)
a5606eee
VP
1611{
1612 return (bpt->type == bp_hardware_watchpoint
1613 || bpt->type == bp_read_watchpoint
1614 || bpt->type == bp_access_watchpoint);
1615}
7270d8f2 1616
60e1c644
PA
1617/* Return true if BPT is of any watchpoint kind, hardware or
1618 software. */
1619
3a5c3e22 1620int
d77f58be 1621is_watchpoint (const struct breakpoint *bpt)
60e1c644
PA
1622{
1623 return (is_hardware_watchpoint (bpt)
1624 || bpt->type == bp_watchpoint);
1625}
1626
3a5c3e22
PA
1627/* Returns true if the current thread and its running state are safe
1628 to evaluate or update watchpoint B. Watchpoints on local
1629 expressions need to be evaluated in the context of the thread that
1630 was current when the watchpoint was created, and, that thread needs
1631 to be stopped to be able to select the correct frame context.
1632 Watchpoints on global expressions can be evaluated on any thread,
1633 and in any state. It is presently left to the target allowing
1634 memory accesses when threads are running. */
f6bc2008
PA
1635
1636static int
3a5c3e22 1637watchpoint_in_thread_scope (struct watchpoint *b)
f6bc2008 1638{
d0d8b0c6
JK
1639 return (b->base.pspace == current_program_space
1640 && (ptid_equal (b->watchpoint_thread, null_ptid)
1641 || (ptid_equal (inferior_ptid, b->watchpoint_thread)
1642 && !is_executing (inferior_ptid))));
f6bc2008
PA
1643}
1644
d0fb5eae
JK
1645/* Set watchpoint B to disp_del_at_next_stop, even including its possible
1646 associated bp_watchpoint_scope breakpoint. */
1647
1648static void
3a5c3e22 1649watchpoint_del_at_next_stop (struct watchpoint *w)
d0fb5eae 1650{
3a5c3e22 1651 struct breakpoint *b = &w->base;
d0fb5eae
JK
1652
1653 if (b->related_breakpoint != b)
1654 {
1655 gdb_assert (b->related_breakpoint->type == bp_watchpoint_scope);
1656 gdb_assert (b->related_breakpoint->related_breakpoint == b);
1657 b->related_breakpoint->disposition = disp_del_at_next_stop;
1658 b->related_breakpoint->related_breakpoint = b->related_breakpoint;
1659 b->related_breakpoint = b;
1660 }
1661 b->disposition = disp_del_at_next_stop;
1662}
1663
567e1b4e
JB
1664/* Assuming that B is a watchpoint:
1665 - Reparse watchpoint expression, if REPARSE is non-zero
a5606eee 1666 - Evaluate expression and store the result in B->val
567e1b4e
JB
1667 - Evaluate the condition if there is one, and store the result
1668 in b->loc->cond.
a5606eee
VP
1669 - Update the list of values that must be watched in B->loc.
1670
4a64f543
MS
1671 If the watchpoint disposition is disp_del_at_next_stop, then do
1672 nothing. If this is local watchpoint that is out of scope, delete
1673 it.
1674
1675 Even with `set breakpoint always-inserted on' the watchpoints are
1676 removed + inserted on each stop here. Normal breakpoints must
1677 never be removed because they might be missed by a running thread
1678 when debugging in non-stop mode. On the other hand, hardware
1679 watchpoints (is_hardware_watchpoint; processed here) are specific
1680 to each LWP since they are stored in each LWP's hardware debug
1681 registers. Therefore, such LWP must be stopped first in order to
1682 be able to modify its hardware watchpoints.
1683
1684 Hardware watchpoints must be reset exactly once after being
1685 presented to the user. It cannot be done sooner, because it would
1686 reset the data used to present the watchpoint hit to the user. And
1687 it must not be done later because it could display the same single
1688 watchpoint hit during multiple GDB stops. Note that the latter is
1689 relevant only to the hardware watchpoint types bp_read_watchpoint
1690 and bp_access_watchpoint. False hit by bp_hardware_watchpoint is
1691 not user-visible - its hit is suppressed if the memory content has
1692 not changed.
1693
1694 The following constraints influence the location where we can reset
1695 hardware watchpoints:
1696
1697 * target_stopped_by_watchpoint and target_stopped_data_address are
1698 called several times when GDB stops.
1699
1700 [linux]
1701 * Multiple hardware watchpoints can be hit at the same time,
1702 causing GDB to stop. GDB only presents one hardware watchpoint
1703 hit at a time as the reason for stopping, and all the other hits
1704 are presented later, one after the other, each time the user
1705 requests the execution to be resumed. Execution is not resumed
1706 for the threads still having pending hit event stored in
1707 LWP_INFO->STATUS. While the watchpoint is already removed from
1708 the inferior on the first stop the thread hit event is kept being
1709 reported from its cached value by linux_nat_stopped_data_address
1710 until the real thread resume happens after the watchpoint gets
1711 presented and thus its LWP_INFO->STATUS gets reset.
1712
1713 Therefore the hardware watchpoint hit can get safely reset on the
1714 watchpoint removal from inferior. */
a79d3c27 1715
b40ce68a 1716static void
3a5c3e22 1717update_watchpoint (struct watchpoint *b, int reparse)
7270d8f2 1718{
a5606eee 1719 int within_current_scope;
a5606eee 1720 struct frame_id saved_frame_id;
66076460 1721 int frame_saved;
a5606eee 1722
f6bc2008
PA
1723 /* If this is a local watchpoint, we only want to check if the
1724 watchpoint frame is in scope if the current thread is the thread
1725 that was used to create the watchpoint. */
1726 if (!watchpoint_in_thread_scope (b))
1727 return;
1728
3a5c3e22 1729 if (b->base.disposition == disp_del_at_next_stop)
a5606eee
VP
1730 return;
1731
66076460 1732 frame_saved = 0;
a5606eee
VP
1733
1734 /* Determine if the watchpoint is within scope. */
1735 if (b->exp_valid_block == NULL)
1736 within_current_scope = 1;
1737 else
1738 {
b5db5dfc
UW
1739 struct frame_info *fi = get_current_frame ();
1740 struct gdbarch *frame_arch = get_frame_arch (fi);
1741 CORE_ADDR frame_pc = get_frame_pc (fi);
1742
1743 /* If we're in a function epilogue, unwinding may not work
1744 properly, so do not attempt to recreate locations at this
1745 point. See similar comments in watchpoint_check. */
1746 if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc))
1747 return;
66076460
DJ
1748
1749 /* Save the current frame's ID so we can restore it after
1750 evaluating the watchpoint expression on its own frame. */
1751 /* FIXME drow/2003-09-09: It would be nice if evaluate_expression
1752 took a frame parameter, so that we didn't have to change the
1753 selected frame. */
1754 frame_saved = 1;
1755 saved_frame_id = get_frame_id (get_selected_frame (NULL));
1756
a5606eee
VP
1757 fi = frame_find_by_id (b->watchpoint_frame);
1758 within_current_scope = (fi != NULL);
1759 if (within_current_scope)
1760 select_frame (fi);
1761 }
1762
b5db5dfc
UW
1763 /* We don't free locations. They are stored in the bp_location array
1764 and update_global_location_list will eventually delete them and
1765 remove breakpoints if needed. */
3a5c3e22 1766 b->base.loc = NULL;
b5db5dfc 1767
a5606eee
VP
1768 if (within_current_scope && reparse)
1769 {
1770 char *s;
d63d0675 1771
a5606eee
VP
1772 if (b->exp)
1773 {
1774 xfree (b->exp);
1775 b->exp = NULL;
1776 }
d63d0675 1777 s = b->exp_string_reparse ? b->exp_string_reparse : b->exp_string;
1bb9788d 1778 b->exp = parse_exp_1 (&s, 0, b->exp_valid_block, 0);
a5606eee
VP
1779 /* If the meaning of expression itself changed, the old value is
1780 no longer relevant. We don't want to report a watchpoint hit
1781 to the user when the old value and the new value may actually
1782 be completely different objects. */
1783 value_free (b->val);
fa4727a6
DJ
1784 b->val = NULL;
1785 b->val_valid = 0;
60e1c644
PA
1786
1787 /* Note that unlike with breakpoints, the watchpoint's condition
1788 expression is stored in the breakpoint object, not in the
1789 locations (re)created below. */
3a5c3e22 1790 if (b->base.cond_string != NULL)
60e1c644
PA
1791 {
1792 if (b->cond_exp != NULL)
1793 {
1794 xfree (b->cond_exp);
1795 b->cond_exp = NULL;
1796 }
1797
3a5c3e22 1798 s = b->base.cond_string;
1bb9788d 1799 b->cond_exp = parse_exp_1 (&s, 0, b->cond_exp_valid_block, 0);
60e1c644 1800 }
a5606eee 1801 }
a5606eee
VP
1802
1803 /* If we failed to parse the expression, for example because
1804 it refers to a global variable in a not-yet-loaded shared library,
1805 don't try to insert watchpoint. We don't automatically delete
1806 such watchpoint, though, since failure to parse expression
1807 is different from out-of-scope watchpoint. */
2d134ed3
PA
1808 if ( !target_has_execution)
1809 {
1810 /* Without execution, memory can't change. No use to try and
1811 set watchpoint locations. The watchpoint will be reset when
1812 the target gains execution, through breakpoint_re_set. */
1813 }
1814 else if (within_current_scope && b->exp)
a5606eee 1815 {
0cf6dd15 1816 int pc = 0;
fa4727a6 1817 struct value *val_chain, *v, *result, *next;
2d134ed3 1818 struct program_space *frame_pspace;
a5606eee 1819
0cf6dd15 1820 fetch_subexp_value (b->exp, &pc, &v, &result, &val_chain);
a5606eee 1821
a5606eee
VP
1822 /* Avoid setting b->val if it's already set. The meaning of
1823 b->val is 'the last value' user saw, and we should update
1824 it only if we reported that last value to user. As it
9c06b0b4
TJB
1825 happens, the code that reports it updates b->val directly.
1826 We don't keep track of the memory value for masked
1827 watchpoints. */
3a5c3e22 1828 if (!b->val_valid && !is_masked_watchpoint (&b->base))
fa4727a6
DJ
1829 {
1830 b->val = v;
1831 b->val_valid = 1;
1832 }
a5606eee 1833
2d134ed3
PA
1834 frame_pspace = get_frame_program_space (get_selected_frame (NULL));
1835
a5606eee 1836 /* Look at each value on the value chain. */
9fa40276 1837 for (v = val_chain; v; v = value_next (v))
a5606eee
VP
1838 {
1839 /* If it's a memory location, and GDB actually needed
1840 its contents to evaluate the expression, then we
fa4727a6
DJ
1841 must watch it. If the first value returned is
1842 still lazy, that means an error occurred reading it;
1843 watch it anyway in case it becomes readable. */
a5606eee 1844 if (VALUE_LVAL (v) == lval_memory
fa4727a6 1845 && (v == val_chain || ! value_lazy (v)))
a5606eee
VP
1846 {
1847 struct type *vtype = check_typedef (value_type (v));
7270d8f2 1848
a5606eee
VP
1849 /* We only watch structs and arrays if user asked
1850 for it explicitly, never if they just happen to
1851 appear in the middle of some value chain. */
fa4727a6 1852 if (v == result
a5606eee
VP
1853 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
1854 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
1855 {
1856 CORE_ADDR addr;
744a8059 1857 int type;
a5606eee
VP
1858 struct bp_location *loc, **tmp;
1859
42ae5230 1860 addr = value_address (v);
a5606eee 1861 type = hw_write;
3a5c3e22 1862 if (b->base.type == bp_read_watchpoint)
a5606eee 1863 type = hw_read;
3a5c3e22 1864 else if (b->base.type == bp_access_watchpoint)
a5606eee 1865 type = hw_access;
3a5c3e22
PA
1866
1867 loc = allocate_bp_location (&b->base);
1868 for (tmp = &(b->base.loc); *tmp != NULL; tmp = &((*tmp)->next))
a5606eee
VP
1869 ;
1870 *tmp = loc;
a6d9a66e 1871 loc->gdbarch = get_type_arch (value_type (v));
6c95b8df
PA
1872
1873 loc->pspace = frame_pspace;
a5606eee 1874 loc->address = addr;
744a8059 1875 loc->length = TYPE_LENGTH (value_type (v));
a5606eee
VP
1876 loc->watchpoint_type = type;
1877 }
1878 }
9fa40276
TJB
1879 }
1880
1881 /* Change the type of breakpoint between hardware assisted or
1882 an ordinary watchpoint depending on the hardware support
1883 and free hardware slots. REPARSE is set when the inferior
1884 is started. */
a9634178 1885 if (reparse)
9fa40276 1886 {
e09342b5 1887 int reg_cnt;
9fa40276
TJB
1888 enum bp_loc_type loc_type;
1889 struct bp_location *bl;
a5606eee 1890
a9634178 1891 reg_cnt = can_use_hardware_watchpoint (val_chain);
e09342b5
TJB
1892
1893 if (reg_cnt)
9fa40276
TJB
1894 {
1895 int i, target_resources_ok, other_type_used;
a1398e0c 1896 enum bptype type;
9fa40276 1897
a9634178
TJB
1898 /* Use an exact watchpoint when there's only one memory region to be
1899 watched, and only one debug register is needed to watch it. */
1900 b->exact = target_exact_watchpoints && reg_cnt == 1;
1901
9fa40276 1902 /* We need to determine how many resources are already
e09342b5
TJB
1903 used for all other hardware watchpoints plus this one
1904 to see if we still have enough resources to also fit
a1398e0c
PA
1905 this watchpoint in as well. */
1906
1907 /* If this is a software watchpoint, we try to turn it
1908 to a hardware one -- count resources as if B was of
1909 hardware watchpoint type. */
1910 type = b->base.type;
1911 if (type == bp_watchpoint)
1912 type = bp_hardware_watchpoint;
1913
1914 /* This watchpoint may or may not have been placed on
1915 the list yet at this point (it won't be in the list
1916 if we're trying to create it for the first time,
1917 through watch_command), so always account for it
1918 manually. */
1919
1920 /* Count resources used by all watchpoints except B. */
1921 i = hw_watchpoint_used_count_others (&b->base, type, &other_type_used);
1922
1923 /* Add in the resources needed for B. */
1924 i += hw_watchpoint_use_count (&b->base);
1925
1926 target_resources_ok
1927 = target_can_use_hardware_watchpoint (type, i, other_type_used);
e09342b5 1928 if (target_resources_ok <= 0)
a9634178 1929 {
3a5c3e22 1930 int sw_mode = b->base.ops->works_in_software_mode (&b->base);
9c06b0b4
TJB
1931
1932 if (target_resources_ok == 0 && !sw_mode)
a9634178
TJB
1933 error (_("Target does not support this type of "
1934 "hardware watchpoint."));
9c06b0b4
TJB
1935 else if (target_resources_ok < 0 && !sw_mode)
1936 error (_("There are not enough available hardware "
1937 "resources for this watchpoint."));
a1398e0c
PA
1938
1939 /* Downgrade to software watchpoint. */
1940 b->base.type = bp_watchpoint;
1941 }
1942 else
1943 {
1944 /* If this was a software watchpoint, we've just
1945 found we have enough resources to turn it to a
1946 hardware watchpoint. Otherwise, this is a
1947 nop. */
1948 b->base.type = type;
a9634178 1949 }
9fa40276 1950 }
3a5c3e22 1951 else if (!b->base.ops->works_in_software_mode (&b->base))
a9634178
TJB
1952 error (_("Expression cannot be implemented with "
1953 "read/access watchpoint."));
9fa40276 1954 else
3a5c3e22 1955 b->base.type = bp_watchpoint;
9fa40276 1956
3a5c3e22 1957 loc_type = (b->base.type == bp_watchpoint? bp_loc_other
9fa40276 1958 : bp_loc_hardware_watchpoint);
3a5c3e22 1959 for (bl = b->base.loc; bl; bl = bl->next)
9fa40276
TJB
1960 bl->loc_type = loc_type;
1961 }
1962
1963 for (v = val_chain; v; v = next)
1964 {
a5606eee
VP
1965 next = value_next (v);
1966 if (v != b->val)
1967 value_free (v);
1968 }
1969
c7437ca6
PA
1970 /* If a software watchpoint is not watching any memory, then the
1971 above left it without any location set up. But,
1972 bpstat_stop_status requires a location to be able to report
1973 stops, so make sure there's at least a dummy one. */
3a5c3e22 1974 if (b->base.type == bp_watchpoint && b->base.loc == NULL)
c7437ca6 1975 {
3a5c3e22
PA
1976 struct breakpoint *base = &b->base;
1977 base->loc = allocate_bp_location (base);
1978 base->loc->pspace = frame_pspace;
1979 base->loc->address = -1;
1980 base->loc->length = -1;
1981 base->loc->watchpoint_type = -1;
c7437ca6 1982 }
a5606eee
VP
1983 }
1984 else if (!within_current_scope)
7270d8f2 1985 {
ac74f770
MS
1986 printf_filtered (_("\
1987Watchpoint %d deleted because the program has left the block\n\
1988in which its expression is valid.\n"),
3a5c3e22 1989 b->base.number);
d0fb5eae 1990 watchpoint_del_at_next_stop (b);
7270d8f2 1991 }
a5606eee
VP
1992
1993 /* Restore the selected frame. */
66076460
DJ
1994 if (frame_saved)
1995 select_frame (frame_find_by_id (saved_frame_id));
7270d8f2
OF
1996}
1997
a5606eee 1998
74960c60 1999/* Returns 1 iff breakpoint location should be
1e4d1764
YQ
2000 inserted in the inferior. We don't differentiate the type of BL's owner
2001 (breakpoint vs. tracepoint), although insert_location in tracepoint's
2002 breakpoint_ops is not defined, because in insert_bp_location,
2003 tracepoint's insert_location will not be called. */
74960c60 2004static int
35df4500 2005should_be_inserted (struct bp_location *bl)
74960c60 2006{
35df4500 2007 if (bl->owner == NULL || !breakpoint_enabled (bl->owner))
74960c60
VP
2008 return 0;
2009
35df4500 2010 if (bl->owner->disposition == disp_del_at_next_stop)
74960c60
VP
2011 return 0;
2012
35df4500 2013 if (!bl->enabled || bl->shlib_disabled || bl->duplicate)
74960c60
VP
2014 return 0;
2015
f8eba3c6
TT
2016 if (user_breakpoint_p (bl->owner) && bl->pspace->executing_startup)
2017 return 0;
2018
56710373
PA
2019 /* This is set for example, when we're attached to the parent of a
2020 vfork, and have detached from the child. The child is running
2021 free, and we expect it to do an exec or exit, at which point the
2022 OS makes the parent schedulable again (and the target reports
2023 that the vfork is done). Until the child is done with the shared
2024 memory region, do not insert breakpoints in the parent, otherwise
2025 the child could still trip on the parent's breakpoints. Since
2026 the parent is blocked anyway, it won't miss any breakpoint. */
35df4500 2027 if (bl->pspace->breakpoints_not_allowed)
56710373
PA
2028 return 0;
2029
74960c60
VP
2030 return 1;
2031}
2032
934709f0
PW
2033/* Same as should_be_inserted but does the check assuming
2034 that the location is not duplicated. */
2035
2036static int
2037unduplicated_should_be_inserted (struct bp_location *bl)
2038{
2039 int result;
2040 const int save_duplicate = bl->duplicate;
2041
2042 bl->duplicate = 0;
2043 result = should_be_inserted (bl);
2044 bl->duplicate = save_duplicate;
2045 return result;
2046}
2047
b775012e
LM
2048/* Parses a conditional described by an expression COND into an
2049 agent expression bytecode suitable for evaluation
2050 by the bytecode interpreter. Return NULL if there was
2051 any error during parsing. */
2052
2053static struct agent_expr *
2054parse_cond_to_aexpr (CORE_ADDR scope, struct expression *cond)
2055{
2056 struct agent_expr *aexpr = NULL;
2057 struct cleanup *old_chain = NULL;
2058 volatile struct gdb_exception ex;
2059
2060 if (!cond)
2061 return NULL;
2062
2063 /* We don't want to stop processing, so catch any errors
2064 that may show up. */
2065 TRY_CATCH (ex, RETURN_MASK_ERROR)
2066 {
2067 aexpr = gen_eval_for_expr (scope, cond);
2068 }
2069
2070 if (ex.reason < 0)
2071 {
2072 /* If we got here, it means the condition could not be parsed to a valid
2073 bytecode expression and thus can't be evaluated on the target's side.
2074 It's no use iterating through the conditions. */
2075 return NULL;
2076 }
2077
2078 /* We have a valid agent expression. */
2079 return aexpr;
2080}
2081
2082/* Based on location BL, create a list of breakpoint conditions to be
2083 passed on to the target. If we have duplicated locations with different
2084 conditions, we will add such conditions to the list. The idea is that the
2085 target will evaluate the list of conditions and will only notify GDB when
2086 one of them is true. */
2087
2088static void
2089build_target_condition_list (struct bp_location *bl)
2090{
2091 struct bp_location **locp = NULL, **loc2p;
2092 int null_condition_or_parse_error = 0;
2093 int modified = bl->needs_update;
2094 struct bp_location *loc;
2095
2096 /* This is only meaningful if the target is
2097 evaluating conditions and if the user has
2098 opted for condition evaluation on the target's
2099 side. */
2100 if (gdb_evaluates_breakpoint_condition_p ()
2101 || !target_supports_evaluation_of_breakpoint_conditions ())
2102 return;
2103
2104 /* Do a first pass to check for locations with no assigned
2105 conditions or conditions that fail to parse to a valid agent expression
2106 bytecode. If any of these happen, then it's no use to send conditions
2107 to the target since this location will always trigger and generate a
2108 response back to GDB. */
2109 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2110 {
2111 loc = (*loc2p);
2112 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2113 {
2114 if (modified)
2115 {
2116 struct agent_expr *aexpr;
2117
2118 /* Re-parse the conditions since something changed. In that
2119 case we already freed the condition bytecodes (see
2120 force_breakpoint_reinsertion). We just
2121 need to parse the condition to bytecodes again. */
2122 aexpr = parse_cond_to_aexpr (bl->address, loc->cond);
2123 loc->cond_bytecode = aexpr;
2124
2125 /* Check if we managed to parse the conditional expression
2126 correctly. If not, we will not send this condition
2127 to the target. */
2128 if (aexpr)
2129 continue;
2130 }
2131
2132 /* If we have a NULL bytecode expression, it means something
2133 went wrong or we have a null condition expression. */
2134 if (!loc->cond_bytecode)
2135 {
2136 null_condition_or_parse_error = 1;
2137 break;
2138 }
2139 }
2140 }
2141
2142 /* If any of these happened, it means we will have to evaluate the conditions
2143 for the location's address on gdb's side. It is no use keeping bytecodes
2144 for all the other duplicate locations, thus we free all of them here.
2145
2146 This is so we have a finer control over which locations' conditions are
2147 being evaluated by GDB or the remote stub. */
2148 if (null_condition_or_parse_error)
2149 {
2150 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2151 {
2152 loc = (*loc2p);
2153 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2154 {
2155 /* Only go as far as the first NULL bytecode is
2156 located. */
2157 if (!loc->cond_bytecode)
2158 return;
2159
2160 free_agent_expr (loc->cond_bytecode);
2161 loc->cond_bytecode = NULL;
2162 }
2163 }
2164 }
2165
2166 /* No NULL conditions or failed bytecode generation. Build a condition list
2167 for this location's address. */
2168 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2169 {
2170 loc = (*loc2p);
2171 if (loc->cond
2172 && is_breakpoint (loc->owner)
2173 && loc->pspace->num == bl->pspace->num
2174 && loc->owner->enable_state == bp_enabled
2175 && loc->enabled)
2176 /* Add the condition to the vector. This will be used later to send the
2177 conditions to the target. */
2178 VEC_safe_push (agent_expr_p, bl->target_info.conditions,
2179 loc->cond_bytecode);
2180 }
2181
2182 return;
2183}
2184
d3ce09f5
SS
2185/* Parses a command described by string CMD into an agent expression
2186 bytecode suitable for evaluation by the bytecode interpreter.
2187 Return NULL if there was any error during parsing. */
2188
2189static struct agent_expr *
2190parse_cmd_to_aexpr (CORE_ADDR scope, char *cmd)
2191{
2192 struct cleanup *old_cleanups = 0;
2193 struct expression *expr, **argvec;
2194 struct agent_expr *aexpr = NULL;
2195 struct cleanup *old_chain = NULL;
2196 volatile struct gdb_exception ex;
2197 char *cmdrest;
2198 char *format_start, *format_end;
2199 struct format_piece *fpieces;
2200 int nargs;
2201 struct gdbarch *gdbarch = get_current_arch ();
2202
2203 if (!cmd)
2204 return NULL;
2205
2206 cmdrest = cmd;
2207
2208 if (*cmdrest == ',')
2209 ++cmdrest;
2210 cmdrest = skip_spaces (cmdrest);
2211
2212 if (*cmdrest++ != '"')
2213 error (_("No format string following the location"));
2214
2215 format_start = cmdrest;
2216
2217 fpieces = parse_format_string (&cmdrest);
2218
2219 old_cleanups = make_cleanup (free_format_pieces_cleanup, &fpieces);
2220
2221 format_end = cmdrest;
2222
2223 if (*cmdrest++ != '"')
2224 error (_("Bad format string, non-terminated '\"'."));
2225
2226 cmdrest = skip_spaces (cmdrest);
2227
2228 if (!(*cmdrest == ',' || *cmdrest == '\0'))
2229 error (_("Invalid argument syntax"));
2230
2231 if (*cmdrest == ',')
2232 cmdrest++;
2233 cmdrest = skip_spaces (cmdrest);
2234
2235 /* For each argument, make an expression. */
2236
2237 argvec = (struct expression **) alloca (strlen (cmd)
2238 * sizeof (struct expression *));
2239
2240 nargs = 0;
2241 while (*cmdrest != '\0')
2242 {
2243 char *cmd1;
2244
2245 cmd1 = cmdrest;
2246 expr = parse_exp_1 (&cmd1, scope, block_for_pc (scope), 1);
2247 argvec[nargs++] = expr;
2248 cmdrest = cmd1;
2249 if (*cmdrest == ',')
2250 ++cmdrest;
2251 }
2252
2253 /* We don't want to stop processing, so catch any errors
2254 that may show up. */
2255 TRY_CATCH (ex, RETURN_MASK_ERROR)
2256 {
2257 aexpr = gen_printf (scope, gdbarch, 0, 0,
2258 format_start, format_end - format_start,
2259 fpieces, nargs, argvec);
2260 }
2261
2262 if (ex.reason < 0)
2263 {
2264 /* If we got here, it means the command could not be parsed to a valid
2265 bytecode expression and thus can't be evaluated on the target's side.
2266 It's no use iterating through the other commands. */
2267 return NULL;
2268 }
2269
2270 do_cleanups (old_cleanups);
2271
2272 /* We have a valid agent expression, return it. */
2273 return aexpr;
2274}
2275
2276/* Based on location BL, create a list of breakpoint commands to be
2277 passed on to the target. If we have duplicated locations with
2278 different commands, we will add any such to the list. */
2279
2280static void
2281build_target_command_list (struct bp_location *bl)
2282{
2283 struct bp_location **locp = NULL, **loc2p;
2284 int null_command_or_parse_error = 0;
2285 int modified = bl->needs_update;
2286 struct bp_location *loc;
2287
2288 /* For now, limit to agent-style dprintf breakpoints. */
2289 if (bl->owner->type != bp_dprintf
2290 || strcmp (dprintf_style, dprintf_style_agent) != 0)
2291 return;
2292
2293 if (!target_can_run_breakpoint_commands ())
2294 return;
2295
2296 /* Do a first pass to check for locations with no assigned
2297 conditions or conditions that fail to parse to a valid agent expression
2298 bytecode. If any of these happen, then it's no use to send conditions
2299 to the target since this location will always trigger and generate a
2300 response back to GDB. */
2301 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2302 {
2303 loc = (*loc2p);
2304 if (is_breakpoint (loc->owner) && loc->pspace->num == bl->pspace->num)
2305 {
2306 if (modified)
2307 {
2308 struct agent_expr *aexpr;
2309
2310 /* Re-parse the commands since something changed. In that
2311 case we already freed the command bytecodes (see
2312 force_breakpoint_reinsertion). We just
2313 need to parse the command to bytecodes again. */
2314 aexpr = parse_cmd_to_aexpr (bl->address,
2315 loc->owner->extra_string);
2316 loc->cmd_bytecode = aexpr;
2317
2318 if (!aexpr)
2319 continue;
2320 }
2321
2322 /* If we have a NULL bytecode expression, it means something
2323 went wrong or we have a null command expression. */
2324 if (!loc->cmd_bytecode)
2325 {
2326 null_command_or_parse_error = 1;
2327 break;
2328 }
2329 }
2330 }
2331
2332 /* If anything failed, then we're not doing target-side commands,
2333 and so clean up. */
2334 if (null_command_or_parse_error)
2335 {
2336 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2337 {
2338 loc = (*loc2p);
2339 if (is_breakpoint (loc->owner)
2340 && loc->pspace->num == bl->pspace->num)
2341 {
2342 /* Only go as far as the first NULL bytecode is
2343 located. */
2344 if (!loc->cond_bytecode)
2345 return;
2346
2347 free_agent_expr (loc->cond_bytecode);
2348 loc->cond_bytecode = NULL;
2349 }
2350 }
2351 }
2352
2353 /* No NULL commands or failed bytecode generation. Build a command list
2354 for this location's address. */
2355 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, bl->address)
2356 {
2357 loc = (*loc2p);
2358 if (loc->owner->extra_string
2359 && is_breakpoint (loc->owner)
2360 && loc->pspace->num == bl->pspace->num
2361 && loc->owner->enable_state == bp_enabled
2362 && loc->enabled)
2363 /* Add the command to the vector. This will be used later
2364 to send the commands to the target. */
2365 VEC_safe_push (agent_expr_p, bl->target_info.tcommands,
2366 loc->cmd_bytecode);
2367 }
2368
2369 bl->target_info.persist = 0;
2370 /* Maybe flag this location as persistent. */
2371 if (bl->owner->type == bp_dprintf && disconnected_dprintf)
2372 bl->target_info.persist = 1;
2373}
2374
35df4500
TJB
2375/* Insert a low-level "breakpoint" of some type. BL is the breakpoint
2376 location. Any error messages are printed to TMP_ERROR_STREAM; and
3fbb6ffa 2377 DISABLED_BREAKS, and HW_BREAKPOINT_ERROR are used to report problems.
c30eee59
TJB
2378 Returns 0 for success, 1 if the bp_location type is not supported or
2379 -1 for failure.
879bfdc2 2380
4a64f543
MS
2381 NOTE drow/2003-09-09: This routine could be broken down to an
2382 object-style method for each breakpoint or catchpoint type. */
26bb91f3 2383static int
35df4500 2384insert_bp_location (struct bp_location *bl,
26bb91f3 2385 struct ui_file *tmp_error_stream,
3fbb6ffa 2386 int *disabled_breaks,
dd61ec5c
MW
2387 int *hw_breakpoint_error,
2388 int *hw_bp_error_explained_already)
879bfdc2
DJ
2389{
2390 int val = 0;
dd61ec5c
MW
2391 char *hw_bp_err_string = NULL;
2392 struct gdb_exception e;
879bfdc2 2393
b775012e 2394 if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
879bfdc2
DJ
2395 return 0;
2396
35c63cd8
JB
2397 /* Note we don't initialize bl->target_info, as that wipes out
2398 the breakpoint location's shadow_contents if the breakpoint
2399 is still inserted at that location. This in turn breaks
2400 target_read_memory which depends on these buffers when
2401 a memory read is requested at the breakpoint location:
2402 Once the target_info has been wiped, we fail to see that
2403 we have a breakpoint inserted at that address and thus
2404 read the breakpoint instead of returning the data saved in
2405 the breakpoint location's shadow contents. */
35df4500
TJB
2406 bl->target_info.placed_address = bl->address;
2407 bl->target_info.placed_address_space = bl->pspace->aspace;
f1310107 2408 bl->target_info.length = bl->length;
8181d85f 2409
b775012e
LM
2410 /* When working with target-side conditions, we must pass all the conditions
2411 for the same breakpoint address down to the target since GDB will not
2412 insert those locations. With a list of breakpoint conditions, the target
2413 can decide when to stop and notify GDB. */
2414
2415 if (is_breakpoint (bl->owner))
2416 {
2417 build_target_condition_list (bl);
d3ce09f5
SS
2418 build_target_command_list (bl);
2419 /* Reset the modification marker. */
b775012e
LM
2420 bl->needs_update = 0;
2421 }
2422
35df4500
TJB
2423 if (bl->loc_type == bp_loc_software_breakpoint
2424 || bl->loc_type == bp_loc_hardware_breakpoint)
879bfdc2 2425 {
35df4500 2426 if (bl->owner->type != bp_hardware_breakpoint)
765dc015
VP
2427 {
2428 /* If the explicitly specified breakpoint type
2429 is not hardware breakpoint, check the memory map to see
2430 if the breakpoint address is in read only memory or not.
4a64f543 2431
765dc015
VP
2432 Two important cases are:
2433 - location type is not hardware breakpoint, memory
2434 is readonly. We change the type of the location to
2435 hardware breakpoint.
4a64f543
MS
2436 - location type is hardware breakpoint, memory is
2437 read-write. This means we've previously made the
2438 location hardware one, but then the memory map changed,
2439 so we undo.
765dc015 2440
4a64f543
MS
2441 When breakpoints are removed, remove_breakpoints will use
2442 location types we've just set here, the only possible
2443 problem is that memory map has changed during running
2444 program, but it's not going to work anyway with current
2445 gdb. */
765dc015 2446 struct mem_region *mr
35df4500 2447 = lookup_mem_region (bl->target_info.placed_address);
765dc015
VP
2448
2449 if (mr)
2450 {
2451 if (automatic_hardware_breakpoints)
2452 {
765dc015
VP
2453 enum bp_loc_type new_type;
2454
2455 if (mr->attrib.mode != MEM_RW)
2456 new_type = bp_loc_hardware_breakpoint;
2457 else
2458 new_type = bp_loc_software_breakpoint;
2459
35df4500 2460 if (new_type != bl->loc_type)
765dc015
VP
2461 {
2462 static int said = 0;
cc59ec59 2463
35df4500 2464 bl->loc_type = new_type;
765dc015
VP
2465 if (!said)
2466 {
3e43a32a
MS
2467 fprintf_filtered (gdb_stdout,
2468 _("Note: automatically using "
2469 "hardware breakpoints for "
2470 "read-only addresses.\n"));
765dc015
VP
2471 said = 1;
2472 }
2473 }
2474 }
35df4500 2475 else if (bl->loc_type == bp_loc_software_breakpoint
765dc015 2476 && mr->attrib.mode != MEM_RW)
3e43a32a
MS
2477 warning (_("cannot set software breakpoint "
2478 "at readonly address %s"),
35df4500 2479 paddress (bl->gdbarch, bl->address));
765dc015
VP
2480 }
2481 }
2482
879bfdc2
DJ
2483 /* First check to see if we have to handle an overlay. */
2484 if (overlay_debugging == ovly_off
35df4500
TJB
2485 || bl->section == NULL
2486 || !(section_is_overlay (bl->section)))
879bfdc2
DJ
2487 {
2488 /* No overlay handling: just set the breakpoint. */
dd61ec5c
MW
2489 TRY_CATCH (e, RETURN_MASK_ALL)
2490 {
2491 val = bl->owner->ops->insert_location (bl);
2492 }
2493 if (e.reason < 0)
2494 {
2495 val = 1;
2496 hw_bp_err_string = (char *) e.message;
2497 }
879bfdc2
DJ
2498 }
2499 else
2500 {
4a64f543 2501 /* This breakpoint is in an overlay section.
879bfdc2
DJ
2502 Shall we set a breakpoint at the LMA? */
2503 if (!overlay_events_enabled)
2504 {
2505 /* Yes -- overlay event support is not active,
2506 so we must try to set a breakpoint at the LMA.
2507 This will not work for a hardware breakpoint. */
35df4500 2508 if (bl->loc_type == bp_loc_hardware_breakpoint)
8a3fe4f8 2509 warning (_("hardware breakpoint %d not supported in overlay!"),
35df4500 2510 bl->owner->number);
879bfdc2
DJ
2511 else
2512 {
35df4500
TJB
2513 CORE_ADDR addr = overlay_unmapped_address (bl->address,
2514 bl->section);
879bfdc2 2515 /* Set a software (trap) breakpoint at the LMA. */
35df4500
TJB
2516 bl->overlay_target_info = bl->target_info;
2517 bl->overlay_target_info.placed_address = addr;
2518 val = target_insert_breakpoint (bl->gdbarch,
2519 &bl->overlay_target_info);
879bfdc2 2520 if (val != 0)
99361f52 2521 fprintf_unfiltered (tmp_error_stream,
3e43a32a
MS
2522 "Overlay breakpoint %d "
2523 "failed: in ROM?\n",
35df4500 2524 bl->owner->number);
879bfdc2
DJ
2525 }
2526 }
2527 /* Shall we set a breakpoint at the VMA? */
35df4500 2528 if (section_is_mapped (bl->section))
879bfdc2
DJ
2529 {
2530 /* Yes. This overlay section is mapped into memory. */
dd61ec5c
MW
2531 TRY_CATCH (e, RETURN_MASK_ALL)
2532 {
2533 val = bl->owner->ops->insert_location (bl);
2534 }
2535 if (e.reason < 0)
2536 {
2537 val = 1;
2538 hw_bp_err_string = (char *) e.message;
2539 }
879bfdc2
DJ
2540 }
2541 else
2542 {
2543 /* No. This breakpoint will not be inserted.
2544 No error, but do not mark the bp as 'inserted'. */
2545 return 0;
2546 }
2547 }
2548
2549 if (val)
2550 {
2551 /* Can't set the breakpoint. */
35df4500 2552 if (solib_name_from_address (bl->pspace, bl->address))
879bfdc2 2553 {
4a64f543 2554 /* See also: disable_breakpoints_in_shlibs. */
879bfdc2 2555 val = 0;
35df4500 2556 bl->shlib_disabled = 1;
8d3788bd 2557 observer_notify_breakpoint_modified (bl->owner);
3fbb6ffa
TJB
2558 if (!*disabled_breaks)
2559 {
2560 fprintf_unfiltered (tmp_error_stream,
2561 "Cannot insert breakpoint %d.\n",
2562 bl->owner->number);
2563 fprintf_unfiltered (tmp_error_stream,
2564 "Temporarily disabling shared "
2565 "library breakpoints:\n");
2566 }
2567 *disabled_breaks = 1;
879bfdc2 2568 fprintf_unfiltered (tmp_error_stream,
35df4500 2569 "breakpoint #%d\n", bl->owner->number);
879bfdc2
DJ
2570 }
2571 else
879bfdc2 2572 {
35df4500 2573 if (bl->loc_type == bp_loc_hardware_breakpoint)
879bfdc2 2574 {
dd61ec5c
MW
2575 *hw_breakpoint_error = 1;
2576 *hw_bp_error_explained_already = hw_bp_err_string != NULL;
2577 fprintf_unfiltered (tmp_error_stream,
2578 "Cannot insert hardware breakpoint %d%s",
2579 bl->owner->number, hw_bp_err_string ? ":" : ".\n");
2580 if (hw_bp_err_string)
2581 fprintf_unfiltered (tmp_error_stream, "%s.\n", hw_bp_err_string);
879bfdc2
DJ
2582 }
2583 else
2584 {
2585 fprintf_unfiltered (tmp_error_stream,
2586 "Cannot insert breakpoint %d.\n",
35df4500 2587 bl->owner->number);
879bfdc2
DJ
2588 fprintf_filtered (tmp_error_stream,
2589 "Error accessing memory address ");
35df4500 2590 fputs_filtered (paddress (bl->gdbarch, bl->address),
5af949e3 2591 tmp_error_stream);
879bfdc2
DJ
2592 fprintf_filtered (tmp_error_stream, ": %s.\n",
2593 safe_strerror (val));
2594 }
2595
2596 }
2597 }
2598 else
35df4500 2599 bl->inserted = 1;
879bfdc2
DJ
2600
2601 return val;
2602 }
2603
35df4500 2604 else if (bl->loc_type == bp_loc_hardware_watchpoint
879bfdc2 2605 /* NOTE drow/2003-09-08: This state only exists for removing
4a64f543 2606 watchpoints. It's not clear that it's necessary... */
35df4500 2607 && bl->owner->disposition != disp_del_at_next_stop)
879bfdc2 2608 {
77b06cd7
TJB
2609 gdb_assert (bl->owner->ops != NULL
2610 && bl->owner->ops->insert_location != NULL);
2611
2612 val = bl->owner->ops->insert_location (bl);
85d721b8
PA
2613
2614 /* If trying to set a read-watchpoint, and it turns out it's not
2615 supported, try emulating one with an access watchpoint. */
35df4500 2616 if (val == 1 && bl->watchpoint_type == hw_read)
85d721b8
PA
2617 {
2618 struct bp_location *loc, **loc_temp;
2619
2620 /* But don't try to insert it, if there's already another
2621 hw_access location that would be considered a duplicate
2622 of this one. */
2623 ALL_BP_LOCATIONS (loc, loc_temp)
35df4500 2624 if (loc != bl
85d721b8 2625 && loc->watchpoint_type == hw_access
35df4500 2626 && watchpoint_locations_match (bl, loc))
85d721b8 2627 {
35df4500
TJB
2628 bl->duplicate = 1;
2629 bl->inserted = 1;
2630 bl->target_info = loc->target_info;
2631 bl->watchpoint_type = hw_access;
85d721b8
PA
2632 val = 0;
2633 break;
2634 }
2635
2636 if (val == 1)
2637 {
77b06cd7
TJB
2638 bl->watchpoint_type = hw_access;
2639 val = bl->owner->ops->insert_location (bl);
2640
2641 if (val)
2642 /* Back to the original value. */
2643 bl->watchpoint_type = hw_read;
85d721b8
PA
2644 }
2645 }
2646
35df4500 2647 bl->inserted = (val == 0);
879bfdc2
DJ
2648 }
2649
35df4500 2650 else if (bl->owner->type == bp_catchpoint)
879bfdc2 2651 {
77b06cd7
TJB
2652 gdb_assert (bl->owner->ops != NULL
2653 && bl->owner->ops->insert_location != NULL);
2654
2655 val = bl->owner->ops->insert_location (bl);
2656 if (val)
2657 {
2658 bl->owner->enable_state = bp_disabled;
2659
2660 if (val == 1)
2661 warning (_("\
2662Error inserting catchpoint %d: Your system does not support this type\n\
2663of catchpoint."), bl->owner->number);
2664 else
2665 warning (_("Error inserting catchpoint %d."), bl->owner->number);
2666 }
2667
2668 bl->inserted = (val == 0);
1640b821
DJ
2669
2670 /* We've already printed an error message if there was a problem
2671 inserting this catchpoint, and we've disabled the catchpoint,
2672 so just return success. */
2673 return 0;
879bfdc2
DJ
2674 }
2675
2676 return 0;
2677}
2678
6c95b8df
PA
2679/* This function is called when program space PSPACE is about to be
2680 deleted. It takes care of updating breakpoints to not reference
2681 PSPACE anymore. */
2682
2683void
2684breakpoint_program_space_exit (struct program_space *pspace)
2685{
2686 struct breakpoint *b, *b_temp;
876fa593 2687 struct bp_location *loc, **loc_temp;
6c95b8df
PA
2688
2689 /* Remove any breakpoint that was set through this program space. */
2690 ALL_BREAKPOINTS_SAFE (b, b_temp)
2691 {
2692 if (b->pspace == pspace)
2693 delete_breakpoint (b);
2694 }
2695
2696 /* Breakpoints set through other program spaces could have locations
2697 bound to PSPACE as well. Remove those. */
876fa593 2698 ALL_BP_LOCATIONS (loc, loc_temp)
6c95b8df
PA
2699 {
2700 struct bp_location *tmp;
2701
2702 if (loc->pspace == pspace)
2703 {
2bdf28a0 2704 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
6c95b8df
PA
2705 if (loc->owner->loc == loc)
2706 loc->owner->loc = loc->next;
2707 else
2708 for (tmp = loc->owner->loc; tmp->next != NULL; tmp = tmp->next)
2709 if (tmp->next == loc)
2710 {
2711 tmp->next = loc->next;
2712 break;
2713 }
2714 }
2715 }
2716
2717 /* Now update the global location list to permanently delete the
2718 removed locations above. */
2719 update_global_location_list (0);
2720}
2721
74960c60
VP
2722/* Make sure all breakpoints are inserted in inferior.
2723 Throws exception on any error.
2724 A breakpoint that is already inserted won't be inserted
2725 again, so calling this function twice is safe. */
2726void
2727insert_breakpoints (void)
2728{
2729 struct breakpoint *bpt;
2730
2731 ALL_BREAKPOINTS (bpt)
2732 if (is_hardware_watchpoint (bpt))
3a5c3e22
PA
2733 {
2734 struct watchpoint *w = (struct watchpoint *) bpt;
2735
2736 update_watchpoint (w, 0 /* don't reparse. */);
2737 }
74960c60 2738
b60e7edf 2739 update_global_location_list (1);
74960c60 2740
c35b1492
PA
2741 /* update_global_location_list does not insert breakpoints when
2742 always_inserted_mode is not enabled. Explicitly insert them
2743 now. */
2744 if (!breakpoints_always_inserted_mode ())
74960c60
VP
2745 insert_breakpoint_locations ();
2746}
2747
20388dd6
YQ
2748/* Invoke CALLBACK for each of bp_location. */
2749
2750void
2751iterate_over_bp_locations (walk_bp_location_callback callback)
2752{
2753 struct bp_location *loc, **loc_tmp;
2754
2755 ALL_BP_LOCATIONS (loc, loc_tmp)
2756 {
2757 callback (loc, NULL);
2758 }
2759}
2760
b775012e
LM
2761/* This is used when we need to synch breakpoint conditions between GDB and the
2762 target. It is the case with deleting and disabling of breakpoints when using
2763 always-inserted mode. */
2764
2765static void
2766update_inserted_breakpoint_locations (void)
2767{
2768 struct bp_location *bl, **blp_tmp;
2769 int error_flag = 0;
2770 int val = 0;
2771 int disabled_breaks = 0;
2772 int hw_breakpoint_error = 0;
dd61ec5c 2773 int hw_bp_details_reported = 0;
b775012e
LM
2774
2775 struct ui_file *tmp_error_stream = mem_fileopen ();
2776 struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_error_stream);
2777
2778 /* Explicitly mark the warning -- this will only be printed if
2779 there was an error. */
2780 fprintf_unfiltered (tmp_error_stream, "Warning:\n");
2781
2782 save_current_space_and_thread ();
2783
2784 ALL_BP_LOCATIONS (bl, blp_tmp)
2785 {
2786 /* We only want to update software breakpoints and hardware
2787 breakpoints. */
2788 if (!is_breakpoint (bl->owner))
2789 continue;
2790
2791 /* We only want to update locations that are already inserted
2792 and need updating. This is to avoid unwanted insertion during
2793 deletion of breakpoints. */
2794 if (!bl->inserted || (bl->inserted && !bl->needs_update))
2795 continue;
2796
2797 switch_to_program_space_and_thread (bl->pspace);
2798
2799 /* For targets that support global breakpoints, there's no need
2800 to select an inferior to insert breakpoint to. In fact, even
2801 if we aren't attached to any process yet, we should still
2802 insert breakpoints. */
f5656ead 2803 if (!gdbarch_has_global_breakpoints (target_gdbarch ())
b775012e
LM
2804 && ptid_equal (inferior_ptid, null_ptid))
2805 continue;
2806
2807 val = insert_bp_location (bl, tmp_error_stream, &disabled_breaks,
dd61ec5c 2808 &hw_breakpoint_error, &hw_bp_details_reported);
b775012e
LM
2809 if (val)
2810 error_flag = val;
2811 }
2812
2813 if (error_flag)
2814 {
2815 target_terminal_ours_for_output ();
2816 error_stream (tmp_error_stream);
2817 }
2818
2819 do_cleanups (cleanups);
2820}
2821
c30eee59 2822/* Used when starting or continuing the program. */
c906108c 2823
74960c60
VP
2824static void
2825insert_breakpoint_locations (void)
c906108c 2826{
a5606eee 2827 struct breakpoint *bpt;
35df4500 2828 struct bp_location *bl, **blp_tmp;
eacd795a 2829 int error_flag = 0;
c906108c 2830 int val = 0;
3fbb6ffa 2831 int disabled_breaks = 0;
81d0cc19 2832 int hw_breakpoint_error = 0;
dd61ec5c 2833 int hw_bp_error_explained_already = 0;
c906108c 2834
81d0cc19 2835 struct ui_file *tmp_error_stream = mem_fileopen ();
f7545552 2836 struct cleanup *cleanups = make_cleanup_ui_file_delete (tmp_error_stream);
74960c60 2837
81d0cc19
GS
2838 /* Explicitly mark the warning -- this will only be printed if
2839 there was an error. */
2840 fprintf_unfiltered (tmp_error_stream, "Warning:\n");
6c95b8df
PA
2841
2842 save_current_space_and_thread ();
2843
35df4500 2844 ALL_BP_LOCATIONS (bl, blp_tmp)
879bfdc2 2845 {
b775012e 2846 if (!should_be_inserted (bl) || (bl->inserted && !bl->needs_update))
879bfdc2
DJ
2847 continue;
2848
4a64f543
MS
2849 /* There is no point inserting thread-specific breakpoints if
2850 the thread no longer exists. ALL_BP_LOCATIONS bp_location
2851 has BL->OWNER always non-NULL. */
35df4500
TJB
2852 if (bl->owner->thread != -1
2853 && !valid_thread_id (bl->owner->thread))
f365de73
AS
2854 continue;
2855
35df4500 2856 switch_to_program_space_and_thread (bl->pspace);
6c95b8df
PA
2857
2858 /* For targets that support global breakpoints, there's no need
2859 to select an inferior to insert breakpoint to. In fact, even
2860 if we aren't attached to any process yet, we should still
2861 insert breakpoints. */
f5656ead 2862 if (!gdbarch_has_global_breakpoints (target_gdbarch ())
6c95b8df
PA
2863 && ptid_equal (inferior_ptid, null_ptid))
2864 continue;
2865
3fbb6ffa 2866 val = insert_bp_location (bl, tmp_error_stream, &disabled_breaks,
dd61ec5c 2867 &hw_breakpoint_error, &hw_bp_error_explained_already);
879bfdc2 2868 if (val)
eacd795a 2869 error_flag = val;
879bfdc2 2870 }
c906108c 2871
4a64f543
MS
2872 /* If we failed to insert all locations of a watchpoint, remove
2873 them, as half-inserted watchpoint is of limited use. */
a5606eee
VP
2874 ALL_BREAKPOINTS (bpt)
2875 {
2876 int some_failed = 0;
2877 struct bp_location *loc;
2878
2879 if (!is_hardware_watchpoint (bpt))
2880 continue;
2881
d6b74ac4 2882 if (!breakpoint_enabled (bpt))
a5606eee 2883 continue;
74960c60
VP
2884
2885 if (bpt->disposition == disp_del_at_next_stop)
2886 continue;
a5606eee
VP
2887
2888 for (loc = bpt->loc; loc; loc = loc->next)
56710373 2889 if (!loc->inserted && should_be_inserted (loc))
a5606eee
VP
2890 {
2891 some_failed = 1;
2892 break;
2893 }
2894 if (some_failed)
2895 {
2896 for (loc = bpt->loc; loc; loc = loc->next)
2897 if (loc->inserted)
2898 remove_breakpoint (loc, mark_uninserted);
2899
2900 hw_breakpoint_error = 1;
2901 fprintf_unfiltered (tmp_error_stream,
2902 "Could not insert hardware watchpoint %d.\n",
2903 bpt->number);
eacd795a 2904 error_flag = -1;
a5606eee
VP
2905 }
2906 }
2907
eacd795a 2908 if (error_flag)
81d0cc19
GS
2909 {
2910 /* If a hardware breakpoint or watchpoint was inserted, add a
2911 message about possibly exhausted resources. */
dd61ec5c 2912 if (hw_breakpoint_error && !hw_bp_error_explained_already)
81d0cc19 2913 {
c6510018
MS
2914 fprintf_unfiltered (tmp_error_stream,
2915 "Could not insert hardware breakpoints:\n\
2916You may have requested too many hardware breakpoints/watchpoints.\n");
81d0cc19 2917 }
81d0cc19
GS
2918 target_terminal_ours_for_output ();
2919 error_stream (tmp_error_stream);
2920 }
f7545552
TT
2921
2922 do_cleanups (cleanups);
c906108c
SS
2923}
2924
c30eee59
TJB
2925/* Used when the program stops.
2926 Returns zero if successful, or non-zero if there was a problem
2927 removing a breakpoint location. */
2928
c906108c 2929int
fba45db2 2930remove_breakpoints (void)
c906108c 2931{
35df4500 2932 struct bp_location *bl, **blp_tmp;
3a1bae8e 2933 int val = 0;
c906108c 2934
35df4500 2935 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 2936 {
1e4d1764 2937 if (bl->inserted && !is_tracepoint (bl->owner))
35df4500 2938 val |= remove_breakpoint (bl, mark_uninserted);
c5aa993b 2939 }
3a1bae8e 2940 return val;
c906108c
SS
2941}
2942
6c95b8df
PA
2943/* Remove breakpoints of process PID. */
2944
2945int
2946remove_breakpoints_pid (int pid)
2947{
35df4500 2948 struct bp_location *bl, **blp_tmp;
6c95b8df
PA
2949 int val;
2950 struct inferior *inf = find_inferior_pid (pid);
2951
35df4500 2952 ALL_BP_LOCATIONS (bl, blp_tmp)
6c95b8df 2953 {
35df4500 2954 if (bl->pspace != inf->pspace)
6c95b8df
PA
2955 continue;
2956
d3ce09f5
SS
2957 if (bl->owner->type == bp_dprintf)
2958 continue;
2959
35df4500 2960 if (bl->inserted)
6c95b8df 2961 {
35df4500 2962 val = remove_breakpoint (bl, mark_uninserted);
6c95b8df
PA
2963 if (val != 0)
2964 return val;
2965 }
2966 }
2967 return 0;
2968}
2969
c906108c 2970int
fba45db2 2971reattach_breakpoints (int pid)
c906108c 2972{
6c95b8df 2973 struct cleanup *old_chain;
35df4500 2974 struct bp_location *bl, **blp_tmp;
c906108c 2975 int val;
86b887df 2976 struct ui_file *tmp_error_stream;
dd61ec5c 2977 int dummy1 = 0, dummy2 = 0, dummy3 = 0;
6c95b8df
PA
2978 struct inferior *inf;
2979 struct thread_info *tp;
2980
2981 tp = any_live_thread_of_process (pid);
2982 if (tp == NULL)
2983 return 1;
2984
2985 inf = find_inferior_pid (pid);
2986 old_chain = save_inferior_ptid ();
2987
2988 inferior_ptid = tp->ptid;
a4954f26 2989
86b887df 2990 tmp_error_stream = mem_fileopen ();
a4954f26 2991 make_cleanup_ui_file_delete (tmp_error_stream);
c906108c 2992
35df4500 2993 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 2994 {
35df4500 2995 if (bl->pspace != inf->pspace)
6c95b8df
PA
2996 continue;
2997
35df4500 2998 if (bl->inserted)
c5aa993b 2999 {
35df4500 3000 bl->inserted = 0;
dd61ec5c 3001 val = insert_bp_location (bl, tmp_error_stream, &dummy1, &dummy2, &dummy3);
c5aa993b
JM
3002 if (val != 0)
3003 {
ce696e05 3004 do_cleanups (old_chain);
c5aa993b
JM
3005 return val;
3006 }
3007 }
3008 }
ce696e05 3009 do_cleanups (old_chain);
c906108c
SS
3010 return 0;
3011}
3012
e58b0e63
PA
3013static int internal_breakpoint_number = -1;
3014
84f4c1fe
PM
3015/* Set the breakpoint number of B, depending on the value of INTERNAL.
3016 If INTERNAL is non-zero, the breakpoint number will be populated
3017 from internal_breakpoint_number and that variable decremented.
e5dd4106 3018 Otherwise the breakpoint number will be populated from
84f4c1fe
PM
3019 breakpoint_count and that value incremented. Internal breakpoints
3020 do not set the internal var bpnum. */
3021static void
3022set_breakpoint_number (int internal, struct breakpoint *b)
3023{
3024 if (internal)
3025 b->number = internal_breakpoint_number--;
3026 else
3027 {
3028 set_breakpoint_count (breakpoint_count + 1);
3029 b->number = breakpoint_count;
3030 }
3031}
3032
e62c965a 3033static struct breakpoint *
a6d9a66e 3034create_internal_breakpoint (struct gdbarch *gdbarch,
06edf0c0 3035 CORE_ADDR address, enum bptype type,
c0a91b2b 3036 const struct breakpoint_ops *ops)
e62c965a 3037{
e62c965a
PP
3038 struct symtab_and_line sal;
3039 struct breakpoint *b;
3040
4a64f543 3041 init_sal (&sal); /* Initialize to zeroes. */
e62c965a
PP
3042
3043 sal.pc = address;
3044 sal.section = find_pc_overlay (sal.pc);
6c95b8df 3045 sal.pspace = current_program_space;
e62c965a 3046
06edf0c0 3047 b = set_raw_breakpoint (gdbarch, sal, type, ops);
e62c965a
PP
3048 b->number = internal_breakpoint_number--;
3049 b->disposition = disp_donttouch;
3050
3051 return b;
3052}
3053
17450429
PP
3054static const char *const longjmp_names[] =
3055 {
3056 "longjmp", "_longjmp", "siglongjmp", "_siglongjmp"
3057 };
3058#define NUM_LONGJMP_NAMES ARRAY_SIZE(longjmp_names)
3059
3060/* Per-objfile data private to breakpoint.c. */
3061struct breakpoint_objfile_data
3062{
3063 /* Minimal symbol for "_ovly_debug_event" (if any). */
3064 struct minimal_symbol *overlay_msym;
3065
3066 /* Minimal symbol(s) for "longjmp", "siglongjmp", etc. (if any). */
3067 struct minimal_symbol *longjmp_msym[NUM_LONGJMP_NAMES];
3068
28106bc2
SDJ
3069 /* True if we have looked for longjmp probes. */
3070 int longjmp_searched;
3071
3072 /* SystemTap probe points for longjmp (if any). */
3073 VEC (probe_p) *longjmp_probes;
3074
17450429
PP
3075 /* Minimal symbol for "std::terminate()" (if any). */
3076 struct minimal_symbol *terminate_msym;
3077
3078 /* Minimal symbol for "_Unwind_DebugHook" (if any). */
3079 struct minimal_symbol *exception_msym;
28106bc2
SDJ
3080
3081 /* True if we have looked for exception probes. */
3082 int exception_searched;
3083
3084 /* SystemTap probe points for unwinding (if any). */
3085 VEC (probe_p) *exception_probes;
17450429
PP
3086};
3087
3088static const struct objfile_data *breakpoint_objfile_key;
3089
3090/* Minimal symbol not found sentinel. */
3091static struct minimal_symbol msym_not_found;
3092
3093/* Returns TRUE if MSYM point to the "not found" sentinel. */
3094
3095static int
3096msym_not_found_p (const struct minimal_symbol *msym)
3097{
3098 return msym == &msym_not_found;
3099}
3100
3101/* Return per-objfile data needed by breakpoint.c.
3102 Allocate the data if necessary. */
3103
3104static struct breakpoint_objfile_data *
3105get_breakpoint_objfile_data (struct objfile *objfile)
3106{
3107 struct breakpoint_objfile_data *bp_objfile_data;
3108
3109 bp_objfile_data = objfile_data (objfile, breakpoint_objfile_key);
3110 if (bp_objfile_data == NULL)
3111 {
3112 bp_objfile_data = obstack_alloc (&objfile->objfile_obstack,
3113 sizeof (*bp_objfile_data));
3114
3115 memset (bp_objfile_data, 0, sizeof (*bp_objfile_data));
3116 set_objfile_data (objfile, breakpoint_objfile_key, bp_objfile_data);
3117 }
3118 return bp_objfile_data;
3119}
3120
28106bc2
SDJ
3121static void
3122free_breakpoint_probes (struct objfile *obj, void *data)
3123{
3124 struct breakpoint_objfile_data *bp_objfile_data = data;
3125
3126 VEC_free (probe_p, bp_objfile_data->longjmp_probes);
3127 VEC_free (probe_p, bp_objfile_data->exception_probes);
3128}
3129
e62c965a 3130static void
af02033e 3131create_overlay_event_breakpoint (void)
e62c965a 3132{
69de3c6a 3133 struct objfile *objfile;
af02033e 3134 const char *const func_name = "_ovly_debug_event";
e62c965a 3135
69de3c6a
PP
3136 ALL_OBJFILES (objfile)
3137 {
3138 struct breakpoint *b;
17450429
PP
3139 struct breakpoint_objfile_data *bp_objfile_data;
3140 CORE_ADDR addr;
69de3c6a 3141
17450429
PP
3142 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3143
3144 if (msym_not_found_p (bp_objfile_data->overlay_msym))
3145 continue;
3146
3147 if (bp_objfile_data->overlay_msym == NULL)
3148 {
3149 struct minimal_symbol *m;
3150
3151 m = lookup_minimal_symbol_text (func_name, objfile);
3152 if (m == NULL)
3153 {
3154 /* Avoid future lookups in this objfile. */
3155 bp_objfile_data->overlay_msym = &msym_not_found;
3156 continue;
3157 }
3158 bp_objfile_data->overlay_msym = m;
3159 }
e62c965a 3160
17450429
PP
3161 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->overlay_msym);
3162 b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
06edf0c0
PA
3163 bp_overlay_event,
3164 &internal_breakpoint_ops);
69de3c6a 3165 b->addr_string = xstrdup (func_name);
e62c965a 3166
69de3c6a
PP
3167 if (overlay_debugging == ovly_auto)
3168 {
3169 b->enable_state = bp_enabled;
3170 overlay_events_enabled = 1;
3171 }
3172 else
3173 {
3174 b->enable_state = bp_disabled;
3175 overlay_events_enabled = 0;
3176 }
e62c965a
PP
3177 }
3178 update_global_location_list (1);
3179}
3180
0fd8e87f 3181static void
af02033e 3182create_longjmp_master_breakpoint (void)
0fd8e87f 3183{
6c95b8df 3184 struct program_space *pspace;
6c95b8df
PA
3185 struct cleanup *old_chain;
3186
3187 old_chain = save_current_program_space ();
0fd8e87f 3188
6c95b8df 3189 ALL_PSPACES (pspace)
af02033e
PP
3190 {
3191 struct objfile *objfile;
3192
3193 set_current_program_space (pspace);
3194
3195 ALL_OBJFILES (objfile)
0fd8e87f 3196 {
af02033e
PP
3197 int i;
3198 struct gdbarch *gdbarch;
17450429 3199 struct breakpoint_objfile_data *bp_objfile_data;
0fd8e87f 3200
af02033e
PP
3201 gdbarch = get_objfile_arch (objfile);
3202 if (!gdbarch_get_longjmp_target_p (gdbarch))
0fd8e87f
UW
3203 continue;
3204
17450429
PP
3205 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3206
28106bc2
SDJ
3207 if (!bp_objfile_data->longjmp_searched)
3208 {
3209 bp_objfile_data->longjmp_probes
3210 = find_probes_in_objfile (objfile, "libc", "longjmp");
3211 bp_objfile_data->longjmp_searched = 1;
3212 }
3213
3214 if (bp_objfile_data->longjmp_probes != NULL)
3215 {
3216 int i;
3217 struct probe *probe;
3218 struct gdbarch *gdbarch = get_objfile_arch (objfile);
3219
3220 for (i = 0;
3221 VEC_iterate (probe_p,
3222 bp_objfile_data->longjmp_probes,
3223 i, probe);
3224 ++i)
3225 {
3226 struct breakpoint *b;
3227
3228 b = create_internal_breakpoint (gdbarch, probe->address,
3229 bp_longjmp_master,
3230 &internal_breakpoint_ops);
3231 b->addr_string = xstrdup ("-probe-stap libc:longjmp");
3232 b->enable_state = bp_disabled;
3233 }
3234
3235 continue;
3236 }
3237
17450429 3238 for (i = 0; i < NUM_LONGJMP_NAMES; i++)
af02033e
PP
3239 {
3240 struct breakpoint *b;
af02033e 3241 const char *func_name;
17450429 3242 CORE_ADDR addr;
6c95b8df 3243
17450429 3244 if (msym_not_found_p (bp_objfile_data->longjmp_msym[i]))
af02033e 3245 continue;
0fd8e87f 3246
17450429
PP
3247 func_name = longjmp_names[i];
3248 if (bp_objfile_data->longjmp_msym[i] == NULL)
3249 {
3250 struct minimal_symbol *m;
3251
3252 m = lookup_minimal_symbol_text (func_name, objfile);
3253 if (m == NULL)
3254 {
3255 /* Prevent future lookups in this objfile. */
3256 bp_objfile_data->longjmp_msym[i] = &msym_not_found;
3257 continue;
3258 }
3259 bp_objfile_data->longjmp_msym[i] = m;
3260 }
3261
3262 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->longjmp_msym[i]);
06edf0c0
PA
3263 b = create_internal_breakpoint (gdbarch, addr, bp_longjmp_master,
3264 &internal_breakpoint_ops);
af02033e
PP
3265 b->addr_string = xstrdup (func_name);
3266 b->enable_state = bp_disabled;
3267 }
0fd8e87f 3268 }
af02033e 3269 }
0fd8e87f 3270 update_global_location_list (1);
6c95b8df
PA
3271
3272 do_cleanups (old_chain);
0fd8e87f
UW
3273}
3274
af02033e 3275/* Create a master std::terminate breakpoint. */
aa7d318d 3276static void
af02033e 3277create_std_terminate_master_breakpoint (void)
aa7d318d
TT
3278{
3279 struct program_space *pspace;
aa7d318d 3280 struct cleanup *old_chain;
af02033e 3281 const char *const func_name = "std::terminate()";
aa7d318d
TT
3282
3283 old_chain = save_current_program_space ();
3284
3285 ALL_PSPACES (pspace)
17450429
PP
3286 {
3287 struct objfile *objfile;
3288 CORE_ADDR addr;
3289
3290 set_current_program_space (pspace);
3291
aa7d318d
TT
3292 ALL_OBJFILES (objfile)
3293 {
3294 struct breakpoint *b;
17450429 3295 struct breakpoint_objfile_data *bp_objfile_data;
aa7d318d 3296
17450429 3297 bp_objfile_data = get_breakpoint_objfile_data (objfile);
aa7d318d 3298
17450429
PP
3299 if (msym_not_found_p (bp_objfile_data->terminate_msym))
3300 continue;
3301
3302 if (bp_objfile_data->terminate_msym == NULL)
3303 {
3304 struct minimal_symbol *m;
3305
3306 m = lookup_minimal_symbol (func_name, NULL, objfile);
3307 if (m == NULL || (MSYMBOL_TYPE (m) != mst_text
3308 && MSYMBOL_TYPE (m) != mst_file_text))
3309 {
3310 /* Prevent future lookups in this objfile. */
3311 bp_objfile_data->terminate_msym = &msym_not_found;
3312 continue;
3313 }
3314 bp_objfile_data->terminate_msym = m;
3315 }
aa7d318d 3316
17450429
PP
3317 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->terminate_msym);
3318 b = create_internal_breakpoint (get_objfile_arch (objfile), addr,
06edf0c0
PA
3319 bp_std_terminate_master,
3320 &internal_breakpoint_ops);
aa7d318d
TT
3321 b->addr_string = xstrdup (func_name);
3322 b->enable_state = bp_disabled;
3323 }
17450429
PP
3324 }
3325
aa7d318d
TT
3326 update_global_location_list (1);
3327
3328 do_cleanups (old_chain);
3329}
3330
186c406b
TT
3331/* Install a master breakpoint on the unwinder's debug hook. */
3332
70221824 3333static void
186c406b
TT
3334create_exception_master_breakpoint (void)
3335{
3336 struct objfile *objfile;
17450429 3337 const char *const func_name = "_Unwind_DebugHook";
186c406b
TT
3338
3339 ALL_OBJFILES (objfile)
3340 {
17450429
PP
3341 struct breakpoint *b;
3342 struct gdbarch *gdbarch;
3343 struct breakpoint_objfile_data *bp_objfile_data;
3344 CORE_ADDR addr;
3345
3346 bp_objfile_data = get_breakpoint_objfile_data (objfile);
3347
28106bc2
SDJ
3348 /* We prefer the SystemTap probe point if it exists. */
3349 if (!bp_objfile_data->exception_searched)
3350 {
3351 bp_objfile_data->exception_probes
3352 = find_probes_in_objfile (objfile, "libgcc", "unwind");
3353 bp_objfile_data->exception_searched = 1;
3354 }
3355
3356 if (bp_objfile_data->exception_probes != NULL)
3357 {
3358 struct gdbarch *gdbarch = get_objfile_arch (objfile);
3359 int i;
3360 struct probe *probe;
3361
3362 for (i = 0;
3363 VEC_iterate (probe_p,
3364 bp_objfile_data->exception_probes,
3365 i, probe);
3366 ++i)
3367 {
3368 struct breakpoint *b;
3369
3370 b = create_internal_breakpoint (gdbarch, probe->address,
3371 bp_exception_master,
3372 &internal_breakpoint_ops);
3373 b->addr_string = xstrdup ("-probe-stap libgcc:unwind");
3374 b->enable_state = bp_disabled;
3375 }
3376
3377 continue;
3378 }
3379
3380 /* Otherwise, try the hook function. */
3381
17450429
PP
3382 if (msym_not_found_p (bp_objfile_data->exception_msym))
3383 continue;
3384
3385 gdbarch = get_objfile_arch (objfile);
186c406b 3386
17450429 3387 if (bp_objfile_data->exception_msym == NULL)
186c406b 3388 {
17450429 3389 struct minimal_symbol *debug_hook;
186c406b 3390
17450429
PP
3391 debug_hook = lookup_minimal_symbol (func_name, NULL, objfile);
3392 if (debug_hook == NULL)
3393 {
3394 bp_objfile_data->exception_msym = &msym_not_found;
3395 continue;
3396 }
3397
3398 bp_objfile_data->exception_msym = debug_hook;
186c406b 3399 }
17450429
PP
3400
3401 addr = SYMBOL_VALUE_ADDRESS (bp_objfile_data->exception_msym);
3402 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
3403 &current_target);
06edf0c0
PA
3404 b = create_internal_breakpoint (gdbarch, addr, bp_exception_master,
3405 &internal_breakpoint_ops);
17450429
PP
3406 b->addr_string = xstrdup (func_name);
3407 b->enable_state = bp_disabled;
186c406b
TT
3408 }
3409
3410 update_global_location_list (1);
3411}
3412
c906108c 3413void
fba45db2 3414update_breakpoints_after_exec (void)
c906108c 3415{
35df4500 3416 struct breakpoint *b, *b_tmp;
876fa593 3417 struct bp_location *bploc, **bplocp_tmp;
c906108c 3418
25b22b0a
PA
3419 /* We're about to delete breakpoints from GDB's lists. If the
3420 INSERTED flag is true, GDB will try to lift the breakpoints by
3421 writing the breakpoints' "shadow contents" back into memory. The
3422 "shadow contents" are NOT valid after an exec, so GDB should not
3423 do that. Instead, the target is responsible from marking
3424 breakpoints out as soon as it detects an exec. We don't do that
3425 here instead, because there may be other attempts to delete
3426 breakpoints after detecting an exec and before reaching here. */
876fa593 3427 ALL_BP_LOCATIONS (bploc, bplocp_tmp)
6c95b8df
PA
3428 if (bploc->pspace == current_program_space)
3429 gdb_assert (!bploc->inserted);
c906108c 3430
35df4500 3431 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 3432 {
6c95b8df
PA
3433 if (b->pspace != current_program_space)
3434 continue;
3435
4a64f543 3436 /* Solib breakpoints must be explicitly reset after an exec(). */
c5aa993b
JM
3437 if (b->type == bp_shlib_event)
3438 {
3439 delete_breakpoint (b);
3440 continue;
3441 }
c906108c 3442
4a64f543 3443 /* JIT breakpoints must be explicitly reset after an exec(). */
4efc6507
DE
3444 if (b->type == bp_jit_event)
3445 {
3446 delete_breakpoint (b);
3447 continue;
3448 }
3449
1900040c 3450 /* Thread event breakpoints must be set anew after an exec(),
0fd8e87f
UW
3451 as must overlay event and longjmp master breakpoints. */
3452 if (b->type == bp_thread_event || b->type == bp_overlay_event
186c406b
TT
3453 || b->type == bp_longjmp_master || b->type == bp_std_terminate_master
3454 || b->type == bp_exception_master)
c4093a6a
JM
3455 {
3456 delete_breakpoint (b);
3457 continue;
3458 }
3459
4a64f543 3460 /* Step-resume breakpoints are meaningless after an exec(). */
2c03e5be 3461 if (b->type == bp_step_resume || b->type == bp_hp_step_resume)
c5aa993b
JM
3462 {
3463 delete_breakpoint (b);
3464 continue;
3465 }
3466
611c83ae
PA
3467 /* Longjmp and longjmp-resume breakpoints are also meaningless
3468 after an exec. */
186c406b 3469 if (b->type == bp_longjmp || b->type == bp_longjmp_resume
e2e4d78b 3470 || b->type == bp_longjmp_call_dummy
186c406b 3471 || b->type == bp_exception || b->type == bp_exception_resume)
611c83ae
PA
3472 {
3473 delete_breakpoint (b);
3474 continue;
3475 }
3476
ce78b96d
JB
3477 if (b->type == bp_catchpoint)
3478 {
3479 /* For now, none of the bp_catchpoint breakpoints need to
3480 do anything at this point. In the future, if some of
3481 the catchpoints need to something, we will need to add
3482 a new method, and call this method from here. */
3483 continue;
3484 }
3485
c5aa993b
JM
3486 /* bp_finish is a special case. The only way we ought to be able
3487 to see one of these when an exec() has happened, is if the user
3488 caught a vfork, and then said "finish". Ordinarily a finish just
3489 carries them to the call-site of the current callee, by setting
3490 a temporary bp there and resuming. But in this case, the finish
3491 will carry them entirely through the vfork & exec.
3492
3493 We don't want to allow a bp_finish to remain inserted now. But
3494 we can't safely delete it, 'cause finish_command has a handle to
3495 the bp on a bpstat, and will later want to delete it. There's a
3496 chance (and I've seen it happen) that if we delete the bp_finish
3497 here, that its storage will get reused by the time finish_command
3498 gets 'round to deleting the "use to be a bp_finish" breakpoint.
3499 We really must allow finish_command to delete a bp_finish.
3500
e5dd4106 3501 In the absence of a general solution for the "how do we know
53a5351d
JM
3502 it's safe to delete something others may have handles to?"
3503 problem, what we'll do here is just uninsert the bp_finish, and
3504 let finish_command delete it.
3505
3506 (We know the bp_finish is "doomed" in the sense that it's
3507 momentary, and will be deleted as soon as finish_command sees
3508 the inferior stopped. So it doesn't matter that the bp's
3509 address is probably bogus in the new a.out, unlike e.g., the
3510 solib breakpoints.) */
c5aa993b 3511
c5aa993b
JM
3512 if (b->type == bp_finish)
3513 {
3514 continue;
3515 }
3516
3517 /* Without a symbolic address, we have little hope of the
3518 pre-exec() address meaning the same thing in the post-exec()
4a64f543 3519 a.out. */
c5aa993b
JM
3520 if (b->addr_string == NULL)
3521 {
3522 delete_breakpoint (b);
3523 continue;
3524 }
c5aa993b 3525 }
1900040c 3526 /* FIXME what about longjmp breakpoints? Re-create them here? */
af02033e
PP
3527 create_overlay_event_breakpoint ();
3528 create_longjmp_master_breakpoint ();
3529 create_std_terminate_master_breakpoint ();
186c406b 3530 create_exception_master_breakpoint ();
c906108c
SS
3531}
3532
3533int
d80ee84f 3534detach_breakpoints (ptid_t ptid)
c906108c 3535{
35df4500 3536 struct bp_location *bl, **blp_tmp;
3a1bae8e 3537 int val = 0;
ce696e05 3538 struct cleanup *old_chain = save_inferior_ptid ();
6c95b8df 3539 struct inferior *inf = current_inferior ();
c5aa993b 3540
d80ee84f 3541 if (PIDGET (ptid) == PIDGET (inferior_ptid))
8a3fe4f8 3542 error (_("Cannot detach breakpoints of inferior_ptid"));
c5aa993b 3543
6c95b8df 3544 /* Set inferior_ptid; remove_breakpoint_1 uses this global. */
d80ee84f 3545 inferior_ptid = ptid;
35df4500 3546 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 3547 {
35df4500 3548 if (bl->pspace != inf->pspace)
6c95b8df
PA
3549 continue;
3550
35df4500
TJB
3551 if (bl->inserted)
3552 val |= remove_breakpoint_1 (bl, mark_inserted);
c5aa993b 3553 }
d03285ec
UW
3554
3555 /* Detach single-step breakpoints as well. */
3556 detach_single_step_breakpoints ();
3557
ce696e05 3558 do_cleanups (old_chain);
3a1bae8e 3559 return val;
c906108c
SS
3560}
3561
35df4500 3562/* Remove the breakpoint location BL from the current address space.
6c95b8df
PA
3563 Note that this is used to detach breakpoints from a child fork.
3564 When we get here, the child isn't in the inferior list, and neither
3565 do we have objects to represent its address space --- we should
35df4500 3566 *not* look at bl->pspace->aspace here. */
6c95b8df 3567
c906108c 3568static int
35df4500 3569remove_breakpoint_1 (struct bp_location *bl, insertion_state_t is)
c906108c
SS
3570{
3571 int val;
c5aa993b 3572
35df4500
TJB
3573 /* BL is never in moribund_locations by our callers. */
3574 gdb_assert (bl->owner != NULL);
2bdf28a0 3575
35df4500 3576 if (bl->owner->enable_state == bp_permanent)
c2c6d25f
JM
3577 /* Permanent breakpoints cannot be inserted or removed. */
3578 return 0;
3579
74960c60
VP
3580 /* The type of none suggests that owner is actually deleted.
3581 This should not ever happen. */
35df4500 3582 gdb_assert (bl->owner->type != bp_none);
0bde7532 3583
35df4500
TJB
3584 if (bl->loc_type == bp_loc_software_breakpoint
3585 || bl->loc_type == bp_loc_hardware_breakpoint)
c906108c 3586 {
c02f5703
MS
3587 /* "Normal" instruction breakpoint: either the standard
3588 trap-instruction bp (bp_breakpoint), or a
3589 bp_hardware_breakpoint. */
3590
3591 /* First check to see if we have to handle an overlay. */
3592 if (overlay_debugging == ovly_off
35df4500
TJB
3593 || bl->section == NULL
3594 || !(section_is_overlay (bl->section)))
c02f5703
MS
3595 {
3596 /* No overlay handling: just remove the breakpoint. */
348d480f 3597 val = bl->owner->ops->remove_location (bl);
c02f5703 3598 }
c906108c
SS
3599 else
3600 {
4a64f543 3601 /* This breakpoint is in an overlay section.
c02f5703
MS
3602 Did we set a breakpoint at the LMA? */
3603 if (!overlay_events_enabled)
3604 {
3605 /* Yes -- overlay event support is not active, so we
3606 should have set a breakpoint at the LMA. Remove it.
3607 */
c02f5703
MS
3608 /* Ignore any failures: if the LMA is in ROM, we will
3609 have already warned when we failed to insert it. */
35df4500
TJB
3610 if (bl->loc_type == bp_loc_hardware_breakpoint)
3611 target_remove_hw_breakpoint (bl->gdbarch,
3612 &bl->overlay_target_info);
c02f5703 3613 else
35df4500
TJB
3614 target_remove_breakpoint (bl->gdbarch,
3615 &bl->overlay_target_info);
c02f5703
MS
3616 }
3617 /* Did we set a breakpoint at the VMA?
3618 If so, we will have marked the breakpoint 'inserted'. */
35df4500 3619 if (bl->inserted)
c906108c 3620 {
c02f5703
MS
3621 /* Yes -- remove it. Previously we did not bother to
3622 remove the breakpoint if the section had been
3623 unmapped, but let's not rely on that being safe. We
3624 don't know what the overlay manager might do. */
aa67235e
UW
3625
3626 /* However, we should remove *software* breakpoints only
3627 if the section is still mapped, or else we overwrite
3628 wrong code with the saved shadow contents. */
348d480f
PA
3629 if (bl->loc_type == bp_loc_hardware_breakpoint
3630 || section_is_mapped (bl->section))
3631 val = bl->owner->ops->remove_location (bl);
aa67235e
UW
3632 else
3633 val = 0;
c906108c 3634 }
c02f5703
MS
3635 else
3636 {
3637 /* No -- not inserted, so no need to remove. No error. */
3638 val = 0;
3639 }
c906108c 3640 }
879d1e6b
UW
3641
3642 /* In some cases, we might not be able to remove a breakpoint
3643 in a shared library that has already been removed, but we
3644 have not yet processed the shlib unload event. */
35df4500 3645 if (val && solib_name_from_address (bl->pspace, bl->address))
879d1e6b
UW
3646 val = 0;
3647
c906108c
SS
3648 if (val)
3649 return val;
35df4500 3650 bl->inserted = (is == mark_inserted);
c906108c 3651 }
35df4500 3652 else if (bl->loc_type == bp_loc_hardware_watchpoint)
c906108c 3653 {
77b06cd7
TJB
3654 gdb_assert (bl->owner->ops != NULL
3655 && bl->owner->ops->remove_location != NULL);
3656
35df4500 3657 bl->inserted = (is == mark_inserted);
77b06cd7 3658 bl->owner->ops->remove_location (bl);
2e70b7b9 3659
c906108c 3660 /* Failure to remove any of the hardware watchpoints comes here. */
35df4500 3661 if ((is == mark_uninserted) && (bl->inserted))
8a3fe4f8 3662 warning (_("Could not remove hardware watchpoint %d."),
35df4500 3663 bl->owner->number);
c906108c 3664 }
35df4500
TJB
3665 else if (bl->owner->type == bp_catchpoint
3666 && breakpoint_enabled (bl->owner)
3667 && !bl->duplicate)
ce78b96d 3668 {
77b06cd7
TJB
3669 gdb_assert (bl->owner->ops != NULL
3670 && bl->owner->ops->remove_location != NULL);
ce78b96d 3671
77b06cd7 3672 val = bl->owner->ops->remove_location (bl);
ce78b96d
JB
3673 if (val)
3674 return val;
77b06cd7 3675
35df4500 3676 bl->inserted = (is == mark_inserted);
ce78b96d 3677 }
c906108c
SS
3678
3679 return 0;
3680}
3681
6c95b8df 3682static int
35df4500 3683remove_breakpoint (struct bp_location *bl, insertion_state_t is)
6c95b8df
PA
3684{
3685 int ret;
3686 struct cleanup *old_chain;
3687
35df4500
TJB
3688 /* BL is never in moribund_locations by our callers. */
3689 gdb_assert (bl->owner != NULL);
2bdf28a0 3690
35df4500 3691 if (bl->owner->enable_state == bp_permanent)
6c95b8df
PA
3692 /* Permanent breakpoints cannot be inserted or removed. */
3693 return 0;
3694
3695 /* The type of none suggests that owner is actually deleted.
3696 This should not ever happen. */
35df4500 3697 gdb_assert (bl->owner->type != bp_none);
6c95b8df
PA
3698
3699 old_chain = save_current_space_and_thread ();
3700
35df4500 3701 switch_to_program_space_and_thread (bl->pspace);
6c95b8df 3702
35df4500 3703 ret = remove_breakpoint_1 (bl, is);
6c95b8df
PA
3704
3705 do_cleanups (old_chain);
3706 return ret;
3707}
3708
c906108c
SS
3709/* Clear the "inserted" flag in all breakpoints. */
3710
25b22b0a 3711void
fba45db2 3712mark_breakpoints_out (void)
c906108c 3713{
35df4500 3714 struct bp_location *bl, **blp_tmp;
c906108c 3715
35df4500
TJB
3716 ALL_BP_LOCATIONS (bl, blp_tmp)
3717 if (bl->pspace == current_program_space)
3718 bl->inserted = 0;
c906108c
SS
3719}
3720
53a5351d
JM
3721/* Clear the "inserted" flag in all breakpoints and delete any
3722 breakpoints which should go away between runs of the program.
c906108c
SS
3723
3724 Plus other such housekeeping that has to be done for breakpoints
3725 between runs.
3726
53a5351d
JM
3727 Note: this function gets called at the end of a run (by
3728 generic_mourn_inferior) and when a run begins (by
4a64f543 3729 init_wait_for_inferior). */
c906108c
SS
3730
3731
3732
3733void
fba45db2 3734breakpoint_init_inferior (enum inf_context context)
c906108c 3735{
35df4500
TJB
3736 struct breakpoint *b, *b_tmp;
3737 struct bp_location *bl, **blp_tmp;
1c5cfe86 3738 int ix;
6c95b8df 3739 struct program_space *pspace = current_program_space;
c906108c 3740
50c71eaf
PA
3741 /* If breakpoint locations are shared across processes, then there's
3742 nothing to do. */
f5656ead 3743 if (gdbarch_has_global_breakpoints (target_gdbarch ()))
50c71eaf
PA
3744 return;
3745
35df4500 3746 ALL_BP_LOCATIONS (bl, blp_tmp)
6c95b8df 3747 {
35df4500
TJB
3748 /* ALL_BP_LOCATIONS bp_location has BL->OWNER always non-NULL. */
3749 if (bl->pspace == pspace
3750 && bl->owner->enable_state != bp_permanent)
3751 bl->inserted = 0;
6c95b8df 3752 }
075f6582 3753
35df4500 3754 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 3755 {
6c95b8df
PA
3756 if (b->loc && b->loc->pspace != pspace)
3757 continue;
3758
c5aa993b
JM
3759 switch (b->type)
3760 {
3761 case bp_call_dummy:
e2e4d78b 3762 case bp_longjmp_call_dummy:
c906108c 3763
c5aa993b 3764 /* If the call dummy breakpoint is at the entry point it will
ab92d69b
PA
3765 cause problems when the inferior is rerun, so we better get
3766 rid of it. */
3767
3768 case bp_watchpoint_scope:
3769
3770 /* Also get rid of scope breakpoints. */
3771
3772 case bp_shlib_event:
3773
3774 /* Also remove solib event breakpoints. Their addresses may
3775 have changed since the last time we ran the program.
3776 Actually we may now be debugging against different target;
3777 and so the solib backend that installed this breakpoint may
3778 not be used in by the target. E.g.,
3779
3780 (gdb) file prog-linux
3781 (gdb) run # native linux target
3782 ...
3783 (gdb) kill
3784 (gdb) file prog-win.exe
3785 (gdb) tar rem :9999 # remote Windows gdbserver.
3786 */
c906108c 3787
f59f708a
PA
3788 case bp_step_resume:
3789
3790 /* Also remove step-resume breakpoints. */
3791
c5aa993b
JM
3792 delete_breakpoint (b);
3793 break;
c906108c 3794
c5aa993b
JM
3795 case bp_watchpoint:
3796 case bp_hardware_watchpoint:
3797 case bp_read_watchpoint:
3798 case bp_access_watchpoint:
3a5c3e22
PA
3799 {
3800 struct watchpoint *w = (struct watchpoint *) b;
c906108c 3801
3a5c3e22
PA
3802 /* Likewise for watchpoints on local expressions. */
3803 if (w->exp_valid_block != NULL)
3804 delete_breakpoint (b);
3805 else if (context == inf_starting)
3806 {
3807 /* Reset val field to force reread of starting value in
3808 insert_breakpoints. */
3809 if (w->val)
3810 value_free (w->val);
3811 w->val = NULL;
3812 w->val_valid = 0;
c860120c 3813 }
3a5c3e22 3814 }
c5aa993b
JM
3815 break;
3816 default:
c5aa993b
JM
3817 break;
3818 }
3819 }
1c5cfe86
PA
3820
3821 /* Get rid of the moribund locations. */
35df4500
TJB
3822 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, bl); ++ix)
3823 decref_bp_location (&bl);
1c5cfe86 3824 VEC_free (bp_location_p, moribund_locations);
c906108c
SS
3825}
3826
6c95b8df
PA
3827/* These functions concern about actual breakpoints inserted in the
3828 target --- to e.g. check if we need to do decr_pc adjustment or if
3829 we need to hop over the bkpt --- so we check for address space
3830 match, not program space. */
3831
c2c6d25f
JM
3832/* breakpoint_here_p (PC) returns non-zero if an enabled breakpoint
3833 exists at PC. It returns ordinary_breakpoint_here if it's an
3834 ordinary breakpoint, or permanent_breakpoint_here if it's a
3835 permanent breakpoint.
3836 - When continuing from a location with an ordinary breakpoint, we
3837 actually single step once before calling insert_breakpoints.
e5dd4106 3838 - When continuing from a location with a permanent breakpoint, we
c2c6d25f
JM
3839 need to use the `SKIP_PERMANENT_BREAKPOINT' macro, provided by
3840 the target, to advance the PC past the breakpoint. */
c906108c 3841
c2c6d25f 3842enum breakpoint_here
6c95b8df 3843breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
c906108c 3844{
35df4500 3845 struct bp_location *bl, **blp_tmp;
c2c6d25f 3846 int any_breakpoint_here = 0;
c906108c 3847
35df4500 3848 ALL_BP_LOCATIONS (bl, blp_tmp)
075f6582 3849 {
35df4500
TJB
3850 if (bl->loc_type != bp_loc_software_breakpoint
3851 && bl->loc_type != bp_loc_hardware_breakpoint)
075f6582
DJ
3852 continue;
3853
f1310107 3854 /* ALL_BP_LOCATIONS bp_location has BL->OWNER always non-NULL. */
35df4500
TJB
3855 if ((breakpoint_enabled (bl->owner)
3856 || bl->owner->enable_state == bp_permanent)
f1310107 3857 && breakpoint_location_address_match (bl, aspace, pc))
075f6582
DJ
3858 {
3859 if (overlay_debugging
35df4500
TJB
3860 && section_is_overlay (bl->section)
3861 && !section_is_mapped (bl->section))
075f6582 3862 continue; /* unmapped overlay -- can't be a match */
35df4500 3863 else if (bl->owner->enable_state == bp_permanent)
075f6582
DJ
3864 return permanent_breakpoint_here;
3865 else
3866 any_breakpoint_here = 1;
3867 }
3868 }
c906108c 3869
c2c6d25f 3870 return any_breakpoint_here ? ordinary_breakpoint_here : 0;
c906108c
SS
3871}
3872
1c5cfe86
PA
3873/* Return true if there's a moribund breakpoint at PC. */
3874
3875int
6c95b8df 3876moribund_breakpoint_here_p (struct address_space *aspace, CORE_ADDR pc)
1c5cfe86
PA
3877{
3878 struct bp_location *loc;
3879 int ix;
3880
3881 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
f1310107 3882 if (breakpoint_location_address_match (loc, aspace, pc))
1c5cfe86
PA
3883 return 1;
3884
3885 return 0;
3886}
c2c6d25f 3887
c36b740a 3888/* Returns non-zero if there's a breakpoint inserted at PC, which is
4a64f543
MS
3889 inserted using regular breakpoint_chain / bp_location array
3890 mechanism. This does not check for single-step breakpoints, which
3891 are inserted and removed using direct target manipulation. */
c906108c
SS
3892
3893int
4a64f543
MS
3894regular_breakpoint_inserted_here_p (struct address_space *aspace,
3895 CORE_ADDR pc)
c906108c 3896{
35df4500 3897 struct bp_location *bl, **blp_tmp;
c906108c 3898
35df4500 3899 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 3900 {
35df4500
TJB
3901 if (bl->loc_type != bp_loc_software_breakpoint
3902 && bl->loc_type != bp_loc_hardware_breakpoint)
075f6582
DJ
3903 continue;
3904
35df4500 3905 if (bl->inserted
f1310107 3906 && breakpoint_location_address_match (bl, aspace, pc))
075f6582
DJ
3907 {
3908 if (overlay_debugging
35df4500
TJB
3909 && section_is_overlay (bl->section)
3910 && !section_is_mapped (bl->section))
075f6582
DJ
3911 continue; /* unmapped overlay -- can't be a match */
3912 else
3913 return 1;
3914 }
c5aa993b 3915 }
c36b740a
VP
3916 return 0;
3917}
3918
3919/* Returns non-zero iff there's either regular breakpoint
3920 or a single step breakpoint inserted at PC. */
3921
3922int
6c95b8df 3923breakpoint_inserted_here_p (struct address_space *aspace, CORE_ADDR pc)
c36b740a 3924{
6c95b8df 3925 if (regular_breakpoint_inserted_here_p (aspace, pc))
c36b740a 3926 return 1;
c906108c 3927
6c95b8df 3928 if (single_step_breakpoint_inserted_here_p (aspace, pc))
1aafd4da
UW
3929 return 1;
3930
c906108c
SS
3931 return 0;
3932}
3933
4fa8626c
DJ
3934/* This function returns non-zero iff there is a software breakpoint
3935 inserted at PC. */
3936
3937int
3e43a32a
MS
3938software_breakpoint_inserted_here_p (struct address_space *aspace,
3939 CORE_ADDR pc)
4fa8626c 3940{
35df4500 3941 struct bp_location *bl, **blp_tmp;
4fa8626c 3942
35df4500 3943 ALL_BP_LOCATIONS (bl, blp_tmp)
4fa8626c 3944 {
35df4500 3945 if (bl->loc_type != bp_loc_software_breakpoint)
4fa8626c
DJ
3946 continue;
3947
35df4500
TJB
3948 if (bl->inserted
3949 && breakpoint_address_match (bl->pspace->aspace, bl->address,
6c95b8df 3950 aspace, pc))
4fa8626c
DJ
3951 {
3952 if (overlay_debugging
35df4500
TJB
3953 && section_is_overlay (bl->section)
3954 && !section_is_mapped (bl->section))
4fa8626c
DJ
3955 continue; /* unmapped overlay -- can't be a match */
3956 else
3957 return 1;
3958 }
3959 }
3960
1aafd4da 3961 /* Also check for software single-step breakpoints. */
6c95b8df 3962 if (single_step_breakpoint_inserted_here_p (aspace, pc))
1aafd4da
UW
3963 return 1;
3964
4fa8626c
DJ
3965 return 0;
3966}
3967
9093389c
PA
3968int
3969hardware_watchpoint_inserted_in_range (struct address_space *aspace,
3970 CORE_ADDR addr, ULONGEST len)
3971{
3972 struct breakpoint *bpt;
3973
3974 ALL_BREAKPOINTS (bpt)
3975 {
3976 struct bp_location *loc;
3977
3978 if (bpt->type != bp_hardware_watchpoint
3979 && bpt->type != bp_access_watchpoint)
3980 continue;
3981
3982 if (!breakpoint_enabled (bpt))
3983 continue;
3984
3985 for (loc = bpt->loc; loc; loc = loc->next)
3986 if (loc->pspace->aspace == aspace && loc->inserted)
3987 {
3988 CORE_ADDR l, h;
3989
3990 /* Check for intersection. */
3991 l = max (loc->address, addr);
3992 h = min (loc->address + loc->length, addr + len);
3993 if (l < h)
3994 return 1;
3995 }
3996 }
3997 return 0;
3998}
3999
075f6582
DJ
4000/* breakpoint_thread_match (PC, PTID) returns true if the breakpoint at
4001 PC is valid for process/thread PTID. */
c906108c
SS
4002
4003int
6c95b8df
PA
4004breakpoint_thread_match (struct address_space *aspace, CORE_ADDR pc,
4005 ptid_t ptid)
c906108c 4006{
35df4500 4007 struct bp_location *bl, **blp_tmp;
4a306c9a 4008 /* The thread and task IDs associated to PTID, computed lazily. */
a6f1cd96 4009 int thread = -1;
4a306c9a 4010 int task = 0;
a6f1cd96 4011
35df4500 4012 ALL_BP_LOCATIONS (bl, blp_tmp)
c5aa993b 4013 {
35df4500
TJB
4014 if (bl->loc_type != bp_loc_software_breakpoint
4015 && bl->loc_type != bp_loc_hardware_breakpoint)
075f6582
DJ
4016 continue;
4017
35df4500
TJB
4018 /* ALL_BP_LOCATIONS bp_location has bl->OWNER always non-NULL. */
4019 if (!breakpoint_enabled (bl->owner)
4020 && bl->owner->enable_state != bp_permanent)
a6f1cd96
JB
4021 continue;
4022
f1310107 4023 if (!breakpoint_location_address_match (bl, aspace, pc))
a6f1cd96
JB
4024 continue;
4025
35df4500 4026 if (bl->owner->thread != -1)
075f6582 4027 {
a6f1cd96
JB
4028 /* This is a thread-specific breakpoint. Check that ptid
4029 matches that thread. If thread hasn't been computed yet,
4030 it is now time to do so. */
4031 if (thread == -1)
4032 thread = pid_to_thread_id (ptid);
35df4500 4033 if (bl->owner->thread != thread)
a6f1cd96 4034 continue;
075f6582 4035 }
a6f1cd96 4036
35df4500 4037 if (bl->owner->task != 0)
4a306c9a
JB
4038 {
4039 /* This is a task-specific breakpoint. Check that ptid
4040 matches that task. If task hasn't been computed yet,
4041 it is now time to do so. */
4042 if (task == 0)
4043 task = ada_get_task_number (ptid);
35df4500 4044 if (bl->owner->task != task)
4a306c9a
JB
4045 continue;
4046 }
4047
a6f1cd96 4048 if (overlay_debugging
35df4500
TJB
4049 && section_is_overlay (bl->section)
4050 && !section_is_mapped (bl->section))
a6f1cd96
JB
4051 continue; /* unmapped overlay -- can't be a match */
4052
4053 return 1;
c5aa993b 4054 }
c906108c
SS
4055
4056 return 0;
4057}
c906108c 4058\f
c5aa993b 4059
c906108c
SS
4060/* bpstat stuff. External routines' interfaces are documented
4061 in breakpoint.h. */
4062
4063int
c326b90e 4064is_catchpoint (struct breakpoint *ep)
c906108c 4065{
533be4dd 4066 return (ep->type == bp_catchpoint);
c906108c
SS
4067}
4068
f431efe5
PA
4069/* Frees any storage that is part of a bpstat. Does not walk the
4070 'next' chain. */
4071
4072static void
198757a8
VP
4073bpstat_free (bpstat bs)
4074{
4075 if (bs->old_val != NULL)
4076 value_free (bs->old_val);
9add0f1b 4077 decref_counted_command_line (&bs->commands);
f431efe5 4078 decref_bp_location (&bs->bp_location_at);
198757a8
VP
4079 xfree (bs);
4080}
4081
c906108c
SS
4082/* Clear a bpstat so that it says we are not at any breakpoint.
4083 Also free any storage that is part of a bpstat. */
4084
4085void
fba45db2 4086bpstat_clear (bpstat *bsp)
c906108c
SS
4087{
4088 bpstat p;
4089 bpstat q;
4090
4091 if (bsp == 0)
4092 return;
4093 p = *bsp;
4094 while (p != NULL)
4095 {
4096 q = p->next;
198757a8 4097 bpstat_free (p);
c906108c
SS
4098 p = q;
4099 }
4100 *bsp = NULL;
4101}
4102
4103/* Return a copy of a bpstat. Like "bs1 = bs2" but all storage that
4104 is part of the bpstat is copied as well. */
4105
4106bpstat
fba45db2 4107bpstat_copy (bpstat bs)
c906108c
SS
4108{
4109 bpstat p = NULL;
4110 bpstat tmp;
4111 bpstat retval = NULL;
4112
4113 if (bs == NULL)
4114 return bs;
4115
4116 for (; bs != NULL; bs = bs->next)
4117 {
4118 tmp = (bpstat) xmalloc (sizeof (*tmp));
4119 memcpy (tmp, bs, sizeof (*tmp));
9add0f1b 4120 incref_counted_command_line (tmp->commands);
f431efe5 4121 incref_bp_location (tmp->bp_location_at);
31cc81e9 4122 if (bs->old_val != NULL)
3c3185ac
JK
4123 {
4124 tmp->old_val = value_copy (bs->old_val);
4125 release_value (tmp->old_val);
4126 }
31cc81e9 4127
c906108c
SS
4128 if (p == NULL)
4129 /* This is the first thing in the chain. */
4130 retval = tmp;
4131 else
4132 p->next = tmp;
4133 p = tmp;
4134 }
4135 p->next = NULL;
4136 return retval;
4137}
4138
4a64f543 4139/* Find the bpstat associated with this breakpoint. */
c906108c
SS
4140
4141bpstat
fba45db2 4142bpstat_find_breakpoint (bpstat bsp, struct breakpoint *breakpoint)
c906108c 4143{
c5aa993b
JM
4144 if (bsp == NULL)
4145 return NULL;
c906108c 4146
c5aa993b
JM
4147 for (; bsp != NULL; bsp = bsp->next)
4148 {
f431efe5 4149 if (bsp->breakpoint_at == breakpoint)
c5aa993b
JM
4150 return bsp;
4151 }
c906108c
SS
4152 return NULL;
4153}
4154
4a64f543
MS
4155/* Put in *NUM the breakpoint number of the first breakpoint we are
4156 stopped at. *BSP upon return is a bpstat which points to the
4157 remaining breakpoints stopped at (but which is not guaranteed to be
4158 good for anything but further calls to bpstat_num).
4159
8671a17b
PA
4160 Return 0 if passed a bpstat which does not indicate any breakpoints.
4161 Return -1 if stopped at a breakpoint that has been deleted since
4162 we set it.
4163 Return 1 otherwise. */
c906108c
SS
4164
4165int
8671a17b 4166bpstat_num (bpstat *bsp, int *num)
c906108c
SS
4167{
4168 struct breakpoint *b;
4169
4170 if ((*bsp) == NULL)
4171 return 0; /* No more breakpoint values */
8671a17b 4172
4a64f543
MS
4173 /* We assume we'll never have several bpstats that correspond to a
4174 single breakpoint -- otherwise, this function might return the
4175 same number more than once and this will look ugly. */
f431efe5 4176 b = (*bsp)->breakpoint_at;
8671a17b
PA
4177 *bsp = (*bsp)->next;
4178 if (b == NULL)
4179 return -1; /* breakpoint that's been deleted since */
4180
4181 *num = b->number; /* We have its number */
4182 return 1;
c906108c
SS
4183}
4184
e93ca019 4185/* See breakpoint.h. */
c906108c
SS
4186
4187void
e93ca019 4188bpstat_clear_actions (void)
c906108c 4189{
e93ca019
JK
4190 struct thread_info *tp;
4191 bpstat bs;
4192
4193 if (ptid_equal (inferior_ptid, null_ptid))
4194 return;
4195
4196 tp = find_thread_ptid (inferior_ptid);
4197 if (tp == NULL)
4198 return;
4199
4200 for (bs = tp->control.stop_bpstat; bs != NULL; bs = bs->next)
c906108c 4201 {
9add0f1b 4202 decref_counted_command_line (&bs->commands);
abf85f46 4203
c906108c
SS
4204 if (bs->old_val != NULL)
4205 {
4206 value_free (bs->old_val);
4207 bs->old_val = NULL;
4208 }
4209 }
4210}
4211
f3b1572e
PA
4212/* Called when a command is about to proceed the inferior. */
4213
4214static void
4215breakpoint_about_to_proceed (void)
4216{
4217 if (!ptid_equal (inferior_ptid, null_ptid))
4218 {
4219 struct thread_info *tp = inferior_thread ();
4220
4221 /* Allow inferior function calls in breakpoint commands to not
4222 interrupt the command list. When the call finishes
4223 successfully, the inferior will be standing at the same
4224 breakpoint as if nothing happened. */
16c381f0 4225 if (tp->control.in_infcall)
f3b1572e
PA
4226 return;
4227 }
4228
4229 breakpoint_proceeded = 1;
4230}
4231
4a64f543
MS
4232/* Stub for cleaning up our state if we error-out of a breakpoint
4233 command. */
c906108c 4234static void
4efb68b1 4235cleanup_executing_breakpoints (void *ignore)
c906108c
SS
4236{
4237 executing_breakpoint_commands = 0;
4238}
4239
abf85f46
JK
4240/* Return non-zero iff CMD as the first line of a command sequence is `silent'
4241 or its equivalent. */
4242
4243static int
4244command_line_is_silent (struct command_line *cmd)
4245{
4246 return cmd && (strcmp ("silent", cmd->line) == 0
4247 || (xdb_commands && strcmp ("Q", cmd->line) == 0));
4248}
4249
4a64f543
MS
4250/* Execute all the commands associated with all the breakpoints at
4251 this location. Any of these commands could cause the process to
4252 proceed beyond this point, etc. We look out for such changes by
4253 checking the global "breakpoint_proceeded" after each command.
c906108c 4254
347bddb7
PA
4255 Returns true if a breakpoint command resumed the inferior. In that
4256 case, it is the caller's responsibility to recall it again with the
4257 bpstat of the current thread. */
4258
4259static int
4260bpstat_do_actions_1 (bpstat *bsp)
c906108c
SS
4261{
4262 bpstat bs;
4263 struct cleanup *old_chain;
347bddb7 4264 int again = 0;
c906108c
SS
4265
4266 /* Avoid endless recursion if a `source' command is contained
4267 in bs->commands. */
4268 if (executing_breakpoint_commands)
347bddb7 4269 return 0;
c906108c
SS
4270
4271 executing_breakpoint_commands = 1;
4272 old_chain = make_cleanup (cleanup_executing_breakpoints, 0);
4273
cf6c5ffb
TT
4274 prevent_dont_repeat ();
4275
4a64f543 4276 /* This pointer will iterate over the list of bpstat's. */
c906108c
SS
4277 bs = *bsp;
4278
4279 breakpoint_proceeded = 0;
4280 for (; bs != NULL; bs = bs->next)
4281 {
9add0f1b 4282 struct counted_command_line *ccmd;
6c50ab1c
JB
4283 struct command_line *cmd;
4284 struct cleanup *this_cmd_tree_chain;
4285
4286 /* Take ownership of the BSP's command tree, if it has one.
4287
4288 The command tree could legitimately contain commands like
4289 'step' and 'next', which call clear_proceed_status, which
4290 frees stop_bpstat's command tree. To make sure this doesn't
4291 free the tree we're executing out from under us, we need to
4292 take ownership of the tree ourselves. Since a given bpstat's
4293 commands are only executed once, we don't need to copy it; we
4294 can clear the pointer in the bpstat, and make sure we free
4295 the tree when we're done. */
9add0f1b
TT
4296 ccmd = bs->commands;
4297 bs->commands = NULL;
abf85f46
JK
4298 this_cmd_tree_chain = make_cleanup_decref_counted_command_line (&ccmd);
4299 cmd = ccmd ? ccmd->commands : NULL;
4300 if (command_line_is_silent (cmd))
4301 {
4302 /* The action has been already done by bpstat_stop_status. */
4303 cmd = cmd->next;
4304 }
6c50ab1c 4305
c906108c
SS
4306 while (cmd != NULL)
4307 {
4308 execute_control_command (cmd);
4309
4310 if (breakpoint_proceeded)
4311 break;
4312 else
4313 cmd = cmd->next;
4314 }
6c50ab1c
JB
4315
4316 /* We can free this command tree now. */
4317 do_cleanups (this_cmd_tree_chain);
4318
c906108c 4319 if (breakpoint_proceeded)
32c1e744
VP
4320 {
4321 if (target_can_async_p ())
347bddb7
PA
4322 /* If we are in async mode, then the target might be still
4323 running, not stopped at any breakpoint, so nothing for
4324 us to do here -- just return to the event loop. */
4325 ;
32c1e744
VP
4326 else
4327 /* In sync mode, when execute_control_command returns
4328 we're already standing on the next breakpoint.
347bddb7
PA
4329 Breakpoint commands for that stop were not run, since
4330 execute_command does not run breakpoint commands --
4331 only command_line_handler does, but that one is not
4332 involved in execution of breakpoint commands. So, we
4333 can now execute breakpoint commands. It should be
4334 noted that making execute_command do bpstat actions is
4335 not an option -- in this case we'll have recursive
4336 invocation of bpstat for each breakpoint with a
4337 command, and can easily blow up GDB stack. Instead, we
4338 return true, which will trigger the caller to recall us
4339 with the new stop_bpstat. */
4340 again = 1;
4341 break;
32c1e744 4342 }
c906108c 4343 }
c2b8ed2c 4344 do_cleanups (old_chain);
347bddb7
PA
4345 return again;
4346}
4347
4348void
4349bpstat_do_actions (void)
4350{
353d1d73
JK
4351 struct cleanup *cleanup_if_error = make_bpstat_clear_actions_cleanup ();
4352
347bddb7
PA
4353 /* Do any commands attached to breakpoint we are stopped at. */
4354 while (!ptid_equal (inferior_ptid, null_ptid)
4355 && target_has_execution
4356 && !is_exited (inferior_ptid)
4357 && !is_executing (inferior_ptid))
4358 /* Since in sync mode, bpstat_do_actions may resume the inferior,
4359 and only return when it is stopped at the next breakpoint, we
4360 keep doing breakpoint actions until it returns false to
4361 indicate the inferior was not resumed. */
16c381f0 4362 if (!bpstat_do_actions_1 (&inferior_thread ()->control.stop_bpstat))
347bddb7 4363 break;
353d1d73
JK
4364
4365 discard_cleanups (cleanup_if_error);
c906108c
SS
4366}
4367
fa4727a6
DJ
4368/* Print out the (old or new) value associated with a watchpoint. */
4369
4370static void
4371watchpoint_value_print (struct value *val, struct ui_file *stream)
4372{
4373 if (val == NULL)
4374 fprintf_unfiltered (stream, _("<unreadable>"));
4375 else
79a45b7d
TT
4376 {
4377 struct value_print_options opts;
4378 get_user_print_options (&opts);
4379 value_print (val, stream, &opts);
4380 }
fa4727a6
DJ
4381}
4382
e514a9d6 4383/* Generic routine for printing messages indicating why we
4a64f543 4384 stopped. The behavior of this function depends on the value
e514a9d6
JM
4385 'print_it' in the bpstat structure. Under some circumstances we
4386 may decide not to print anything here and delegate the task to
4a64f543 4387 normal_stop(). */
e514a9d6
JM
4388
4389static enum print_stop_action
4390print_bp_stop_message (bpstat bs)
4391{
4392 switch (bs->print_it)
4393 {
4394 case print_it_noop:
4a64f543 4395 /* Nothing should be printed for this bpstat entry. */
e514a9d6
JM
4396 return PRINT_UNKNOWN;
4397 break;
4398
4399 case print_it_done:
4400 /* We still want to print the frame, but we already printed the
4a64f543 4401 relevant messages. */
e514a9d6
JM
4402 return PRINT_SRC_AND_LOC;
4403 break;
4404
4405 case print_it_normal:
4f8d1dc6 4406 {
f431efe5
PA
4407 struct breakpoint *b = bs->breakpoint_at;
4408
1a6a67de
TJB
4409 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
4410 which has since been deleted. */
4411 if (b == NULL)
4412 return PRINT_UNKNOWN;
4413
348d480f
PA
4414 /* Normal case. Call the breakpoint's print_it method. */
4415 return b->ops->print_it (bs);
4f8d1dc6 4416 }
348d480f 4417 break;
3086aeae 4418
e514a9d6 4419 default:
8e65ff28 4420 internal_error (__FILE__, __LINE__,
e2e0b3e5 4421 _("print_bp_stop_message: unrecognized enum value"));
e514a9d6 4422 break;
c906108c 4423 }
c906108c
SS
4424}
4425
edcc5120
TT
4426/* A helper function that prints a shared library stopped event. */
4427
4428static void
4429print_solib_event (int is_catchpoint)
4430{
4431 int any_deleted
4432 = !VEC_empty (char_ptr, current_program_space->deleted_solibs);
4433 int any_added
4434 = !VEC_empty (so_list_ptr, current_program_space->added_solibs);
4435
4436 if (!is_catchpoint)
4437 {
4438 if (any_added || any_deleted)
4439 ui_out_text (current_uiout,
4440 _("Stopped due to shared library event:\n"));
4441 else
4442 ui_out_text (current_uiout,
4443 _("Stopped due to shared library event (no "
4444 "libraries added or removed)\n"));
4445 }
4446
4447 if (ui_out_is_mi_like_p (current_uiout))
4448 ui_out_field_string (current_uiout, "reason",
4449 async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
4450
4451 if (any_deleted)
4452 {
4453 struct cleanup *cleanup;
4454 char *name;
4455 int ix;
4456
4457 ui_out_text (current_uiout, _(" Inferior unloaded "));
4458 cleanup = make_cleanup_ui_out_list_begin_end (current_uiout,
4459 "removed");
4460 for (ix = 0;
4461 VEC_iterate (char_ptr, current_program_space->deleted_solibs,
4462 ix, name);
4463 ++ix)
4464 {
4465 if (ix > 0)
4466 ui_out_text (current_uiout, " ");
4467 ui_out_field_string (current_uiout, "library", name);
4468 ui_out_text (current_uiout, "\n");
4469 }
4470
4471 do_cleanups (cleanup);
4472 }
4473
4474 if (any_added)
4475 {
4476 struct so_list *iter;
4477 int ix;
4478 struct cleanup *cleanup;
4479
4480 ui_out_text (current_uiout, _(" Inferior loaded "));
4481 cleanup = make_cleanup_ui_out_list_begin_end (current_uiout,
4482 "added");
4483 for (ix = 0;
4484 VEC_iterate (so_list_ptr, current_program_space->added_solibs,
4485 ix, iter);
4486 ++ix)
4487 {
4488 if (ix > 0)
4489 ui_out_text (current_uiout, " ");
4490 ui_out_field_string (current_uiout, "library", iter->so_name);
4491 ui_out_text (current_uiout, "\n");
4492 }
4493
4494 do_cleanups (cleanup);
4495 }
4496}
4497
e514a9d6
JM
4498/* Print a message indicating what happened. This is called from
4499 normal_stop(). The input to this routine is the head of the bpstat
36dfb11c
TT
4500 list - a list of the eventpoints that caused this stop. KIND is
4501 the target_waitkind for the stopping event. This
e514a9d6
JM
4502 routine calls the generic print routine for printing a message
4503 about reasons for stopping. This will print (for example) the
4504 "Breakpoint n," part of the output. The return value of this
4505 routine is one of:
c906108c 4506
4a64f543 4507 PRINT_UNKNOWN: Means we printed nothing.
917317f4 4508 PRINT_SRC_AND_LOC: Means we printed something, and expect subsequent
4a64f543 4509 code to print the location. An example is
c5aa993b
JM
4510 "Breakpoint 1, " which should be followed by
4511 the location.
917317f4 4512 PRINT_SRC_ONLY: Means we printed something, but there is no need
c5aa993b
JM
4513 to also print the location part of the message.
4514 An example is the catch/throw messages, which
4a64f543 4515 don't require a location appended to the end.
917317f4 4516 PRINT_NOTHING: We have done some printing and we don't need any
4a64f543 4517 further info to be printed. */
c906108c 4518
917317f4 4519enum print_stop_action
36dfb11c 4520bpstat_print (bpstat bs, int kind)
c906108c
SS
4521{
4522 int val;
c5aa993b 4523
c906108c 4524 /* Maybe another breakpoint in the chain caused us to stop.
53a5351d
JM
4525 (Currently all watchpoints go on the bpstat whether hit or not.
4526 That probably could (should) be changed, provided care is taken
c906108c 4527 with respect to bpstat_explains_signal). */
e514a9d6
JM
4528 for (; bs; bs = bs->next)
4529 {
4530 val = print_bp_stop_message (bs);
4531 if (val == PRINT_SRC_ONLY
4532 || val == PRINT_SRC_AND_LOC
4533 || val == PRINT_NOTHING)
4534 return val;
4535 }
c906108c 4536
36dfb11c
TT
4537 /* If we had hit a shared library event breakpoint,
4538 print_bp_stop_message would print out this message. If we hit an
4539 OS-level shared library event, do the same thing. */
4540 if (kind == TARGET_WAITKIND_LOADED)
4541 {
edcc5120 4542 print_solib_event (0);
36dfb11c
TT
4543 return PRINT_NOTHING;
4544 }
4545
e514a9d6 4546 /* We reached the end of the chain, or we got a null BS to start
4a64f543 4547 with and nothing was printed. */
917317f4 4548 return PRINT_UNKNOWN;
c906108c
SS
4549}
4550
4a64f543
MS
4551/* Evaluate the expression EXP and return 1 if value is zero. This is
4552 used inside a catch_errors to evaluate the breakpoint condition.
4553 The argument is a "struct expression *" that has been cast to a
4554 "char *" to make it pass through catch_errors. */
c906108c
SS
4555
4556static int
4efb68b1 4557breakpoint_cond_eval (void *exp)
c906108c 4558{
278cd55f 4559 struct value *mark = value_mark ();
c5aa993b 4560 int i = !value_true (evaluate_expression ((struct expression *) exp));
cc59ec59 4561
c906108c
SS
4562 value_free_to_mark (mark);
4563 return i;
4564}
4565
5760d0ab 4566/* Allocate a new bpstat. Link it to the FIFO list by BS_LINK_POINTER. */
c906108c
SS
4567
4568static bpstat
5760d0ab 4569bpstat_alloc (struct bp_location *bl, bpstat **bs_link_pointer)
c906108c
SS
4570{
4571 bpstat bs;
4572
4573 bs = (bpstat) xmalloc (sizeof (*bs));
5760d0ab
JK
4574 bs->next = NULL;
4575 **bs_link_pointer = bs;
4576 *bs_link_pointer = &bs->next;
f431efe5
PA
4577 bs->breakpoint_at = bl->owner;
4578 bs->bp_location_at = bl;
4579 incref_bp_location (bl);
c906108c
SS
4580 /* If the condition is false, etc., don't do the commands. */
4581 bs->commands = NULL;
4582 bs->old_val = NULL;
4583 bs->print_it = print_it_normal;
4584 return bs;
4585}
4586\f
d983da9c
DJ
4587/* The target has stopped with waitstatus WS. Check if any hardware
4588 watchpoints have triggered, according to the target. */
4589
4590int
4591watchpoints_triggered (struct target_waitstatus *ws)
4592{
d92524f1 4593 int stopped_by_watchpoint = target_stopped_by_watchpoint ();
d983da9c
DJ
4594 CORE_ADDR addr;
4595 struct breakpoint *b;
4596
4597 if (!stopped_by_watchpoint)
4598 {
4599 /* We were not stopped by a watchpoint. Mark all watchpoints
4600 as not triggered. */
4601 ALL_BREAKPOINTS (b)
cc60f2e3 4602 if (is_hardware_watchpoint (b))
3a5c3e22
PA
4603 {
4604 struct watchpoint *w = (struct watchpoint *) b;
4605
4606 w->watchpoint_triggered = watch_triggered_no;
4607 }
d983da9c
DJ
4608
4609 return 0;
4610 }
4611
4612 if (!target_stopped_data_address (&current_target, &addr))
4613 {
4614 /* We were stopped by a watchpoint, but we don't know where.
4615 Mark all watchpoints as unknown. */
4616 ALL_BREAKPOINTS (b)
cc60f2e3 4617 if (is_hardware_watchpoint (b))
3a5c3e22
PA
4618 {
4619 struct watchpoint *w = (struct watchpoint *) b;
4620
4621 w->watchpoint_triggered = watch_triggered_unknown;
4622 }
d983da9c
DJ
4623
4624 return stopped_by_watchpoint;
4625 }
4626
4627 /* The target could report the data address. Mark watchpoints
4628 affected by this data address as triggered, and all others as not
4629 triggered. */
4630
4631 ALL_BREAKPOINTS (b)
cc60f2e3 4632 if (is_hardware_watchpoint (b))
d983da9c 4633 {
3a5c3e22 4634 struct watchpoint *w = (struct watchpoint *) b;
a5606eee 4635 struct bp_location *loc;
d983da9c 4636
3a5c3e22 4637 w->watchpoint_triggered = watch_triggered_no;
a5606eee 4638 for (loc = b->loc; loc; loc = loc->next)
9c06b0b4 4639 {
3a5c3e22 4640 if (is_masked_watchpoint (b))
9c06b0b4 4641 {
3a5c3e22
PA
4642 CORE_ADDR newaddr = addr & w->hw_wp_mask;
4643 CORE_ADDR start = loc->address & w->hw_wp_mask;
9c06b0b4
TJB
4644
4645 if (newaddr == start)
4646 {
3a5c3e22 4647 w->watchpoint_triggered = watch_triggered_yes;
9c06b0b4
TJB
4648 break;
4649 }
4650 }
4651 /* Exact match not required. Within range is sufficient. */
4652 else if (target_watchpoint_addr_within_range (&current_target,
4653 addr, loc->address,
4654 loc->length))
4655 {
3a5c3e22 4656 w->watchpoint_triggered = watch_triggered_yes;
9c06b0b4
TJB
4657 break;
4658 }
4659 }
d983da9c
DJ
4660 }
4661
4662 return 1;
4663}
4664
c906108c
SS
4665/* Possible return values for watchpoint_check (this can't be an enum
4666 because of check_errors). */
4667/* The watchpoint has been deleted. */
4668#define WP_DELETED 1
4669/* The value has changed. */
4670#define WP_VALUE_CHANGED 2
4671/* The value has not changed. */
4672#define WP_VALUE_NOT_CHANGED 3
60e1c644
PA
4673/* Ignore this watchpoint, no matter if the value changed or not. */
4674#define WP_IGNORE 4
c906108c
SS
4675
4676#define BP_TEMPFLAG 1
4677#define BP_HARDWAREFLAG 2
4678
4a64f543
MS
4679/* Evaluate watchpoint condition expression and check if its value
4680 changed.
553e4c11
JB
4681
4682 P should be a pointer to struct bpstat, but is defined as a void *
4683 in order for this function to be usable with catch_errors. */
c906108c
SS
4684
4685static int
4efb68b1 4686watchpoint_check (void *p)
c906108c
SS
4687{
4688 bpstat bs = (bpstat) p;
3a5c3e22 4689 struct watchpoint *b;
c906108c
SS
4690 struct frame_info *fr;
4691 int within_current_scope;
4692
f431efe5 4693 /* BS is built from an existing struct breakpoint. */
2bdf28a0 4694 gdb_assert (bs->breakpoint_at != NULL);
3a5c3e22 4695 b = (struct watchpoint *) bs->breakpoint_at;
d0fb5eae 4696
f6bc2008
PA
4697 /* If this is a local watchpoint, we only want to check if the
4698 watchpoint frame is in scope if the current thread is the thread
4699 that was used to create the watchpoint. */
4700 if (!watchpoint_in_thread_scope (b))
60e1c644 4701 return WP_IGNORE;
f6bc2008 4702
c906108c
SS
4703 if (b->exp_valid_block == NULL)
4704 within_current_scope = 1;
4705 else
4706 {
edb3359d
DJ
4707 struct frame_info *frame = get_current_frame ();
4708 struct gdbarch *frame_arch = get_frame_arch (frame);
4709 CORE_ADDR frame_pc = get_frame_pc (frame);
4710
4a64f543
MS
4711 /* in_function_epilogue_p() returns a non-zero value if we're
4712 still in the function but the stack frame has already been
4713 invalidated. Since we can't rely on the values of local
4714 variables after the stack has been destroyed, we are treating
4715 the watchpoint in that state as `not changed' without further
4716 checking. Don't mark watchpoints as changed if the current
4717 frame is in an epilogue - even if they are in some other
4718 frame, our view of the stack is likely to be wrong and
4719 frame_find_by_id could error out. */
a0f49112 4720 if (gdbarch_in_function_epilogue_p (frame_arch, frame_pc))
60e1c644 4721 return WP_IGNORE;
a0f49112 4722
101dcfbe 4723 fr = frame_find_by_id (b->watchpoint_frame);
c906108c 4724 within_current_scope = (fr != NULL);
69fbadd5
DJ
4725
4726 /* If we've gotten confused in the unwinder, we might have
4727 returned a frame that can't describe this variable. */
edb3359d
DJ
4728 if (within_current_scope)
4729 {
4730 struct symbol *function;
4731
4732 function = get_frame_function (fr);
4733 if (function == NULL
4734 || !contained_in (b->exp_valid_block,
4735 SYMBOL_BLOCK_VALUE (function)))
4736 within_current_scope = 0;
4737 }
69fbadd5 4738
edb3359d 4739 if (within_current_scope)
c906108c
SS
4740 /* If we end up stopping, the current frame will get selected
4741 in normal_stop. So this call to select_frame won't affect
4742 the user. */
0f7d239c 4743 select_frame (fr);
c906108c 4744 }
c5aa993b 4745
c906108c
SS
4746 if (within_current_scope)
4747 {
4a64f543
MS
4748 /* We use value_{,free_to_}mark because it could be a *long*
4749 time before we return to the command level and call
4750 free_all_values. We can't call free_all_values because we
4751 might be in the middle of evaluating a function call. */
c906108c 4752
0cf6dd15 4753 int pc = 0;
9c06b0b4 4754 struct value *mark;
fa4727a6
DJ
4755 struct value *new_val;
4756
3a5c3e22 4757 if (is_masked_watchpoint (&b->base))
9c06b0b4
TJB
4758 /* Since we don't know the exact trigger address (from
4759 stopped_data_address), just tell the user we've triggered
4760 a mask watchpoint. */
4761 return WP_VALUE_CHANGED;
4762
4763 mark = value_mark ();
0cf6dd15 4764 fetch_subexp_value (b->exp, &pc, &new_val, NULL, NULL);
218d2fc6 4765
4a64f543
MS
4766 /* We use value_equal_contents instead of value_equal because
4767 the latter coerces an array to a pointer, thus comparing just
4768 the address of the array instead of its contents. This is
4769 not what we want. */
fa4727a6 4770 if ((b->val != NULL) != (new_val != NULL)
218d2fc6 4771 || (b->val != NULL && !value_equal_contents (b->val, new_val)))
c906108c 4772 {
fa4727a6
DJ
4773 if (new_val != NULL)
4774 {
4775 release_value (new_val);
4776 value_free_to_mark (mark);
4777 }
c906108c
SS
4778 bs->old_val = b->val;
4779 b->val = new_val;
fa4727a6 4780 b->val_valid = 1;
c906108c
SS
4781 return WP_VALUE_CHANGED;
4782 }
4783 else
4784 {
60e1c644 4785 /* Nothing changed. */
c906108c 4786 value_free_to_mark (mark);
c906108c
SS
4787 return WP_VALUE_NOT_CHANGED;
4788 }
4789 }
4790 else
4791 {
79a45e25
PA
4792 struct ui_out *uiout = current_uiout;
4793
c906108c 4794 /* This seems like the only logical thing to do because
c5aa993b
JM
4795 if we temporarily ignored the watchpoint, then when
4796 we reenter the block in which it is valid it contains
4797 garbage (in the case of a function, it may have two
4798 garbage values, one before and one after the prologue).
4799 So we can't even detect the first assignment to it and
4800 watch after that (since the garbage may or may not equal
4801 the first value assigned). */
348d480f
PA
4802 /* We print all the stop information in
4803 breakpoint_ops->print_it, but in this case, by the time we
4804 call breakpoint_ops->print_it this bp will be deleted
4805 already. So we have no choice but print the information
4806 here. */
9dc5e2a9 4807 if (ui_out_is_mi_like_p (uiout))
034dad6f
BR
4808 ui_out_field_string
4809 (uiout, "reason", async_reason_lookup (EXEC_ASYNC_WATCHPOINT_SCOPE));
8b93c638 4810 ui_out_text (uiout, "\nWatchpoint ");
3a5c3e22 4811 ui_out_field_int (uiout, "wpnum", b->base.number);
3e43a32a
MS
4812 ui_out_text (uiout,
4813 " deleted because the program has left the block in\n\
8b93c638 4814which its expression is valid.\n");
4ce44c66 4815
cdac0397 4816 /* Make sure the watchpoint's commands aren't executed. */
3a5c3e22 4817 decref_counted_command_line (&b->base.commands);
d0fb5eae 4818 watchpoint_del_at_next_stop (b);
c906108c
SS
4819
4820 return WP_DELETED;
4821 }
4822}
4823
18a18393 4824/* Return true if it looks like target has stopped due to hitting
348d480f
PA
4825 breakpoint location BL. This function does not check if we should
4826 stop, only if BL explains the stop. */
4827
18a18393 4828static int
6c95b8df 4829bpstat_check_location (const struct bp_location *bl,
09ac7c10
TT
4830 struct address_space *aspace, CORE_ADDR bp_addr,
4831 const struct target_waitstatus *ws)
18a18393
VP
4832{
4833 struct breakpoint *b = bl->owner;
4834
348d480f 4835 /* BL is from an existing breakpoint. */
2bdf28a0
JK
4836 gdb_assert (b != NULL);
4837
09ac7c10 4838 return b->ops->breakpoint_hit (bl, aspace, bp_addr, ws);
18a18393
VP
4839}
4840
3a5c3e22
PA
4841/* Determine if the watched values have actually changed, and we
4842 should stop. If not, set BS->stop to 0. */
4843
18a18393
VP
4844static void
4845bpstat_check_watchpoint (bpstat bs)
4846{
2bdf28a0 4847 const struct bp_location *bl;
3a5c3e22 4848 struct watchpoint *b;
2bdf28a0
JK
4849
4850 /* BS is built for existing struct breakpoint. */
f431efe5 4851 bl = bs->bp_location_at;
2bdf28a0 4852 gdb_assert (bl != NULL);
3a5c3e22 4853 b = (struct watchpoint *) bs->breakpoint_at;
2bdf28a0 4854 gdb_assert (b != NULL);
18a18393 4855
18a18393 4856 {
18a18393
VP
4857 int must_check_value = 0;
4858
3a5c3e22 4859 if (b->base.type == bp_watchpoint)
18a18393
VP
4860 /* For a software watchpoint, we must always check the
4861 watched value. */
4862 must_check_value = 1;
4863 else if (b->watchpoint_triggered == watch_triggered_yes)
4864 /* We have a hardware watchpoint (read, write, or access)
4865 and the target earlier reported an address watched by
4866 this watchpoint. */
4867 must_check_value = 1;
4868 else if (b->watchpoint_triggered == watch_triggered_unknown
3a5c3e22 4869 && b->base.type == bp_hardware_watchpoint)
18a18393
VP
4870 /* We were stopped by a hardware watchpoint, but the target could
4871 not report the data address. We must check the watchpoint's
4872 value. Access and read watchpoints are out of luck; without
4873 a data address, we can't figure it out. */
4874 must_check_value = 1;
3a5c3e22 4875
18a18393
VP
4876 if (must_check_value)
4877 {
3e43a32a
MS
4878 char *message
4879 = xstrprintf ("Error evaluating expression for watchpoint %d\n",
3a5c3e22 4880 b->base.number);
18a18393
VP
4881 struct cleanup *cleanups = make_cleanup (xfree, message);
4882 int e = catch_errors (watchpoint_check, bs, message,
4883 RETURN_MASK_ALL);
4884 do_cleanups (cleanups);
4885 switch (e)
4886 {
4887 case WP_DELETED:
4888 /* We've already printed what needs to be printed. */
4889 bs->print_it = print_it_done;
4890 /* Stop. */
4891 break;
60e1c644
PA
4892 case WP_IGNORE:
4893 bs->print_it = print_it_noop;
4894 bs->stop = 0;
4895 break;
18a18393 4896 case WP_VALUE_CHANGED:
3a5c3e22 4897 if (b->base.type == bp_read_watchpoint)
18a18393 4898 {
85d721b8
PA
4899 /* There are two cases to consider here:
4900
4a64f543 4901 1. We're watching the triggered memory for reads.
85d721b8
PA
4902 In that case, trust the target, and always report
4903 the watchpoint hit to the user. Even though
4904 reads don't cause value changes, the value may
4905 have changed since the last time it was read, and
4906 since we're not trapping writes, we will not see
4907 those, and as such we should ignore our notion of
4908 old value.
4909
4a64f543 4910 2. We're watching the triggered memory for both
85d721b8
PA
4911 reads and writes. There are two ways this may
4912 happen:
4913
4a64f543 4914 2.1. This is a target that can't break on data
85d721b8
PA
4915 reads only, but can break on accesses (reads or
4916 writes), such as e.g., x86. We detect this case
4917 at the time we try to insert read watchpoints.
4918
4a64f543 4919 2.2. Otherwise, the target supports read
85d721b8
PA
4920 watchpoints, but, the user set an access or write
4921 watchpoint watching the same memory as this read
4922 watchpoint.
4923
4924 If we're watching memory writes as well as reads,
4925 ignore watchpoint hits when we find that the
4926 value hasn't changed, as reads don't cause
4927 changes. This still gives false positives when
4928 the program writes the same value to memory as
4929 what there was already in memory (we will confuse
4930 it for a read), but it's much better than
4931 nothing. */
4932
4933 int other_write_watchpoint = 0;
4934
4935 if (bl->watchpoint_type == hw_read)
4936 {
4937 struct breakpoint *other_b;
4938
4939 ALL_BREAKPOINTS (other_b)
3a5c3e22
PA
4940 if (other_b->type == bp_hardware_watchpoint
4941 || other_b->type == bp_access_watchpoint)
85d721b8 4942 {
3a5c3e22
PA
4943 struct watchpoint *other_w =
4944 (struct watchpoint *) other_b;
4945
4946 if (other_w->watchpoint_triggered
4947 == watch_triggered_yes)
4948 {
4949 other_write_watchpoint = 1;
4950 break;
4951 }
85d721b8
PA
4952 }
4953 }
4954
4955 if (other_write_watchpoint
4956 || bl->watchpoint_type == hw_access)
4957 {
4958 /* We're watching the same memory for writes,
4959 and the value changed since the last time we
4960 updated it, so this trap must be for a write.
4961 Ignore it. */
4962 bs->print_it = print_it_noop;
4963 bs->stop = 0;
4964 }
18a18393
VP
4965 }
4966 break;
4967 case WP_VALUE_NOT_CHANGED:
3a5c3e22
PA
4968 if (b->base.type == bp_hardware_watchpoint
4969 || b->base.type == bp_watchpoint)
18a18393
VP
4970 {
4971 /* Don't stop: write watchpoints shouldn't fire if
4972 the value hasn't changed. */
4973 bs->print_it = print_it_noop;
4974 bs->stop = 0;
4975 }
4976 /* Stop. */
4977 break;
4978 default:
4979 /* Can't happen. */
4980 case 0:
4981 /* Error from catch_errors. */
3a5c3e22 4982 printf_filtered (_("Watchpoint %d deleted.\n"), b->base.number);
d0fb5eae 4983 watchpoint_del_at_next_stop (b);
18a18393
VP
4984 /* We've already printed what needs to be printed. */
4985 bs->print_it = print_it_done;
4986 break;
4987 }
4988 }
4989 else /* must_check_value == 0 */
4990 {
4991 /* This is a case where some watchpoint(s) triggered, but
4992 not at the address of this watchpoint, or else no
4993 watchpoint triggered after all. So don't print
4994 anything for this watchpoint. */
4995 bs->print_it = print_it_noop;
4996 bs->stop = 0;
4997 }
4998 }
4999}
5000
5001
5002/* Check conditions (condition proper, frame, thread and ignore count)
5003 of breakpoint referred to by BS. If we should not stop for this
5004 breakpoint, set BS->stop to 0. */
f431efe5 5005
18a18393
VP
5006static void
5007bpstat_check_breakpoint_conditions (bpstat bs, ptid_t ptid)
5008{
5009 int thread_id = pid_to_thread_id (ptid);
2bdf28a0
JK
5010 const struct bp_location *bl;
5011 struct breakpoint *b;
5012
5013 /* BS is built for existing struct breakpoint. */
f431efe5 5014 bl = bs->bp_location_at;
2bdf28a0 5015 gdb_assert (bl != NULL);
f431efe5 5016 b = bs->breakpoint_at;
2bdf28a0 5017 gdb_assert (b != NULL);
18a18393 5018
b775012e
LM
5019 /* Even if the target evaluated the condition on its end and notified GDB, we
5020 need to do so again since GDB does not know if we stopped due to a
5021 breakpoint or a single step breakpoint. */
5022
18a18393 5023 if (frame_id_p (b->frame_id)
edb3359d 5024 && !frame_id_eq (b->frame_id, get_stack_frame_id (get_current_frame ())))
18a18393
VP
5025 bs->stop = 0;
5026 else if (bs->stop)
5027 {
5028 int value_is_zero = 0;
60e1c644
PA
5029 struct expression *cond;
5030
7371cf6d
PM
5031 /* Evaluate Python breakpoints that have a "stop"
5032 method implemented. */
5033 if (b->py_bp_object)
5034 bs->stop = gdbpy_should_stop (b->py_bp_object);
5035
60e1c644 5036 if (is_watchpoint (b))
3a5c3e22
PA
5037 {
5038 struct watchpoint *w = (struct watchpoint *) b;
5039
5040 cond = w->cond_exp;
5041 }
60e1c644
PA
5042 else
5043 cond = bl->cond;
5044
f431efe5 5045 if (cond && b->disposition != disp_del_at_next_stop)
18a18393 5046 {
60e1c644 5047 int within_current_scope = 1;
3a5c3e22 5048 struct watchpoint * w;
60e1c644 5049
c5bc3a77
DJ
5050 /* We use value_mark and value_free_to_mark because it could
5051 be a long time before we return to the command level and
5052 call free_all_values. We can't call free_all_values
5053 because we might be in the middle of evaluating a
5054 function call. */
5055 struct value *mark = value_mark ();
5056
3a5c3e22
PA
5057 if (is_watchpoint (b))
5058 w = (struct watchpoint *) b;
5059 else
5060 w = NULL;
5061
edb3359d
DJ
5062 /* Need to select the frame, with all that implies so that
5063 the conditions will have the right context. Because we
5064 use the frame, we will not see an inlined function's
5065 variables when we arrive at a breakpoint at the start
5066 of the inlined function; the current frame will be the
5067 call site. */
3a5c3e22 5068 if (w == NULL || w->cond_exp_valid_block == NULL)
60e1c644
PA
5069 select_frame (get_current_frame ());
5070 else
5071 {
5072 struct frame_info *frame;
5073
5074 /* For local watchpoint expressions, which particular
5075 instance of a local is being watched matters, so we
5076 keep track of the frame to evaluate the expression
5077 in. To evaluate the condition however, it doesn't
5078 really matter which instantiation of the function
5079 where the condition makes sense triggers the
5080 watchpoint. This allows an expression like "watch
5081 global if q > 10" set in `func', catch writes to
5082 global on all threads that call `func', or catch
5083 writes on all recursive calls of `func' by a single
5084 thread. We simply always evaluate the condition in
5085 the innermost frame that's executing where it makes
5086 sense to evaluate the condition. It seems
5087 intuitive. */
3a5c3e22 5088 frame = block_innermost_frame (w->cond_exp_valid_block);
60e1c644
PA
5089 if (frame != NULL)
5090 select_frame (frame);
5091 else
5092 within_current_scope = 0;
5093 }
5094 if (within_current_scope)
5095 value_is_zero
5096 = catch_errors (breakpoint_cond_eval, cond,
5097 "Error in testing breakpoint condition:\n",
5098 RETURN_MASK_ALL);
5099 else
5100 {
5101 warning (_("Watchpoint condition cannot be tested "
5102 "in the current scope"));
5103 /* If we failed to set the right context for this
5104 watchpoint, unconditionally report it. */
5105 value_is_zero = 0;
5106 }
4a64f543 5107 /* FIXME-someday, should give breakpoint #. */
c5bc3a77 5108 value_free_to_mark (mark);
18a18393 5109 }
60e1c644
PA
5110
5111 if (cond && value_is_zero)
18a18393
VP
5112 {
5113 bs->stop = 0;
5114 }
5115 else if (b->thread != -1 && b->thread != thread_id)
5116 {
5117 bs->stop = 0;
5118 }
5119 else if (b->ignore_count > 0)
5120 {
5121 b->ignore_count--;
5122 annotate_ignore_count_change ();
5123 bs->stop = 0;
4a64f543 5124 /* Increase the hit count even though we don't stop. */
18a18393 5125 ++(b->hit_count);
8d3788bd 5126 observer_notify_breakpoint_modified (b);
18a18393
VP
5127 }
5128 }
5129}
5130
5131
9709f61c 5132/* Get a bpstat associated with having just stopped at address
d983da9c 5133 BP_ADDR in thread PTID.
c906108c 5134
d983da9c 5135 Determine whether we stopped at a breakpoint, etc, or whether we
4a64f543
MS
5136 don't understand this stop. Result is a chain of bpstat's such
5137 that:
c906108c 5138
c5aa993b 5139 if we don't understand the stop, the result is a null pointer.
c906108c 5140
c5aa993b 5141 if we understand why we stopped, the result is not null.
c906108c 5142
c5aa993b
JM
5143 Each element of the chain refers to a particular breakpoint or
5144 watchpoint at which we have stopped. (We may have stopped for
5145 several reasons concurrently.)
c906108c 5146
c5aa993b
JM
5147 Each element of the chain has valid next, breakpoint_at,
5148 commands, FIXME??? fields. */
c906108c
SS
5149
5150bpstat
6c95b8df 5151bpstat_stop_status (struct address_space *aspace,
09ac7c10
TT
5152 CORE_ADDR bp_addr, ptid_t ptid,
5153 const struct target_waitstatus *ws)
c906108c 5154{
0d381245 5155 struct breakpoint *b = NULL;
afe38095 5156 struct bp_location *bl;
20874c92 5157 struct bp_location *loc;
5760d0ab
JK
5158 /* First item of allocated bpstat's. */
5159 bpstat bs_head = NULL, *bs_link = &bs_head;
c906108c 5160 /* Pointer to the last thing in the chain currently. */
5760d0ab 5161 bpstat bs;
20874c92 5162 int ix;
429374b8 5163 int need_remove_insert;
f431efe5 5164 int removed_any;
c906108c 5165
f431efe5
PA
5166 /* First, build the bpstat chain with locations that explain a
5167 target stop, while being careful to not set the target running,
5168 as that may invalidate locations (in particular watchpoint
5169 locations are recreated). Resuming will happen here with
5170 breakpoint conditions or watchpoint expressions that include
5171 inferior function calls. */
c5aa993b 5172
429374b8
JK
5173 ALL_BREAKPOINTS (b)
5174 {
5175 if (!breakpoint_enabled (b) && b->enable_state != bp_permanent)
5176 continue;
a5606eee 5177
429374b8
JK
5178 for (bl = b->loc; bl != NULL; bl = bl->next)
5179 {
4a64f543
MS
5180 /* For hardware watchpoints, we look only at the first
5181 location. The watchpoint_check function will work on the
5182 entire expression, not the individual locations. For
5183 read watchpoints, the watchpoints_triggered function has
5184 checked all locations already. */
429374b8
JK
5185 if (b->type == bp_hardware_watchpoint && bl != b->loc)
5186 break;
18a18393 5187
f6592439 5188 if (!bl->enabled || bl->shlib_disabled)
429374b8 5189 continue;
c5aa993b 5190
09ac7c10 5191 if (!bpstat_check_location (bl, aspace, bp_addr, ws))
429374b8 5192 continue;
c5aa993b 5193
4a64f543
MS
5194 /* Come here if it's a watchpoint, or if the break address
5195 matches. */
c5aa993b 5196
4a64f543
MS
5197 bs = bpstat_alloc (bl, &bs_link); /* Alloc a bpstat to
5198 explain stop. */
c5aa993b 5199
f431efe5
PA
5200 /* Assume we stop. Should we find a watchpoint that is not
5201 actually triggered, or if the condition of the breakpoint
5202 evaluates as false, we'll reset 'stop' to 0. */
429374b8
JK
5203 bs->stop = 1;
5204 bs->print = 1;
d983da9c 5205
f431efe5
PA
5206 /* If this is a scope breakpoint, mark the associated
5207 watchpoint as triggered so that we will handle the
5208 out-of-scope event. We'll get to the watchpoint next
5209 iteration. */
d0fb5eae 5210 if (b->type == bp_watchpoint_scope && b->related_breakpoint != b)
3a5c3e22
PA
5211 {
5212 struct watchpoint *w = (struct watchpoint *) b->related_breakpoint;
5213
5214 w->watchpoint_triggered = watch_triggered_yes;
5215 }
f431efe5
PA
5216 }
5217 }
5218
5219 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
5220 {
f1310107 5221 if (breakpoint_location_address_match (loc, aspace, bp_addr))
f431efe5 5222 {
5760d0ab 5223 bs = bpstat_alloc (loc, &bs_link);
f431efe5
PA
5224 /* For hits of moribund locations, we should just proceed. */
5225 bs->stop = 0;
5226 bs->print = 0;
5227 bs->print_it = print_it_noop;
5228 }
5229 }
5230
edcc5120
TT
5231 /* A bit of special processing for shlib breakpoints. We need to
5232 process solib loading here, so that the lists of loaded and
5233 unloaded libraries are correct before we handle "catch load" and
5234 "catch unload". */
5235 for (bs = bs_head; bs != NULL; bs = bs->next)
5236 {
5d268276 5237 if (bs->breakpoint_at && bs->breakpoint_at->type == bp_shlib_event)
edcc5120
TT
5238 {
5239 handle_solib_event ();
5240 break;
5241 }
5242 }
5243
f431efe5
PA
5244 /* Now go through the locations that caused the target to stop, and
5245 check whether we're interested in reporting this stop to higher
5246 layers, or whether we should resume the target transparently. */
5247
5248 removed_any = 0;
5249
5760d0ab 5250 for (bs = bs_head; bs != NULL; bs = bs->next)
f431efe5
PA
5251 {
5252 if (!bs->stop)
5253 continue;
5254
f431efe5 5255 b = bs->breakpoint_at;
348d480f
PA
5256 b->ops->check_status (bs);
5257 if (bs->stop)
28010a5d 5258 {
348d480f 5259 bpstat_check_breakpoint_conditions (bs, ptid);
f431efe5 5260
429374b8
JK
5261 if (bs->stop)
5262 {
5263 ++(b->hit_count);
8d3788bd 5264 observer_notify_breakpoint_modified (b);
c906108c 5265
4a64f543 5266 /* We will stop here. */
429374b8
JK
5267 if (b->disposition == disp_disable)
5268 {
816338b5
SS
5269 --(b->enable_count);
5270 if (b->enable_count <= 0
5271 && b->enable_state != bp_permanent)
429374b8 5272 b->enable_state = bp_disabled;
f431efe5 5273 removed_any = 1;
429374b8
JK
5274 }
5275 if (b->silent)
5276 bs->print = 0;
5277 bs->commands = b->commands;
9add0f1b 5278 incref_counted_command_line (bs->commands);
abf85f46
JK
5279 if (command_line_is_silent (bs->commands
5280 ? bs->commands->commands : NULL))
5281 bs->print = 0;
429374b8
JK
5282 }
5283
348d480f 5284 }
a9b3a50f
PA
5285
5286 /* Print nothing for this entry if we don't stop or don't
5287 print. */
5288 if (!bs->stop || !bs->print)
5289 bs->print_it = print_it_noop;
429374b8 5290 }
876fa593 5291
d983da9c
DJ
5292 /* If we aren't stopping, the value of some hardware watchpoint may
5293 not have changed, but the intermediate memory locations we are
5294 watching may have. Don't bother if we're stopping; this will get
5295 done later. */
d832cb68 5296 need_remove_insert = 0;
5760d0ab
JK
5297 if (! bpstat_causes_stop (bs_head))
5298 for (bs = bs_head; bs != NULL; bs = bs->next)
d983da9c 5299 if (!bs->stop
f431efe5
PA
5300 && bs->breakpoint_at
5301 && is_hardware_watchpoint (bs->breakpoint_at))
d983da9c 5302 {
3a5c3e22
PA
5303 struct watchpoint *w = (struct watchpoint *) bs->breakpoint_at;
5304
5305 update_watchpoint (w, 0 /* don't reparse. */);
d832cb68 5306 need_remove_insert = 1;
d983da9c
DJ
5307 }
5308
d832cb68 5309 if (need_remove_insert)
2d134ed3 5310 update_global_location_list (1);
f431efe5
PA
5311 else if (removed_any)
5312 update_global_location_list (0);
d832cb68 5313
5760d0ab 5314 return bs_head;
c906108c 5315}
628fe4e4
JK
5316
5317static void
5318handle_jit_event (void)
5319{
5320 struct frame_info *frame;
5321 struct gdbarch *gdbarch;
5322
5323 /* Switch terminal for any messages produced by
5324 breakpoint_re_set. */
5325 target_terminal_ours_for_output ();
5326
5327 frame = get_current_frame ();
5328 gdbarch = get_frame_arch (frame);
5329
5330 jit_event_handler (gdbarch);
5331
5332 target_terminal_inferior ();
5333}
5334
edcc5120
TT
5335/* Handle an solib event by calling solib_add. */
5336
5337void
5338handle_solib_event (void)
5339{
5340 clear_program_space_solib_cache (current_inferior ()->pspace);
5341
5342 /* Check for any newly added shared libraries if we're supposed to
5343 be adding them automatically. Switch terminal for any messages
5344 produced by breakpoint_re_set. */
5345 target_terminal_ours_for_output ();
5346#ifdef SOLIB_ADD
5347 SOLIB_ADD (NULL, 0, &current_target, auto_solib_add);
5348#else
5349 solib_add (NULL, 0, &current_target, auto_solib_add);
5350#endif
5351 target_terminal_inferior ();
5352}
5353
628fe4e4
JK
5354/* Prepare WHAT final decision for infrun. */
5355
5356/* Decide what infrun needs to do with this bpstat. */
5357
c906108c 5358struct bpstat_what
0e30163f 5359bpstat_what (bpstat bs_head)
c906108c 5360{
c906108c 5361 struct bpstat_what retval;
628fe4e4 5362 int jit_event = 0;
0e30163f 5363 bpstat bs;
c906108c 5364
628fe4e4 5365 retval.main_action = BPSTAT_WHAT_KEEP_CHECKING;
aa7d318d 5366 retval.call_dummy = STOP_NONE;
186c406b 5367 retval.is_longjmp = 0;
628fe4e4 5368
0e30163f 5369 for (bs = bs_head; bs != NULL; bs = bs->next)
c906108c 5370 {
628fe4e4
JK
5371 /* Extract this BS's action. After processing each BS, we check
5372 if its action overrides all we've seem so far. */
5373 enum bpstat_what_main_action this_action = BPSTAT_WHAT_KEEP_CHECKING;
5374 enum bptype bptype;
5375
c906108c 5376 if (bs->breakpoint_at == NULL)
628fe4e4
JK
5377 {
5378 /* I suspect this can happen if it was a momentary
5379 breakpoint which has since been deleted. */
5380 bptype = bp_none;
5381 }
20874c92 5382 else
f431efe5 5383 bptype = bs->breakpoint_at->type;
628fe4e4
JK
5384
5385 switch (bptype)
c906108c
SS
5386 {
5387 case bp_none:
628fe4e4 5388 break;
c906108c
SS
5389 case bp_breakpoint:
5390 case bp_hardware_breakpoint:
5391 case bp_until:
5392 case bp_finish:
a9b3a50f 5393 case bp_shlib_event:
c906108c
SS
5394 if (bs->stop)
5395 {
5396 if (bs->print)
628fe4e4 5397 this_action = BPSTAT_WHAT_STOP_NOISY;
c906108c 5398 else
628fe4e4 5399 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c
SS
5400 }
5401 else
628fe4e4 5402 this_action = BPSTAT_WHAT_SINGLE;
c906108c
SS
5403 break;
5404 case bp_watchpoint:
5405 case bp_hardware_watchpoint:
5406 case bp_read_watchpoint:
5407 case bp_access_watchpoint:
5408 if (bs->stop)
5409 {
5410 if (bs->print)
628fe4e4 5411 this_action = BPSTAT_WHAT_STOP_NOISY;
c906108c 5412 else
628fe4e4 5413 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c
SS
5414 }
5415 else
628fe4e4
JK
5416 {
5417 /* There was a watchpoint, but we're not stopping.
5418 This requires no further action. */
5419 }
c906108c
SS
5420 break;
5421 case bp_longjmp:
e2e4d78b 5422 case bp_longjmp_call_dummy:
186c406b 5423 case bp_exception:
628fe4e4 5424 this_action = BPSTAT_WHAT_SET_LONGJMP_RESUME;
e2e4d78b 5425 retval.is_longjmp = bptype != bp_exception;
c906108c
SS
5426 break;
5427 case bp_longjmp_resume:
186c406b 5428 case bp_exception_resume:
628fe4e4 5429 this_action = BPSTAT_WHAT_CLEAR_LONGJMP_RESUME;
186c406b 5430 retval.is_longjmp = bptype == bp_longjmp_resume;
c906108c
SS
5431 break;
5432 case bp_step_resume:
5433 if (bs->stop)
628fe4e4
JK
5434 this_action = BPSTAT_WHAT_STEP_RESUME;
5435 else
c906108c 5436 {
628fe4e4
JK
5437 /* It is for the wrong frame. */
5438 this_action = BPSTAT_WHAT_SINGLE;
c906108c 5439 }
c906108c 5440 break;
2c03e5be
PA
5441 case bp_hp_step_resume:
5442 if (bs->stop)
5443 this_action = BPSTAT_WHAT_HP_STEP_RESUME;
5444 else
5445 {
5446 /* It is for the wrong frame. */
5447 this_action = BPSTAT_WHAT_SINGLE;
5448 }
5449 break;
c906108c 5450 case bp_watchpoint_scope:
c4093a6a 5451 case bp_thread_event:
1900040c 5452 case bp_overlay_event:
0fd8e87f 5453 case bp_longjmp_master:
aa7d318d 5454 case bp_std_terminate_master:
186c406b 5455 case bp_exception_master:
628fe4e4 5456 this_action = BPSTAT_WHAT_SINGLE;
c4093a6a 5457 break;
ce78b96d 5458 case bp_catchpoint:
c5aa993b
JM
5459 if (bs->stop)
5460 {
5461 if (bs->print)
628fe4e4 5462 this_action = BPSTAT_WHAT_STOP_NOISY;
c5aa993b 5463 else
628fe4e4 5464 this_action = BPSTAT_WHAT_STOP_SILENT;
c5aa993b
JM
5465 }
5466 else
628fe4e4
JK
5467 {
5468 /* There was a catchpoint, but we're not stopping.
5469 This requires no further action. */
5470 }
5471 break;
628fe4e4
JK
5472 case bp_jit_event:
5473 jit_event = 1;
5474 this_action = BPSTAT_WHAT_SINGLE;
c5aa993b 5475 break;
c906108c 5476 case bp_call_dummy:
53a5351d
JM
5477 /* Make sure the action is stop (silent or noisy),
5478 so infrun.c pops the dummy frame. */
aa7d318d 5479 retval.call_dummy = STOP_STACK_DUMMY;
628fe4e4 5480 this_action = BPSTAT_WHAT_STOP_SILENT;
aa7d318d
TT
5481 break;
5482 case bp_std_terminate:
5483 /* Make sure the action is stop (silent or noisy),
5484 so infrun.c pops the dummy frame. */
aa7d318d 5485 retval.call_dummy = STOP_STD_TERMINATE;
628fe4e4 5486 this_action = BPSTAT_WHAT_STOP_SILENT;
c906108c 5487 break;
1042e4c0 5488 case bp_tracepoint:
7a697b8d 5489 case bp_fast_tracepoint:
0fb4aa4b 5490 case bp_static_tracepoint:
1042e4c0
SS
5491 /* Tracepoint hits should not be reported back to GDB, and
5492 if one got through somehow, it should have been filtered
5493 out already. */
5494 internal_error (__FILE__, __LINE__,
7a697b8d 5495 _("bpstat_what: tracepoint encountered"));
0e30163f
JK
5496 break;
5497 case bp_gnu_ifunc_resolver:
5498 /* Step over it (and insert bp_gnu_ifunc_resolver_return). */
5499 this_action = BPSTAT_WHAT_SINGLE;
5500 break;
5501 case bp_gnu_ifunc_resolver_return:
5502 /* The breakpoint will be removed, execution will restart from the
5503 PC of the former breakpoint. */
5504 this_action = BPSTAT_WHAT_KEEP_CHECKING;
5505 break;
e7e0cddf
SS
5506
5507 case bp_dprintf:
5508 this_action = BPSTAT_WHAT_STOP_SILENT;
5509 break;
5510
628fe4e4
JK
5511 default:
5512 internal_error (__FILE__, __LINE__,
5513 _("bpstat_what: unhandled bptype %d"), (int) bptype);
c906108c 5514 }
628fe4e4
JK
5515
5516 retval.main_action = max (retval.main_action, this_action);
c906108c 5517 }
628fe4e4 5518
0e30163f
JK
5519 /* These operations may affect the bs->breakpoint_at state so they are
5520 delayed after MAIN_ACTION is decided above. */
5521
628fe4e4
JK
5522 if (jit_event)
5523 {
5524 if (debug_infrun)
5525 fprintf_unfiltered (gdb_stdlog, "bpstat_what: bp_jit_event\n");
5526
5527 handle_jit_event ();
5528 }
5529
0e30163f
JK
5530 for (bs = bs_head; bs != NULL; bs = bs->next)
5531 {
5532 struct breakpoint *b = bs->breakpoint_at;
5533
5534 if (b == NULL)
5535 continue;
5536 switch (b->type)
5537 {
5538 case bp_gnu_ifunc_resolver:
5539 gnu_ifunc_resolver_stop (b);
5540 break;
5541 case bp_gnu_ifunc_resolver_return:
5542 gnu_ifunc_resolver_return_stop (b);
5543 break;
5544 }
5545 }
5546
c906108c
SS
5547 return retval;
5548}
5549
5550/* Nonzero if we should step constantly (e.g. watchpoints on machines
5551 without hardware support). This isn't related to a specific bpstat,
5552 just to things like whether watchpoints are set. */
5553
c5aa993b 5554int
fba45db2 5555bpstat_should_step (void)
c906108c
SS
5556{
5557 struct breakpoint *b;
cc59ec59 5558
c906108c 5559 ALL_BREAKPOINTS (b)
717a8278 5560 if (breakpoint_enabled (b) && b->type == bp_watchpoint && b->loc != NULL)
3172dc30 5561 return 1;
c906108c
SS
5562 return 0;
5563}
5564
67822962
PA
5565int
5566bpstat_causes_stop (bpstat bs)
5567{
5568 for (; bs != NULL; bs = bs->next)
5569 if (bs->stop)
5570 return 1;
5571
5572 return 0;
5573}
5574
c906108c 5575\f
c5aa993b 5576
170b53b2
UW
5577/* Compute a string of spaces suitable to indent the next line
5578 so it starts at the position corresponding to the table column
5579 named COL_NAME in the currently active table of UIOUT. */
5580
5581static char *
5582wrap_indent_at_field (struct ui_out *uiout, const char *col_name)
5583{
5584 static char wrap_indent[80];
5585 int i, total_width, width, align;
5586 char *text;
5587
5588 total_width = 0;
5589 for (i = 1; ui_out_query_field (uiout, i, &width, &align, &text); i++)
5590 {
5591 if (strcmp (text, col_name) == 0)
5592 {
5593 gdb_assert (total_width < sizeof wrap_indent);
5594 memset (wrap_indent, ' ', total_width);
5595 wrap_indent[total_width] = 0;
5596
5597 return wrap_indent;
5598 }
5599
5600 total_width += width + 1;
5601 }
5602
5603 return NULL;
5604}
5605
b775012e
LM
5606/* Determine if the locations of this breakpoint will have their conditions
5607 evaluated by the target, host or a mix of both. Returns the following:
5608
5609 "host": Host evals condition.
5610 "host or target": Host or Target evals condition.
5611 "target": Target evals condition.
5612*/
5613
5614static const char *
5615bp_condition_evaluator (struct breakpoint *b)
5616{
5617 struct bp_location *bl;
5618 char host_evals = 0;
5619 char target_evals = 0;
5620
5621 if (!b)
5622 return NULL;
5623
5624 if (!is_breakpoint (b))
5625 return NULL;
5626
5627 if (gdb_evaluates_breakpoint_condition_p ()
5628 || !target_supports_evaluation_of_breakpoint_conditions ())
5629 return condition_evaluation_host;
5630
5631 for (bl = b->loc; bl; bl = bl->next)
5632 {
5633 if (bl->cond_bytecode)
5634 target_evals++;
5635 else
5636 host_evals++;
5637 }
5638
5639 if (host_evals && target_evals)
5640 return condition_evaluation_both;
5641 else if (target_evals)
5642 return condition_evaluation_target;
5643 else
5644 return condition_evaluation_host;
5645}
5646
5647/* Determine the breakpoint location's condition evaluator. This is
5648 similar to bp_condition_evaluator, but for locations. */
5649
5650static const char *
5651bp_location_condition_evaluator (struct bp_location *bl)
5652{
5653 if (bl && !is_breakpoint (bl->owner))
5654 return NULL;
5655
5656 if (gdb_evaluates_breakpoint_condition_p ()
5657 || !target_supports_evaluation_of_breakpoint_conditions ())
5658 return condition_evaluation_host;
5659
5660 if (bl && bl->cond_bytecode)
5661 return condition_evaluation_target;
5662 else
5663 return condition_evaluation_host;
5664}
5665
859825b8
JK
5666/* Print the LOC location out of the list of B->LOC locations. */
5667
170b53b2
UW
5668static void
5669print_breakpoint_location (struct breakpoint *b,
5670 struct bp_location *loc)
0d381245 5671{
79a45e25 5672 struct ui_out *uiout = current_uiout;
6c95b8df
PA
5673 struct cleanup *old_chain = save_current_program_space ();
5674
859825b8
JK
5675 if (loc != NULL && loc->shlib_disabled)
5676 loc = NULL;
5677
6c95b8df
PA
5678 if (loc != NULL)
5679 set_current_program_space (loc->pspace);
5680
56435ebe
TT
5681 if (b->display_canonical)
5682 ui_out_field_string (uiout, "what", b->addr_string);
f8eba3c6 5683 else if (loc && loc->source_file)
0d381245
VP
5684 {
5685 struct symbol *sym
5686 = find_pc_sect_function (loc->address, loc->section);
5687 if (sym)
5688 {
5689 ui_out_text (uiout, "in ");
5690 ui_out_field_string (uiout, "func",
5691 SYMBOL_PRINT_NAME (sym));
170b53b2
UW
5692 ui_out_text (uiout, " ");
5693 ui_out_wrap_hint (uiout, wrap_indent_at_field (uiout, "what"));
5694 ui_out_text (uiout, "at ");
0d381245 5695 }
f8eba3c6 5696 ui_out_field_string (uiout, "file", loc->source_file);
0d381245
VP
5697 ui_out_text (uiout, ":");
5698
5699 if (ui_out_is_mi_like_p (uiout))
5700 {
5701 struct symtab_and_line sal = find_pc_line (loc->address, 0);
0b0865da 5702 const char *fullname = symtab_to_fullname (sal.symtab);
0d381245 5703
f35a17b5 5704 ui_out_field_string (uiout, "fullname", fullname);
0d381245
VP
5705 }
5706
f8eba3c6 5707 ui_out_field_int (uiout, "line", loc->line_number);
0d381245 5708 }
859825b8 5709 else if (loc)
0d381245 5710 {
f99d8bf4
PA
5711 struct ui_file *stb = mem_fileopen ();
5712 struct cleanup *stb_chain = make_cleanup_ui_file_delete (stb);
170b53b2 5713
f99d8bf4 5714 print_address_symbolic (loc->gdbarch, loc->address, stb,
22e722e1 5715 demangle, "");
0d381245 5716 ui_out_field_stream (uiout, "at", stb);
170b53b2
UW
5717
5718 do_cleanups (stb_chain);
0d381245 5719 }
859825b8
JK
5720 else
5721 ui_out_field_string (uiout, "pending", b->addr_string);
6c95b8df 5722
b775012e
LM
5723 if (loc && is_breakpoint (b)
5724 && breakpoint_condition_evaluation_mode () == condition_evaluation_target
5725 && bp_condition_evaluator (b) == condition_evaluation_both)
5726 {
5727 ui_out_text (uiout, " (");
5728 ui_out_field_string (uiout, "evaluated-by",
5729 bp_location_condition_evaluator (loc));
5730 ui_out_text (uiout, ")");
5731 }
5732
6c95b8df 5733 do_cleanups (old_chain);
0d381245
VP
5734}
5735
269b11a2
PA
5736static const char *
5737bptype_string (enum bptype type)
c906108c 5738{
c4093a6a
JM
5739 struct ep_type_description
5740 {
5741 enum bptype type;
5742 char *description;
5743 };
5744 static struct ep_type_description bptypes[] =
c906108c 5745 {
c5aa993b
JM
5746 {bp_none, "?deleted?"},
5747 {bp_breakpoint, "breakpoint"},
c906108c 5748 {bp_hardware_breakpoint, "hw breakpoint"},
c5aa993b
JM
5749 {bp_until, "until"},
5750 {bp_finish, "finish"},
5751 {bp_watchpoint, "watchpoint"},
c906108c 5752 {bp_hardware_watchpoint, "hw watchpoint"},
c5aa993b
JM
5753 {bp_read_watchpoint, "read watchpoint"},
5754 {bp_access_watchpoint, "acc watchpoint"},
5755 {bp_longjmp, "longjmp"},
5756 {bp_longjmp_resume, "longjmp resume"},
e2e4d78b 5757 {bp_longjmp_call_dummy, "longjmp for call dummy"},
186c406b
TT
5758 {bp_exception, "exception"},
5759 {bp_exception_resume, "exception resume"},
c5aa993b 5760 {bp_step_resume, "step resume"},
2c03e5be 5761 {bp_hp_step_resume, "high-priority step resume"},
c5aa993b
JM
5762 {bp_watchpoint_scope, "watchpoint scope"},
5763 {bp_call_dummy, "call dummy"},
aa7d318d 5764 {bp_std_terminate, "std::terminate"},
c5aa993b 5765 {bp_shlib_event, "shlib events"},
c4093a6a 5766 {bp_thread_event, "thread events"},
1900040c 5767 {bp_overlay_event, "overlay events"},
0fd8e87f 5768 {bp_longjmp_master, "longjmp master"},
aa7d318d 5769 {bp_std_terminate_master, "std::terminate master"},
186c406b 5770 {bp_exception_master, "exception master"},
ce78b96d 5771 {bp_catchpoint, "catchpoint"},
1042e4c0 5772 {bp_tracepoint, "tracepoint"},
7a697b8d 5773 {bp_fast_tracepoint, "fast tracepoint"},
0fb4aa4b 5774 {bp_static_tracepoint, "static tracepoint"},
e7e0cddf 5775 {bp_dprintf, "dprintf"},
4efc6507 5776 {bp_jit_event, "jit events"},
0e30163f
JK
5777 {bp_gnu_ifunc_resolver, "STT_GNU_IFUNC resolver"},
5778 {bp_gnu_ifunc_resolver_return, "STT_GNU_IFUNC resolver return"},
c5aa993b 5779 };
269b11a2
PA
5780
5781 if (((int) type >= (sizeof (bptypes) / sizeof (bptypes[0])))
5782 || ((int) type != bptypes[(int) type].type))
5783 internal_error (__FILE__, __LINE__,
5784 _("bptypes table does not describe type #%d."),
5785 (int) type);
5786
5787 return bptypes[(int) type].description;
5788}
5789
5790/* Print B to gdb_stdout. */
5791
5792static void
5793print_one_breakpoint_location (struct breakpoint *b,
5794 struct bp_location *loc,
5795 int loc_number,
5796 struct bp_location **last_loc,
269b11a2
PA
5797 int allflag)
5798{
5799 struct command_line *l;
c2c6d25f 5800 static char bpenables[] = "nynny";
c906108c 5801
79a45e25 5802 struct ui_out *uiout = current_uiout;
0d381245
VP
5803 int header_of_multiple = 0;
5804 int part_of_multiple = (loc != NULL);
79a45b7d
TT
5805 struct value_print_options opts;
5806
5807 get_user_print_options (&opts);
0d381245
VP
5808
5809 gdb_assert (!loc || loc_number != 0);
4a64f543
MS
5810 /* See comment in print_one_breakpoint concerning treatment of
5811 breakpoints with single disabled location. */
0d381245
VP
5812 if (loc == NULL
5813 && (b->loc != NULL
5814 && (b->loc->next != NULL || !b->loc->enabled)))
5815 header_of_multiple = 1;
5816 if (loc == NULL)
5817 loc = b->loc;
5818
c4093a6a
JM
5819 annotate_record ();
5820
5821 /* 1 */
5822 annotate_field (0);
0d381245
VP
5823 if (part_of_multiple)
5824 {
5825 char *formatted;
0c6773c1 5826 formatted = xstrprintf ("%d.%d", b->number, loc_number);
0d381245
VP
5827 ui_out_field_string (uiout, "number", formatted);
5828 xfree (formatted);
5829 }
5830 else
5831 {
5832 ui_out_field_int (uiout, "number", b->number);
5833 }
c4093a6a
JM
5834
5835 /* 2 */
5836 annotate_field (1);
0d381245
VP
5837 if (part_of_multiple)
5838 ui_out_field_skip (uiout, "type");
269b11a2
PA
5839 else
5840 ui_out_field_string (uiout, "type", bptype_string (b->type));
c4093a6a
JM
5841
5842 /* 3 */
5843 annotate_field (2);
0d381245
VP
5844 if (part_of_multiple)
5845 ui_out_field_skip (uiout, "disp");
5846 else
2cec12e5 5847 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
0d381245 5848
c4093a6a
JM
5849
5850 /* 4 */
5851 annotate_field (3);
0d381245 5852 if (part_of_multiple)
54e52265 5853 ui_out_field_string (uiout, "enabled", loc->enabled ? "y" : "n");
0d381245 5854 else
4a64f543
MS
5855 ui_out_field_fmt (uiout, "enabled", "%c",
5856 bpenables[(int) b->enable_state]);
54e52265 5857 ui_out_spaces (uiout, 2);
0d381245 5858
c4093a6a
JM
5859
5860 /* 5 and 6 */
3086aeae 5861 if (b->ops != NULL && b->ops->print_one != NULL)
0d381245 5862 {
4a64f543
MS
5863 /* Although the print_one can possibly print all locations,
5864 calling it here is not likely to get any nice result. So,
5865 make sure there's just one location. */
0d381245 5866 gdb_assert (b->loc == NULL || b->loc->next == NULL);
a6d9a66e 5867 b->ops->print_one (b, last_loc);
0d381245 5868 }
3086aeae
DJ
5869 else
5870 switch (b->type)
5871 {
5872 case bp_none:
5873 internal_error (__FILE__, __LINE__,
e2e0b3e5 5874 _("print_one_breakpoint: bp_none encountered\n"));
3086aeae 5875 break;
c906108c 5876
3086aeae
DJ
5877 case bp_watchpoint:
5878 case bp_hardware_watchpoint:
5879 case bp_read_watchpoint:
5880 case bp_access_watchpoint:
3a5c3e22
PA
5881 {
5882 struct watchpoint *w = (struct watchpoint *) b;
5883
5884 /* Field 4, the address, is omitted (which makes the columns
5885 not line up too nicely with the headers, but the effect
5886 is relatively readable). */
5887 if (opts.addressprint)
5888 ui_out_field_skip (uiout, "addr");
5889 annotate_field (5);
5890 ui_out_field_string (uiout, "what", w->exp_string);
5891 }
3086aeae
DJ
5892 break;
5893
3086aeae
DJ
5894 case bp_breakpoint:
5895 case bp_hardware_breakpoint:
5896 case bp_until:
5897 case bp_finish:
5898 case bp_longjmp:
5899 case bp_longjmp_resume:
e2e4d78b 5900 case bp_longjmp_call_dummy:
186c406b
TT
5901 case bp_exception:
5902 case bp_exception_resume:
3086aeae 5903 case bp_step_resume:
2c03e5be 5904 case bp_hp_step_resume:
3086aeae
DJ
5905 case bp_watchpoint_scope:
5906 case bp_call_dummy:
aa7d318d 5907 case bp_std_terminate:
3086aeae
DJ
5908 case bp_shlib_event:
5909 case bp_thread_event:
5910 case bp_overlay_event:
0fd8e87f 5911 case bp_longjmp_master:
aa7d318d 5912 case bp_std_terminate_master:
186c406b 5913 case bp_exception_master:
1042e4c0 5914 case bp_tracepoint:
7a697b8d 5915 case bp_fast_tracepoint:
0fb4aa4b 5916 case bp_static_tracepoint:
e7e0cddf 5917 case bp_dprintf:
4efc6507 5918 case bp_jit_event:
0e30163f
JK
5919 case bp_gnu_ifunc_resolver:
5920 case bp_gnu_ifunc_resolver_return:
79a45b7d 5921 if (opts.addressprint)
3086aeae
DJ
5922 {
5923 annotate_field (4);
54e52265 5924 if (header_of_multiple)
0d381245 5925 ui_out_field_string (uiout, "addr", "<MULTIPLE>");
e9bbd7c5 5926 else if (b->loc == NULL || loc->shlib_disabled)
54e52265 5927 ui_out_field_string (uiout, "addr", "<PENDING>");
0101ce28 5928 else
5af949e3
UW
5929 ui_out_field_core_addr (uiout, "addr",
5930 loc->gdbarch, loc->address);
3086aeae
DJ
5931 }
5932 annotate_field (5);
0d381245 5933 if (!header_of_multiple)
170b53b2 5934 print_breakpoint_location (b, loc);
0d381245 5935 if (b->loc)
a6d9a66e 5936 *last_loc = b->loc;
3086aeae
DJ
5937 break;
5938 }
c906108c 5939
6c95b8df
PA
5940
5941 /* For backward compatibility, don't display inferiors unless there
5942 are several. */
5943 if (loc != NULL
5944 && !header_of_multiple
5945 && (allflag
f5656ead 5946 || (!gdbarch_has_global_breakpoints (target_gdbarch ())
6c95b8df
PA
5947 && (number_of_program_spaces () > 1
5948 || number_of_inferiors () > 1)
4a64f543
MS
5949 /* LOC is for existing B, it cannot be in
5950 moribund_locations and thus having NULL OWNER. */
6c95b8df
PA
5951 && loc->owner->type != bp_catchpoint)))
5952 {
5953 struct inferior *inf;
5954 int first = 1;
5955
5956 for (inf = inferior_list; inf != NULL; inf = inf->next)
5957 {
5958 if (inf->pspace == loc->pspace)
5959 {
5960 if (first)
5961 {
5962 first = 0;
5963 ui_out_text (uiout, " inf ");
5964 }
5965 else
5966 ui_out_text (uiout, ", ");
5967 ui_out_text (uiout, plongest (inf->num));
5968 }
5969 }
5970 }
5971
4a306c9a 5972 if (!part_of_multiple)
c4093a6a 5973 {
4a306c9a
JB
5974 if (b->thread != -1)
5975 {
5976 /* FIXME: This seems to be redundant and lost here; see the
4a64f543 5977 "stop only in" line a little further down. */
4a306c9a
JB
5978 ui_out_text (uiout, " thread ");
5979 ui_out_field_int (uiout, "thread", b->thread);
5980 }
5981 else if (b->task != 0)
5982 {
5983 ui_out_text (uiout, " task ");
5984 ui_out_field_int (uiout, "task", b->task);
5985 }
c4093a6a 5986 }
f1310107 5987
8b93c638 5988 ui_out_text (uiout, "\n");
f1310107 5989
348d480f 5990 if (!part_of_multiple)
f1310107
TJB
5991 b->ops->print_one_detail (b, uiout);
5992
0d381245 5993 if (part_of_multiple && frame_id_p (b->frame_id))
c4093a6a
JM
5994 {
5995 annotate_field (6);
8b93c638 5996 ui_out_text (uiout, "\tstop only in stack frame at ");
e5dd4106 5997 /* FIXME: cagney/2002-12-01: Shouldn't be poking around inside
818dd999 5998 the frame ID. */
5af949e3
UW
5999 ui_out_field_core_addr (uiout, "frame",
6000 b->gdbarch, b->frame_id.stack_addr);
8b93c638 6001 ui_out_text (uiout, "\n");
c4093a6a
JM
6002 }
6003
28010a5d 6004 if (!part_of_multiple && b->cond_string)
c4093a6a
JM
6005 {
6006 annotate_field (7);
d77f58be 6007 if (is_tracepoint (b))
1042e4c0
SS
6008 ui_out_text (uiout, "\ttrace only if ");
6009 else
6010 ui_out_text (uiout, "\tstop only if ");
0101ce28 6011 ui_out_field_string (uiout, "cond", b->cond_string);
b775012e
LM
6012
6013 /* Print whether the target is doing the breakpoint's condition
6014 evaluation. If GDB is doing the evaluation, don't print anything. */
6015 if (is_breakpoint (b)
6016 && breakpoint_condition_evaluation_mode ()
6017 == condition_evaluation_target)
6018 {
6019 ui_out_text (uiout, " (");
6020 ui_out_field_string (uiout, "evaluated-by",
6021 bp_condition_evaluator (b));
6022 ui_out_text (uiout, " evals)");
6023 }
0101ce28
JJ
6024 ui_out_text (uiout, "\n");
6025 }
6026
0d381245 6027 if (!part_of_multiple && b->thread != -1)
c4093a6a 6028 {
4a64f543 6029 /* FIXME should make an annotation for this. */
8b93c638
JM
6030 ui_out_text (uiout, "\tstop only in thread ");
6031 ui_out_field_int (uiout, "thread", b->thread);
6032 ui_out_text (uiout, "\n");
c4093a6a
JM
6033 }
6034
556ec64d
YQ
6035 if (!part_of_multiple)
6036 {
6037 if (b->hit_count)
31f56a27
YQ
6038 {
6039 /* FIXME should make an annotation for this. */
6040 if (is_catchpoint (b))
6041 ui_out_text (uiout, "\tcatchpoint");
6042 else if (is_tracepoint (b))
6043 ui_out_text (uiout, "\ttracepoint");
6044 else
6045 ui_out_text (uiout, "\tbreakpoint");
6046 ui_out_text (uiout, " already hit ");
6047 ui_out_field_int (uiout, "times", b->hit_count);
6048 if (b->hit_count == 1)
6049 ui_out_text (uiout, " time\n");
6050 else
6051 ui_out_text (uiout, " times\n");
6052 }
556ec64d
YQ
6053 else
6054 {
31f56a27
YQ
6055 /* Output the count also if it is zero, but only if this is mi. */
6056 if (ui_out_is_mi_like_p (uiout))
6057 ui_out_field_int (uiout, "times", b->hit_count);
556ec64d
YQ
6058 }
6059 }
8b93c638 6060
0d381245 6061 if (!part_of_multiple && b->ignore_count)
c4093a6a
JM
6062 {
6063 annotate_field (8);
8b93c638
JM
6064 ui_out_text (uiout, "\tignore next ");
6065 ui_out_field_int (uiout, "ignore", b->ignore_count);
6066 ui_out_text (uiout, " hits\n");
c4093a6a 6067 }
059fb39f 6068
816338b5
SS
6069 /* Note that an enable count of 1 corresponds to "enable once"
6070 behavior, which is reported by the combination of enablement and
6071 disposition, so we don't need to mention it here. */
6072 if (!part_of_multiple && b->enable_count > 1)
6073 {
6074 annotate_field (8);
6075 ui_out_text (uiout, "\tdisable after ");
6076 /* Tweak the wording to clarify that ignore and enable counts
6077 are distinct, and have additive effect. */
6078 if (b->ignore_count)
6079 ui_out_text (uiout, "additional ");
6080 else
6081 ui_out_text (uiout, "next ");
6082 ui_out_field_int (uiout, "enable", b->enable_count);
6083 ui_out_text (uiout, " hits\n");
6084 }
6085
f196051f
SS
6086 if (!part_of_multiple && is_tracepoint (b))
6087 {
6088 struct tracepoint *tp = (struct tracepoint *) b;
6089
6090 if (tp->traceframe_usage)
6091 {
6092 ui_out_text (uiout, "\ttrace buffer usage ");
6093 ui_out_field_int (uiout, "traceframe-usage", tp->traceframe_usage);
6094 ui_out_text (uiout, " bytes\n");
6095 }
6096 }
d3ce09f5 6097
9add0f1b 6098 l = b->commands ? b->commands->commands : NULL;
059fb39f 6099 if (!part_of_multiple && l)
c4093a6a 6100 {
3b31d625
EZ
6101 struct cleanup *script_chain;
6102
c4093a6a 6103 annotate_field (9);
3b31d625 6104 script_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "script");
8b93c638 6105 print_command_lines (uiout, l, 4);
3b31d625 6106 do_cleanups (script_chain);
c4093a6a 6107 }
d24317b4 6108
d9b3f62e 6109 if (is_tracepoint (b))
1042e4c0 6110 {
d9b3f62e
PA
6111 struct tracepoint *t = (struct tracepoint *) b;
6112
6113 if (!part_of_multiple && t->pass_count)
6114 {
6115 annotate_field (10);
6116 ui_out_text (uiout, "\tpass count ");
6117 ui_out_field_int (uiout, "pass", t->pass_count);
6118 ui_out_text (uiout, " \n");
6119 }
f2a8bc8a
YQ
6120
6121 /* Don't display it when tracepoint or tracepoint location is
6122 pending. */
6123 if (!header_of_multiple && loc != NULL && !loc->shlib_disabled)
6124 {
6125 annotate_field (11);
6126
6127 if (ui_out_is_mi_like_p (uiout))
6128 ui_out_field_string (uiout, "installed",
6129 loc->inserted ? "y" : "n");
6130 else
6131 {
6132 if (loc->inserted)
6133 ui_out_text (uiout, "\t");
6134 else
6135 ui_out_text (uiout, "\tnot ");
6136 ui_out_text (uiout, "installed on target\n");
6137 }
6138 }
1042e4c0
SS
6139 }
6140
d24317b4
VP
6141 if (ui_out_is_mi_like_p (uiout) && !part_of_multiple)
6142 {
3a5c3e22
PA
6143 if (is_watchpoint (b))
6144 {
6145 struct watchpoint *w = (struct watchpoint *) b;
6146
6147 ui_out_field_string (uiout, "original-location", w->exp_string);
6148 }
6149 else if (b->addr_string)
d24317b4 6150 ui_out_field_string (uiout, "original-location", b->addr_string);
d24317b4 6151 }
c4093a6a 6152}
c5aa993b 6153
0d381245
VP
6154static void
6155print_one_breakpoint (struct breakpoint *b,
4a64f543 6156 struct bp_location **last_loc,
6c95b8df 6157 int allflag)
0d381245 6158{
8d3788bd 6159 struct cleanup *bkpt_chain;
79a45e25 6160 struct ui_out *uiout = current_uiout;
8d3788bd
VP
6161
6162 bkpt_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "bkpt");
6163
12c5a436 6164 print_one_breakpoint_location (b, NULL, 0, last_loc, allflag);
8d3788bd 6165 do_cleanups (bkpt_chain);
0d381245
VP
6166
6167 /* If this breakpoint has custom print function,
6168 it's already printed. Otherwise, print individual
6169 locations, if any. */
6170 if (b->ops == NULL || b->ops->print_one == NULL)
6171 {
4a64f543
MS
6172 /* If breakpoint has a single location that is disabled, we
6173 print it as if it had several locations, since otherwise it's
6174 hard to represent "breakpoint enabled, location disabled"
6175 situation.
6176
6177 Note that while hardware watchpoints have several locations
a3be7890 6178 internally, that's not a property exposed to user. */
0d381245 6179 if (b->loc
a5606eee 6180 && !is_hardware_watchpoint (b)
8d3788bd 6181 && (b->loc->next || !b->loc->enabled))
0d381245
VP
6182 {
6183 struct bp_location *loc;
6184 int n = 1;
8d3788bd 6185
0d381245 6186 for (loc = b->loc; loc; loc = loc->next, ++n)
8d3788bd
VP
6187 {
6188 struct cleanup *inner2 =
6189 make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
6190 print_one_breakpoint_location (b, loc, n, last_loc, allflag);
6191 do_cleanups (inner2);
6192 }
0d381245
VP
6193 }
6194 }
6195}
6196
a6d9a66e
UW
6197static int
6198breakpoint_address_bits (struct breakpoint *b)
6199{
6200 int print_address_bits = 0;
6201 struct bp_location *loc;
6202
6203 for (loc = b->loc; loc; loc = loc->next)
6204 {
c7437ca6
PA
6205 int addr_bit;
6206
6207 /* Software watchpoints that aren't watching memory don't have
6208 an address to print. */
6209 if (b->type == bp_watchpoint && loc->watchpoint_type == -1)
6210 continue;
6211
6212 addr_bit = gdbarch_addr_bit (loc->gdbarch);
a6d9a66e
UW
6213 if (addr_bit > print_address_bits)
6214 print_address_bits = addr_bit;
6215 }
6216
6217 return print_address_bits;
6218}
0d381245 6219
c4093a6a
JM
6220struct captured_breakpoint_query_args
6221 {
6222 int bnum;
6223 };
c5aa993b 6224
c4093a6a 6225static int
2b65245e 6226do_captured_breakpoint_query (struct ui_out *uiout, void *data)
c4093a6a
JM
6227{
6228 struct captured_breakpoint_query_args *args = data;
52f0bd74 6229 struct breakpoint *b;
a6d9a66e 6230 struct bp_location *dummy_loc = NULL;
cc59ec59 6231
c4093a6a
JM
6232 ALL_BREAKPOINTS (b)
6233 {
6234 if (args->bnum == b->number)
c5aa993b 6235 {
12c5a436 6236 print_one_breakpoint (b, &dummy_loc, 0);
c4093a6a 6237 return GDB_RC_OK;
c5aa993b 6238 }
c4093a6a
JM
6239 }
6240 return GDB_RC_NONE;
6241}
c5aa993b 6242
c4093a6a 6243enum gdb_rc
4a64f543
MS
6244gdb_breakpoint_query (struct ui_out *uiout, int bnum,
6245 char **error_message)
c4093a6a
JM
6246{
6247 struct captured_breakpoint_query_args args;
cc59ec59 6248
c4093a6a
JM
6249 args.bnum = bnum;
6250 /* For the moment we don't trust print_one_breakpoint() to not throw
4a64f543 6251 an error. */
b0b13bb4
DJ
6252 if (catch_exceptions_with_msg (uiout, do_captured_breakpoint_query, &args,
6253 error_message, RETURN_MASK_ALL) < 0)
6254 return GDB_RC_FAIL;
6255 else
6256 return GDB_RC_OK;
c4093a6a 6257}
c5aa993b 6258
09d682a4
TT
6259/* Return true if this breakpoint was set by the user, false if it is
6260 internal or momentary. */
6261
6262int
6263user_breakpoint_p (struct breakpoint *b)
6264{
46c6471b 6265 return b->number > 0;
09d682a4
TT
6266}
6267
7f3b0473 6268/* Print information on user settable breakpoint (watchpoint, etc)
d77f58be
SS
6269 number BNUM. If BNUM is -1 print all user-settable breakpoints.
6270 If ALLFLAG is non-zero, include non-user-settable breakpoints. If
6271 FILTER is non-NULL, call it on each breakpoint and only include the
6272 ones for which it returns non-zero. Return the total number of
6273 breakpoints listed. */
c906108c 6274
d77f58be 6275static int
e5a67952 6276breakpoint_1 (char *args, int allflag,
4a64f543 6277 int (*filter) (const struct breakpoint *))
c4093a6a 6278{
52f0bd74 6279 struct breakpoint *b;
a6d9a66e 6280 struct bp_location *last_loc = NULL;
7f3b0473 6281 int nr_printable_breakpoints;
3b31d625 6282 struct cleanup *bkpttbl_chain;
79a45b7d 6283 struct value_print_options opts;
a6d9a66e 6284 int print_address_bits = 0;
269b11a2 6285 int print_type_col_width = 14;
79a45e25 6286 struct ui_out *uiout = current_uiout;
269b11a2 6287
79a45b7d
TT
6288 get_user_print_options (&opts);
6289
4a64f543
MS
6290 /* Compute the number of rows in the table, as well as the size
6291 required for address fields. */
7f3b0473
AC
6292 nr_printable_breakpoints = 0;
6293 ALL_BREAKPOINTS (b)
e5a67952
MS
6294 {
6295 /* If we have a filter, only list the breakpoints it accepts. */
6296 if (filter && !filter (b))
6297 continue;
6298
6299 /* If we have an "args" string, it is a list of breakpoints to
6300 accept. Skip the others. */
6301 if (args != NULL && *args != '\0')
6302 {
6303 if (allflag && parse_and_eval_long (args) != b->number)
6304 continue;
6305 if (!allflag && !number_is_in_list (args, b->number))
6306 continue;
6307 }
269b11a2 6308
e5a67952
MS
6309 if (allflag || user_breakpoint_p (b))
6310 {
6311 int addr_bit, type_len;
a6d9a66e 6312
e5a67952
MS
6313 addr_bit = breakpoint_address_bits (b);
6314 if (addr_bit > print_address_bits)
6315 print_address_bits = addr_bit;
269b11a2 6316
e5a67952
MS
6317 type_len = strlen (bptype_string (b->type));
6318 if (type_len > print_type_col_width)
6319 print_type_col_width = type_len;
6320
6321 nr_printable_breakpoints++;
6322 }
6323 }
7f3b0473 6324
79a45b7d 6325 if (opts.addressprint)
3b31d625 6326 bkpttbl_chain
3e43a32a
MS
6327 = make_cleanup_ui_out_table_begin_end (uiout, 6,
6328 nr_printable_breakpoints,
3b31d625 6329 "BreakpointTable");
8b93c638 6330 else
3b31d625 6331 bkpttbl_chain
3e43a32a
MS
6332 = make_cleanup_ui_out_table_begin_end (uiout, 5,
6333 nr_printable_breakpoints,
3b31d625 6334 "BreakpointTable");
8b93c638 6335
7f3b0473 6336 if (nr_printable_breakpoints > 0)
d7faa9e7
AC
6337 annotate_breakpoints_headers ();
6338 if (nr_printable_breakpoints > 0)
6339 annotate_field (0);
4a64f543 6340 ui_out_table_header (uiout, 7, ui_left, "number", "Num"); /* 1 */
d7faa9e7
AC
6341 if (nr_printable_breakpoints > 0)
6342 annotate_field (1);
269b11a2 6343 ui_out_table_header (uiout, print_type_col_width, ui_left,
4a64f543 6344 "type", "Type"); /* 2 */
d7faa9e7
AC
6345 if (nr_printable_breakpoints > 0)
6346 annotate_field (2);
4a64f543 6347 ui_out_table_header (uiout, 4, ui_left, "disp", "Disp"); /* 3 */
d7faa9e7
AC
6348 if (nr_printable_breakpoints > 0)
6349 annotate_field (3);
54e52265 6350 ui_out_table_header (uiout, 3, ui_left, "enabled", "Enb"); /* 4 */
79a45b7d 6351 if (opts.addressprint)
e5a67952
MS
6352 {
6353 if (nr_printable_breakpoints > 0)
6354 annotate_field (4);
6355 if (print_address_bits <= 32)
6356 ui_out_table_header (uiout, 10, ui_left,
6357 "addr", "Address"); /* 5 */
6358 else
6359 ui_out_table_header (uiout, 18, ui_left,
6360 "addr", "Address"); /* 5 */
6361 }
d7faa9e7
AC
6362 if (nr_printable_breakpoints > 0)
6363 annotate_field (5);
6364 ui_out_table_header (uiout, 40, ui_noalign, "what", "What"); /* 6 */
6365 ui_out_table_body (uiout);
6366 if (nr_printable_breakpoints > 0)
6367 annotate_breakpoints_table ();
7f3b0473 6368
c4093a6a 6369 ALL_BREAKPOINTS (b)
e5a67952
MS
6370 {
6371 QUIT;
6372 /* If we have a filter, only list the breakpoints it accepts. */
6373 if (filter && !filter (b))
6374 continue;
6375
6376 /* If we have an "args" string, it is a list of breakpoints to
6377 accept. Skip the others. */
6378
6379 if (args != NULL && *args != '\0')
6380 {
6381 if (allflag) /* maintenance info breakpoint */
6382 {
6383 if (parse_and_eval_long (args) != b->number)
6384 continue;
6385 }
6386 else /* all others */
6387 {
6388 if (!number_is_in_list (args, b->number))
6389 continue;
6390 }
6391 }
6392 /* We only print out user settable breakpoints unless the
6393 allflag is set. */
6394 if (allflag || user_breakpoint_p (b))
12c5a436 6395 print_one_breakpoint (b, &last_loc, allflag);
e5a67952
MS
6396 }
6397
3b31d625 6398 do_cleanups (bkpttbl_chain);
698384cd 6399
7f3b0473 6400 if (nr_printable_breakpoints == 0)
c906108c 6401 {
4a64f543
MS
6402 /* If there's a filter, let the caller decide how to report
6403 empty list. */
d77f58be
SS
6404 if (!filter)
6405 {
e5a67952 6406 if (args == NULL || *args == '\0')
d77f58be
SS
6407 ui_out_message (uiout, 0, "No breakpoints or watchpoints.\n");
6408 else
4a64f543 6409 ui_out_message (uiout, 0,
e5a67952
MS
6410 "No breakpoint or watchpoint matching '%s'.\n",
6411 args);
d77f58be 6412 }
c906108c
SS
6413 }
6414 else
c4093a6a 6415 {
a6d9a66e
UW
6416 if (last_loc && !server_command)
6417 set_next_address (last_loc->gdbarch, last_loc->address);
c4093a6a 6418 }
c906108c 6419
4a64f543 6420 /* FIXME? Should this be moved up so that it is only called when
c4093a6a 6421 there have been breakpoints? */
c906108c 6422 annotate_breakpoints_table_end ();
d77f58be
SS
6423
6424 return nr_printable_breakpoints;
c906108c
SS
6425}
6426
ad443146
SS
6427/* Display the value of default-collect in a way that is generally
6428 compatible with the breakpoint list. */
6429
6430static void
6431default_collect_info (void)
6432{
79a45e25
PA
6433 struct ui_out *uiout = current_uiout;
6434
ad443146
SS
6435 /* If it has no value (which is frequently the case), say nothing; a
6436 message like "No default-collect." gets in user's face when it's
6437 not wanted. */
6438 if (!*default_collect)
6439 return;
6440
6441 /* The following phrase lines up nicely with per-tracepoint collect
6442 actions. */
6443 ui_out_text (uiout, "default collect ");
6444 ui_out_field_string (uiout, "default-collect", default_collect);
6445 ui_out_text (uiout, " \n");
6446}
6447
c906108c 6448static void
e5a67952 6449breakpoints_info (char *args, int from_tty)
c906108c 6450{
e5a67952 6451 breakpoint_1 (args, 0, NULL);
ad443146
SS
6452
6453 default_collect_info ();
d77f58be
SS
6454}
6455
6456static void
e5a67952 6457watchpoints_info (char *args, int from_tty)
d77f58be 6458{
e5a67952 6459 int num_printed = breakpoint_1 (args, 0, is_watchpoint);
79a45e25 6460 struct ui_out *uiout = current_uiout;
d77f58be
SS
6461
6462 if (num_printed == 0)
6463 {
e5a67952 6464 if (args == NULL || *args == '\0')
d77f58be
SS
6465 ui_out_message (uiout, 0, "No watchpoints.\n");
6466 else
e5a67952 6467 ui_out_message (uiout, 0, "No watchpoint matching '%s'.\n", args);
d77f58be 6468 }
c906108c
SS
6469}
6470
7a292a7a 6471static void
e5a67952 6472maintenance_info_breakpoints (char *args, int from_tty)
c906108c 6473{
e5a67952 6474 breakpoint_1 (args, 1, NULL);
ad443146
SS
6475
6476 default_collect_info ();
c906108c
SS
6477}
6478
0d381245 6479static int
714835d5 6480breakpoint_has_pc (struct breakpoint *b,
6c95b8df 6481 struct program_space *pspace,
714835d5 6482 CORE_ADDR pc, struct obj_section *section)
0d381245
VP
6483{
6484 struct bp_location *bl = b->loc;
cc59ec59 6485
0d381245
VP
6486 for (; bl; bl = bl->next)
6487 {
6c95b8df
PA
6488 if (bl->pspace == pspace
6489 && bl->address == pc
0d381245
VP
6490 && (!overlay_debugging || bl->section == section))
6491 return 1;
6492 }
6493 return 0;
6494}
6495
672f9b60 6496/* Print a message describing any user-breakpoints set at PC. This
6c95b8df
PA
6497 concerns with logical breakpoints, so we match program spaces, not
6498 address spaces. */
c906108c
SS
6499
6500static void
6c95b8df
PA
6501describe_other_breakpoints (struct gdbarch *gdbarch,
6502 struct program_space *pspace, CORE_ADDR pc,
5af949e3 6503 struct obj_section *section, int thread)
c906108c 6504{
52f0bd74
AC
6505 int others = 0;
6506 struct breakpoint *b;
c906108c
SS
6507
6508 ALL_BREAKPOINTS (b)
672f9b60
KP
6509 others += (user_breakpoint_p (b)
6510 && breakpoint_has_pc (b, pspace, pc, section));
c906108c
SS
6511 if (others > 0)
6512 {
a3f17187
AC
6513 if (others == 1)
6514 printf_filtered (_("Note: breakpoint "));
6515 else /* if (others == ???) */
6516 printf_filtered (_("Note: breakpoints "));
c906108c 6517 ALL_BREAKPOINTS (b)
672f9b60 6518 if (user_breakpoint_p (b) && breakpoint_has_pc (b, pspace, pc, section))
0d381245
VP
6519 {
6520 others--;
6521 printf_filtered ("%d", b->number);
6522 if (b->thread == -1 && thread != -1)
6523 printf_filtered (" (all threads)");
6524 else if (b->thread != -1)
6525 printf_filtered (" (thread %d)", b->thread);
6526 printf_filtered ("%s%s ",
059fb39f 6527 ((b->enable_state == bp_disabled
f8eba3c6 6528 || b->enable_state == bp_call_disabled)
0d381245
VP
6529 ? " (disabled)"
6530 : b->enable_state == bp_permanent
6531 ? " (permanent)"
6532 : ""),
6533 (others > 1) ? ","
6534 : ((others == 1) ? " and" : ""));
6535 }
a3f17187 6536 printf_filtered (_("also set at pc "));
5af949e3 6537 fputs_filtered (paddress (gdbarch, pc), gdb_stdout);
c906108c
SS
6538 printf_filtered (".\n");
6539 }
6540}
6541\f
c906108c 6542
e4f237da
KB
6543/* Return true iff it is meaningful to use the address member of
6544 BPT. For some breakpoint types, the address member is irrelevant
6545 and it makes no sense to attempt to compare it to other addresses
6546 (or use it for any other purpose either).
6547
4a64f543
MS
6548 More specifically, each of the following breakpoint types will
6549 always have a zero valued address and we don't want to mark
6550 breakpoints of any of these types to be a duplicate of an actual
6551 breakpoint at address zero:
e4f237da
KB
6552
6553 bp_watchpoint
2d134ed3
PA
6554 bp_catchpoint
6555
6556*/
e4f237da
KB
6557
6558static int
6559breakpoint_address_is_meaningful (struct breakpoint *bpt)
6560{
6561 enum bptype type = bpt->type;
6562
2d134ed3
PA
6563 return (type != bp_watchpoint && type != bp_catchpoint);
6564}
6565
6566/* Assuming LOC1 and LOC2's owners are hardware watchpoints, returns
6567 true if LOC1 and LOC2 represent the same watchpoint location. */
6568
6569static int
4a64f543
MS
6570watchpoint_locations_match (struct bp_location *loc1,
6571 struct bp_location *loc2)
2d134ed3 6572{
3a5c3e22
PA
6573 struct watchpoint *w1 = (struct watchpoint *) loc1->owner;
6574 struct watchpoint *w2 = (struct watchpoint *) loc2->owner;
6575
6576 /* Both of them must exist. */
6577 gdb_assert (w1 != NULL);
6578 gdb_assert (w2 != NULL);
2bdf28a0 6579
4a64f543
MS
6580 /* If the target can evaluate the condition expression in hardware,
6581 then we we need to insert both watchpoints even if they are at
6582 the same place. Otherwise the watchpoint will only trigger when
6583 the condition of whichever watchpoint was inserted evaluates to
6584 true, not giving a chance for GDB to check the condition of the
6585 other watchpoint. */
3a5c3e22 6586 if ((w1->cond_exp
4a64f543
MS
6587 && target_can_accel_watchpoint_condition (loc1->address,
6588 loc1->length,
0cf6dd15 6589 loc1->watchpoint_type,
3a5c3e22
PA
6590 w1->cond_exp))
6591 || (w2->cond_exp
4a64f543
MS
6592 && target_can_accel_watchpoint_condition (loc2->address,
6593 loc2->length,
0cf6dd15 6594 loc2->watchpoint_type,
3a5c3e22 6595 w2->cond_exp)))
0cf6dd15
TJB
6596 return 0;
6597
85d721b8
PA
6598 /* Note that this checks the owner's type, not the location's. In
6599 case the target does not support read watchpoints, but does
6600 support access watchpoints, we'll have bp_read_watchpoint
6601 watchpoints with hw_access locations. Those should be considered
6602 duplicates of hw_read locations. The hw_read locations will
6603 become hw_access locations later. */
2d134ed3
PA
6604 return (loc1->owner->type == loc2->owner->type
6605 && loc1->pspace->aspace == loc2->pspace->aspace
6606 && loc1->address == loc2->address
6607 && loc1->length == loc2->length);
e4f237da
KB
6608}
6609
6c95b8df
PA
6610/* Returns true if {ASPACE1,ADDR1} and {ASPACE2,ADDR2} represent the
6611 same breakpoint location. In most targets, this can only be true
6612 if ASPACE1 matches ASPACE2. On targets that have global
6613 breakpoints, the address space doesn't really matter. */
6614
6615static int
6616breakpoint_address_match (struct address_space *aspace1, CORE_ADDR addr1,
6617 struct address_space *aspace2, CORE_ADDR addr2)
6618{
f5656ead 6619 return ((gdbarch_has_global_breakpoints (target_gdbarch ())
6c95b8df
PA
6620 || aspace1 == aspace2)
6621 && addr1 == addr2);
6622}
6623
f1310107
TJB
6624/* Returns true if {ASPACE2,ADDR2} falls within the range determined by
6625 {ASPACE1,ADDR1,LEN1}. In most targets, this can only be true if ASPACE1
6626 matches ASPACE2. On targets that have global breakpoints, the address
6627 space doesn't really matter. */
6628
6629static int
6630breakpoint_address_match_range (struct address_space *aspace1, CORE_ADDR addr1,
6631 int len1, struct address_space *aspace2,
6632 CORE_ADDR addr2)
6633{
f5656ead 6634 return ((gdbarch_has_global_breakpoints (target_gdbarch ())
f1310107
TJB
6635 || aspace1 == aspace2)
6636 && addr2 >= addr1 && addr2 < addr1 + len1);
6637}
6638
6639/* Returns true if {ASPACE,ADDR} matches the breakpoint BL. BL may be
6640 a ranged breakpoint. In most targets, a match happens only if ASPACE
6641 matches the breakpoint's address space. On targets that have global
6642 breakpoints, the address space doesn't really matter. */
6643
6644static int
6645breakpoint_location_address_match (struct bp_location *bl,
6646 struct address_space *aspace,
6647 CORE_ADDR addr)
6648{
6649 return (breakpoint_address_match (bl->pspace->aspace, bl->address,
6650 aspace, addr)
6651 || (bl->length
6652 && breakpoint_address_match_range (bl->pspace->aspace,
6653 bl->address, bl->length,
6654 aspace, addr)));
6655}
6656
1e4d1764
YQ
6657/* If LOC1 and LOC2's owners are not tracepoints, returns false directly.
6658 Then, if LOC1 and LOC2 represent the same tracepoint location, returns
6659 true, otherwise returns false. */
6660
6661static int
6662tracepoint_locations_match (struct bp_location *loc1,
6663 struct bp_location *loc2)
6664{
6665 if (is_tracepoint (loc1->owner) && is_tracepoint (loc2->owner))
6666 /* Since tracepoint locations are never duplicated with others', tracepoint
6667 locations at the same address of different tracepoints are regarded as
6668 different locations. */
6669 return (loc1->address == loc2->address && loc1->owner == loc2->owner);
6670 else
6671 return 0;
6672}
6673
2d134ed3
PA
6674/* Assuming LOC1 and LOC2's types' have meaningful target addresses
6675 (breakpoint_address_is_meaningful), returns true if LOC1 and LOC2
6676 represent the same location. */
6677
6678static int
4a64f543
MS
6679breakpoint_locations_match (struct bp_location *loc1,
6680 struct bp_location *loc2)
2d134ed3 6681{
2bdf28a0
JK
6682 int hw_point1, hw_point2;
6683
6684 /* Both of them must not be in moribund_locations. */
6685 gdb_assert (loc1->owner != NULL);
6686 gdb_assert (loc2->owner != NULL);
6687
6688 hw_point1 = is_hardware_watchpoint (loc1->owner);
6689 hw_point2 = is_hardware_watchpoint (loc2->owner);
2d134ed3
PA
6690
6691 if (hw_point1 != hw_point2)
6692 return 0;
6693 else if (hw_point1)
6694 return watchpoint_locations_match (loc1, loc2);
1e4d1764
YQ
6695 else if (is_tracepoint (loc1->owner) || is_tracepoint (loc2->owner))
6696 return tracepoint_locations_match (loc1, loc2);
2d134ed3 6697 else
f1310107
TJB
6698 /* We compare bp_location.length in order to cover ranged breakpoints. */
6699 return (breakpoint_address_match (loc1->pspace->aspace, loc1->address,
6700 loc2->pspace->aspace, loc2->address)
6701 && loc1->length == loc2->length);
2d134ed3
PA
6702}
6703
76897487
KB
6704static void
6705breakpoint_adjustment_warning (CORE_ADDR from_addr, CORE_ADDR to_addr,
6706 int bnum, int have_bnum)
6707{
f63fbe86
MS
6708 /* The longest string possibly returned by hex_string_custom
6709 is 50 chars. These must be at least that big for safety. */
6710 char astr1[64];
6711 char astr2[64];
76897487 6712
bb599908
PH
6713 strcpy (astr1, hex_string_custom ((unsigned long) from_addr, 8));
6714 strcpy (astr2, hex_string_custom ((unsigned long) to_addr, 8));
76897487 6715 if (have_bnum)
8a3fe4f8 6716 warning (_("Breakpoint %d address previously adjusted from %s to %s."),
76897487
KB
6717 bnum, astr1, astr2);
6718 else
8a3fe4f8 6719 warning (_("Breakpoint address adjusted from %s to %s."), astr1, astr2);
76897487
KB
6720}
6721
4a64f543
MS
6722/* Adjust a breakpoint's address to account for architectural
6723 constraints on breakpoint placement. Return the adjusted address.
6724 Note: Very few targets require this kind of adjustment. For most
6725 targets, this function is simply the identity function. */
76897487
KB
6726
6727static CORE_ADDR
a6d9a66e
UW
6728adjust_breakpoint_address (struct gdbarch *gdbarch,
6729 CORE_ADDR bpaddr, enum bptype bptype)
76897487 6730{
a6d9a66e 6731 if (!gdbarch_adjust_breakpoint_address_p (gdbarch))
76897487
KB
6732 {
6733 /* Very few targets need any kind of breakpoint adjustment. */
6734 return bpaddr;
6735 }
88f7da05
KB
6736 else if (bptype == bp_watchpoint
6737 || bptype == bp_hardware_watchpoint
6738 || bptype == bp_read_watchpoint
6739 || bptype == bp_access_watchpoint
fe798b75 6740 || bptype == bp_catchpoint)
88f7da05
KB
6741 {
6742 /* Watchpoints and the various bp_catch_* eventpoints should not
6743 have their addresses modified. */
6744 return bpaddr;
6745 }
76897487
KB
6746 else
6747 {
6748 CORE_ADDR adjusted_bpaddr;
6749
6750 /* Some targets have architectural constraints on the placement
6751 of breakpoint instructions. Obtain the adjusted address. */
a6d9a66e 6752 adjusted_bpaddr = gdbarch_adjust_breakpoint_address (gdbarch, bpaddr);
76897487
KB
6753
6754 /* An adjusted breakpoint address can significantly alter
6755 a user's expectations. Print a warning if an adjustment
6756 is required. */
6757 if (adjusted_bpaddr != bpaddr)
6758 breakpoint_adjustment_warning (bpaddr, adjusted_bpaddr, 0, 0);
6759
6760 return adjusted_bpaddr;
6761 }
6762}
6763
28010a5d
PA
6764void
6765init_bp_location (struct bp_location *loc, const struct bp_location_ops *ops,
6766 struct breakpoint *owner)
7cc221ef 6767{
7cc221ef
DJ
6768 memset (loc, 0, sizeof (*loc));
6769
348d480f
PA
6770 gdb_assert (ops != NULL);
6771
28010a5d
PA
6772 loc->ops = ops;
6773 loc->owner = owner;
511a6cd4 6774 loc->cond = NULL;
b775012e 6775 loc->cond_bytecode = NULL;
0d381245
VP
6776 loc->shlib_disabled = 0;
6777 loc->enabled = 1;
e049a4b5 6778
28010a5d 6779 switch (owner->type)
e049a4b5
DJ
6780 {
6781 case bp_breakpoint:
6782 case bp_until:
6783 case bp_finish:
6784 case bp_longjmp:
6785 case bp_longjmp_resume:
e2e4d78b 6786 case bp_longjmp_call_dummy:
186c406b
TT
6787 case bp_exception:
6788 case bp_exception_resume:
e049a4b5 6789 case bp_step_resume:
2c03e5be 6790 case bp_hp_step_resume:
e049a4b5
DJ
6791 case bp_watchpoint_scope:
6792 case bp_call_dummy:
aa7d318d 6793 case bp_std_terminate:
e049a4b5
DJ
6794 case bp_shlib_event:
6795 case bp_thread_event:
6796 case bp_overlay_event:
4efc6507 6797 case bp_jit_event:
0fd8e87f 6798 case bp_longjmp_master:
aa7d318d 6799 case bp_std_terminate_master:
186c406b 6800 case bp_exception_master:
0e30163f
JK
6801 case bp_gnu_ifunc_resolver:
6802 case bp_gnu_ifunc_resolver_return:
e7e0cddf 6803 case bp_dprintf:
e049a4b5 6804 loc->loc_type = bp_loc_software_breakpoint;
b775012e 6805 mark_breakpoint_location_modified (loc);
e049a4b5
DJ
6806 break;
6807 case bp_hardware_breakpoint:
6808 loc->loc_type = bp_loc_hardware_breakpoint;
b775012e 6809 mark_breakpoint_location_modified (loc);
e049a4b5
DJ
6810 break;
6811 case bp_hardware_watchpoint:
6812 case bp_read_watchpoint:
6813 case bp_access_watchpoint:
6814 loc->loc_type = bp_loc_hardware_watchpoint;
6815 break;
6816 case bp_watchpoint:
ce78b96d 6817 case bp_catchpoint:
15c3d785
PA
6818 case bp_tracepoint:
6819 case bp_fast_tracepoint:
0fb4aa4b 6820 case bp_static_tracepoint:
e049a4b5
DJ
6821 loc->loc_type = bp_loc_other;
6822 break;
6823 default:
e2e0b3e5 6824 internal_error (__FILE__, __LINE__, _("unknown breakpoint type"));
e049a4b5
DJ
6825 }
6826
f431efe5 6827 loc->refc = 1;
28010a5d
PA
6828}
6829
6830/* Allocate a struct bp_location. */
6831
6832static struct bp_location *
6833allocate_bp_location (struct breakpoint *bpt)
6834{
348d480f
PA
6835 return bpt->ops->allocate_location (bpt);
6836}
7cc221ef 6837
f431efe5
PA
6838static void
6839free_bp_location (struct bp_location *loc)
fe3f5fa8 6840{
348d480f 6841 loc->ops->dtor (loc);
fe3f5fa8
VP
6842 xfree (loc);
6843}
6844
f431efe5
PA
6845/* Increment reference count. */
6846
6847static void
6848incref_bp_location (struct bp_location *bl)
6849{
6850 ++bl->refc;
6851}
6852
6853/* Decrement reference count. If the reference count reaches 0,
6854 destroy the bp_location. Sets *BLP to NULL. */
6855
6856static void
6857decref_bp_location (struct bp_location **blp)
6858{
0807b50c
PA
6859 gdb_assert ((*blp)->refc > 0);
6860
f431efe5
PA
6861 if (--(*blp)->refc == 0)
6862 free_bp_location (*blp);
6863 *blp = NULL;
6864}
6865
346774a9 6866/* Add breakpoint B at the end of the global breakpoint chain. */
c906108c 6867
346774a9
PA
6868static void
6869add_to_breakpoint_chain (struct breakpoint *b)
c906108c 6870{
346774a9 6871 struct breakpoint *b1;
c906108c 6872
346774a9
PA
6873 /* Add this breakpoint to the end of the chain so that a list of
6874 breakpoints will come out in order of increasing numbers. */
6875
6876 b1 = breakpoint_chain;
6877 if (b1 == 0)
6878 breakpoint_chain = b;
6879 else
6880 {
6881 while (b1->next)
6882 b1 = b1->next;
6883 b1->next = b;
6884 }
6885}
6886
6887/* Initializes breakpoint B with type BPTYPE and no locations yet. */
6888
6889static void
6890init_raw_breakpoint_without_location (struct breakpoint *b,
6891 struct gdbarch *gdbarch,
28010a5d 6892 enum bptype bptype,
c0a91b2b 6893 const struct breakpoint_ops *ops)
346774a9 6894{
c906108c 6895 memset (b, 0, sizeof (*b));
2219d63c 6896
348d480f
PA
6897 gdb_assert (ops != NULL);
6898
28010a5d 6899 b->ops = ops;
4d28f7a8 6900 b->type = bptype;
a6d9a66e 6901 b->gdbarch = gdbarch;
c906108c
SS
6902 b->language = current_language->la_language;
6903 b->input_radix = input_radix;
6904 b->thread = -1;
b5de0fa7 6905 b->enable_state = bp_enabled;
c906108c
SS
6906 b->next = 0;
6907 b->silent = 0;
6908 b->ignore_count = 0;
6909 b->commands = NULL;
818dd999 6910 b->frame_id = null_frame_id;
0d381245 6911 b->condition_not_parsed = 0;
84f4c1fe 6912 b->py_bp_object = NULL;
d0fb5eae 6913 b->related_breakpoint = b;
346774a9
PA
6914}
6915
6916/* Helper to set_raw_breakpoint below. Creates a breakpoint
6917 that has type BPTYPE and has no locations as yet. */
346774a9
PA
6918
6919static struct breakpoint *
6920set_raw_breakpoint_without_location (struct gdbarch *gdbarch,
348d480f 6921 enum bptype bptype,
c0a91b2b 6922 const struct breakpoint_ops *ops)
346774a9
PA
6923{
6924 struct breakpoint *b = XNEW (struct breakpoint);
6925
348d480f 6926 init_raw_breakpoint_without_location (b, gdbarch, bptype, ops);
c56053d2 6927 add_to_breakpoint_chain (b);
0d381245
VP
6928 return b;
6929}
6930
0e30163f
JK
6931/* Initialize loc->function_name. EXPLICIT_LOC says no indirect function
6932 resolutions should be made as the user specified the location explicitly
6933 enough. */
6934
0d381245 6935static void
0e30163f 6936set_breakpoint_location_function (struct bp_location *loc, int explicit_loc)
0d381245 6937{
2bdf28a0
JK
6938 gdb_assert (loc->owner != NULL);
6939
0d381245 6940 if (loc->owner->type == bp_breakpoint
1042e4c0 6941 || loc->owner->type == bp_hardware_breakpoint
d77f58be 6942 || is_tracepoint (loc->owner))
0d381245 6943 {
0e30163f 6944 int is_gnu_ifunc;
2c02bd72 6945 const char *function_name;
6a3a010b 6946 CORE_ADDR func_addr;
0e30163f 6947
2c02bd72 6948 find_pc_partial_function_gnu_ifunc (loc->address, &function_name,
6a3a010b 6949 &func_addr, NULL, &is_gnu_ifunc);
0e30163f
JK
6950
6951 if (is_gnu_ifunc && !explicit_loc)
6952 {
6953 struct breakpoint *b = loc->owner;
6954
6955 gdb_assert (loc->pspace == current_program_space);
2c02bd72 6956 if (gnu_ifunc_resolve_name (function_name,
0e30163f
JK
6957 &loc->requested_address))
6958 {
6959 /* Recalculate ADDRESS based on new REQUESTED_ADDRESS. */
6960 loc->address = adjust_breakpoint_address (loc->gdbarch,
6961 loc->requested_address,
6962 b->type);
6963 }
6964 else if (b->type == bp_breakpoint && b->loc == loc
6965 && loc->next == NULL && b->related_breakpoint == b)
6966 {
6967 /* Create only the whole new breakpoint of this type but do not
6968 mess more complicated breakpoints with multiple locations. */
6969 b->type = bp_gnu_ifunc_resolver;
6a3a010b
MR
6970 /* Remember the resolver's address for use by the return
6971 breakpoint. */
6972 loc->related_address = func_addr;
0e30163f
JK
6973 }
6974 }
6975
2c02bd72
DE
6976 if (function_name)
6977 loc->function_name = xstrdup (function_name);
0d381245
VP
6978 }
6979}
6980
a6d9a66e 6981/* Attempt to determine architecture of location identified by SAL. */
1bfeeb0f 6982struct gdbarch *
a6d9a66e
UW
6983get_sal_arch (struct symtab_and_line sal)
6984{
6985 if (sal.section)
6986 return get_objfile_arch (sal.section->objfile);
6987 if (sal.symtab)
6988 return get_objfile_arch (sal.symtab->objfile);
6989
6990 return NULL;
6991}
6992
346774a9
PA
6993/* Low level routine for partially initializing a breakpoint of type
6994 BPTYPE. The newly created breakpoint's address, section, source
c56053d2 6995 file name, and line number are provided by SAL.
0d381245
VP
6996
6997 It is expected that the caller will complete the initialization of
6998 the newly created breakpoint struct as well as output any status
c56053d2 6999 information regarding the creation of a new breakpoint. */
0d381245 7000
346774a9
PA
7001static void
7002init_raw_breakpoint (struct breakpoint *b, struct gdbarch *gdbarch,
28010a5d 7003 struct symtab_and_line sal, enum bptype bptype,
c0a91b2b 7004 const struct breakpoint_ops *ops)
0d381245 7005{
28010a5d 7006 init_raw_breakpoint_without_location (b, gdbarch, bptype, ops);
346774a9 7007
3742cc8b 7008 add_location_to_breakpoint (b, &sal);
0d381245 7009
6c95b8df
PA
7010 if (bptype != bp_catchpoint)
7011 gdb_assert (sal.pspace != NULL);
7012
f8eba3c6
TT
7013 /* Store the program space that was used to set the breakpoint,
7014 except for ordinary breakpoints, which are independent of the
7015 program space. */
7016 if (bptype != bp_breakpoint && bptype != bp_hardware_breakpoint)
7017 b->pspace = sal.pspace;
0d381245 7018
ef37bb07 7019 annotate_breakpoints_changed ();
346774a9 7020}
c906108c 7021
346774a9
PA
7022/* set_raw_breakpoint is a low level routine for allocating and
7023 partially initializing a breakpoint of type BPTYPE. The newly
7024 created breakpoint's address, section, source file name, and line
7025 number are provided by SAL. The newly created and partially
7026 initialized breakpoint is added to the breakpoint chain and
7027 is also returned as the value of this function.
7028
7029 It is expected that the caller will complete the initialization of
7030 the newly created breakpoint struct as well as output any status
7031 information regarding the creation of a new breakpoint. In
7032 particular, set_raw_breakpoint does NOT set the breakpoint
7033 number! Care should be taken to not allow an error to occur
7034 prior to completing the initialization of the breakpoint. If this
7035 should happen, a bogus breakpoint will be left on the chain. */
7036
7037struct breakpoint *
7038set_raw_breakpoint (struct gdbarch *gdbarch,
348d480f 7039 struct symtab_and_line sal, enum bptype bptype,
c0a91b2b 7040 const struct breakpoint_ops *ops)
346774a9
PA
7041{
7042 struct breakpoint *b = XNEW (struct breakpoint);
7043
348d480f 7044 init_raw_breakpoint (b, gdbarch, sal, bptype, ops);
c56053d2 7045 add_to_breakpoint_chain (b);
c906108c
SS
7046 return b;
7047}
7048
c2c6d25f
JM
7049
7050/* Note that the breakpoint object B describes a permanent breakpoint
7051 instruction, hard-wired into the inferior's code. */
7052void
7053make_breakpoint_permanent (struct breakpoint *b)
7054{
0d381245 7055 struct bp_location *bl;
cc59ec59 7056
b5de0fa7 7057 b->enable_state = bp_permanent;
c2c6d25f 7058
4a64f543
MS
7059 /* By definition, permanent breakpoints are already present in the
7060 code. Mark all locations as inserted. For now,
7061 make_breakpoint_permanent is called in just one place, so it's
7062 hard to say if it's reasonable to have permanent breakpoint with
e5dd4106 7063 multiple locations or not, but it's easy to implement. */
0d381245
VP
7064 for (bl = b->loc; bl; bl = bl->next)
7065 bl->inserted = 1;
c2c6d25f
JM
7066}
7067
53a5351d 7068/* Call this routine when stepping and nexting to enable a breakpoint
186c406b
TT
7069 if we do a longjmp() or 'throw' in TP. FRAME is the frame which
7070 initiated the operation. */
c906108c
SS
7071
7072void
186c406b 7073set_longjmp_breakpoint (struct thread_info *tp, struct frame_id frame)
c906108c 7074{
35df4500 7075 struct breakpoint *b, *b_tmp;
186c406b 7076 int thread = tp->num;
0fd8e87f
UW
7077
7078 /* To avoid having to rescan all objfile symbols at every step,
7079 we maintain a list of continually-inserted but always disabled
7080 longjmp "master" breakpoints. Here, we simply create momentary
7081 clones of those and enable them for the requested thread. */
35df4500 7082 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6c95b8df 7083 if (b->pspace == current_program_space
186c406b
TT
7084 && (b->type == bp_longjmp_master
7085 || b->type == bp_exception_master))
0fd8e87f 7086 {
06edf0c0
PA
7087 enum bptype type = b->type == bp_longjmp_master ? bp_longjmp : bp_exception;
7088 struct breakpoint *clone;
cc59ec59 7089
e2e4d78b
JK
7090 /* longjmp_breakpoint_ops ensures INITIATING_FRAME is cleared again
7091 after their removal. */
06edf0c0 7092 clone = momentary_breakpoint_from_master (b, type,
e2e4d78b 7093 &longjmp_breakpoint_ops);
0fd8e87f
UW
7094 clone->thread = thread;
7095 }
186c406b
TT
7096
7097 tp->initiating_frame = frame;
c906108c
SS
7098}
7099
611c83ae 7100/* Delete all longjmp breakpoints from THREAD. */
c906108c 7101void
611c83ae 7102delete_longjmp_breakpoint (int thread)
c906108c 7103{
35df4500 7104 struct breakpoint *b, *b_tmp;
c906108c 7105
35df4500 7106 ALL_BREAKPOINTS_SAFE (b, b_tmp)
186c406b 7107 if (b->type == bp_longjmp || b->type == bp_exception)
611c83ae
PA
7108 {
7109 if (b->thread == thread)
7110 delete_breakpoint (b);
7111 }
c906108c
SS
7112}
7113
f59f708a
PA
7114void
7115delete_longjmp_breakpoint_at_next_stop (int thread)
7116{
7117 struct breakpoint *b, *b_tmp;
7118
7119 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7120 if (b->type == bp_longjmp || b->type == bp_exception)
7121 {
7122 if (b->thread == thread)
7123 b->disposition = disp_del_at_next_stop;
7124 }
7125}
7126
e2e4d78b
JK
7127/* Place breakpoints of type bp_longjmp_call_dummy to catch longjmp for
7128 INFERIOR_PTID thread. Chain them all by RELATED_BREAKPOINT and return
7129 pointer to any of them. Return NULL if this system cannot place longjmp
7130 breakpoints. */
7131
7132struct breakpoint *
7133set_longjmp_breakpoint_for_call_dummy (void)
7134{
7135 struct breakpoint *b, *retval = NULL;
7136
7137 ALL_BREAKPOINTS (b)
7138 if (b->pspace == current_program_space && b->type == bp_longjmp_master)
7139 {
7140 struct breakpoint *new_b;
7141
7142 new_b = momentary_breakpoint_from_master (b, bp_longjmp_call_dummy,
7143 &momentary_breakpoint_ops);
7144 new_b->thread = pid_to_thread_id (inferior_ptid);
7145
7146 /* Link NEW_B into the chain of RETVAL breakpoints. */
7147
7148 gdb_assert (new_b->related_breakpoint == new_b);
7149 if (retval == NULL)
7150 retval = new_b;
7151 new_b->related_breakpoint = retval;
7152 while (retval->related_breakpoint != new_b->related_breakpoint)
7153 retval = retval->related_breakpoint;
7154 retval->related_breakpoint = new_b;
7155 }
7156
7157 return retval;
7158}
7159
7160/* Verify all existing dummy frames and their associated breakpoints for
7161 THREAD. Remove those which can no longer be found in the current frame
7162 stack.
7163
7164 You should call this function only at places where it is safe to currently
7165 unwind the whole stack. Failed stack unwind would discard live dummy
7166 frames. */
7167
7168void
7169check_longjmp_breakpoint_for_call_dummy (int thread)
7170{
7171 struct breakpoint *b, *b_tmp;
7172
7173 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7174 if (b->type == bp_longjmp_call_dummy && b->thread == thread)
7175 {
7176 struct breakpoint *dummy_b = b->related_breakpoint;
7177
7178 while (dummy_b != b && dummy_b->type != bp_call_dummy)
7179 dummy_b = dummy_b->related_breakpoint;
7180 if (dummy_b->type != bp_call_dummy
7181 || frame_find_by_id (dummy_b->frame_id) != NULL)
7182 continue;
7183
7184 dummy_frame_discard (dummy_b->frame_id);
7185
7186 while (b->related_breakpoint != b)
7187 {
7188 if (b_tmp == b->related_breakpoint)
7189 b_tmp = b->related_breakpoint->next;
7190 delete_breakpoint (b->related_breakpoint);
7191 }
7192 delete_breakpoint (b);
7193 }
7194}
7195
1900040c
MS
7196void
7197enable_overlay_breakpoints (void)
7198{
52f0bd74 7199 struct breakpoint *b;
1900040c
MS
7200
7201 ALL_BREAKPOINTS (b)
7202 if (b->type == bp_overlay_event)
7203 {
7204 b->enable_state = bp_enabled;
b60e7edf 7205 update_global_location_list (1);
c02f5703 7206 overlay_events_enabled = 1;
1900040c
MS
7207 }
7208}
7209
7210void
7211disable_overlay_breakpoints (void)
7212{
52f0bd74 7213 struct breakpoint *b;
1900040c
MS
7214
7215 ALL_BREAKPOINTS (b)
7216 if (b->type == bp_overlay_event)
7217 {
7218 b->enable_state = bp_disabled;
b60e7edf 7219 update_global_location_list (0);
c02f5703 7220 overlay_events_enabled = 0;
1900040c
MS
7221 }
7222}
7223
aa7d318d
TT
7224/* Set an active std::terminate breakpoint for each std::terminate
7225 master breakpoint. */
7226void
7227set_std_terminate_breakpoint (void)
7228{
35df4500 7229 struct breakpoint *b, *b_tmp;
aa7d318d 7230
35df4500 7231 ALL_BREAKPOINTS_SAFE (b, b_tmp)
aa7d318d
TT
7232 if (b->pspace == current_program_space
7233 && b->type == bp_std_terminate_master)
7234 {
06edf0c0
PA
7235 momentary_breakpoint_from_master (b, bp_std_terminate,
7236 &momentary_breakpoint_ops);
aa7d318d
TT
7237 }
7238}
7239
7240/* Delete all the std::terminate breakpoints. */
7241void
7242delete_std_terminate_breakpoint (void)
7243{
35df4500 7244 struct breakpoint *b, *b_tmp;
aa7d318d 7245
35df4500 7246 ALL_BREAKPOINTS_SAFE (b, b_tmp)
aa7d318d
TT
7247 if (b->type == bp_std_terminate)
7248 delete_breakpoint (b);
7249}
7250
c4093a6a 7251struct breakpoint *
a6d9a66e 7252create_thread_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
c4093a6a
JM
7253{
7254 struct breakpoint *b;
c4093a6a 7255
06edf0c0
PA
7256 b = create_internal_breakpoint (gdbarch, address, bp_thread_event,
7257 &internal_breakpoint_ops);
7258
b5de0fa7 7259 b->enable_state = bp_enabled;
c4093a6a 7260 /* addr_string has to be used or breakpoint_re_set will delete me. */
5af949e3
UW
7261 b->addr_string
7262 = xstrprintf ("*%s", paddress (b->loc->gdbarch, b->loc->address));
c4093a6a 7263
b60e7edf 7264 update_global_location_list_nothrow (1);
74960c60 7265
c4093a6a
JM
7266 return b;
7267}
7268
7269void
7270remove_thread_event_breakpoints (void)
7271{
35df4500 7272 struct breakpoint *b, *b_tmp;
c4093a6a 7273
35df4500 7274 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6c95b8df
PA
7275 if (b->type == bp_thread_event
7276 && b->loc->pspace == current_program_space)
c4093a6a
JM
7277 delete_breakpoint (b);
7278}
7279
0101ce28
JJ
7280struct lang_and_radix
7281 {
7282 enum language lang;
7283 int radix;
7284 };
7285
4efc6507
DE
7286/* Create a breakpoint for JIT code registration and unregistration. */
7287
7288struct breakpoint *
7289create_jit_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
7290{
7291 struct breakpoint *b;
7292
06edf0c0
PA
7293 b = create_internal_breakpoint (gdbarch, address, bp_jit_event,
7294 &internal_breakpoint_ops);
4efc6507
DE
7295 update_global_location_list_nothrow (1);
7296 return b;
7297}
0101ce28 7298
03673fc7
PP
7299/* Remove JIT code registration and unregistration breakpoint(s). */
7300
7301void
7302remove_jit_event_breakpoints (void)
7303{
7304 struct breakpoint *b, *b_tmp;
7305
7306 ALL_BREAKPOINTS_SAFE (b, b_tmp)
7307 if (b->type == bp_jit_event
7308 && b->loc->pspace == current_program_space)
7309 delete_breakpoint (b);
7310}
7311
cae688ec
JJ
7312void
7313remove_solib_event_breakpoints (void)
7314{
35df4500 7315 struct breakpoint *b, *b_tmp;
cae688ec 7316
35df4500 7317 ALL_BREAKPOINTS_SAFE (b, b_tmp)
6c95b8df
PA
7318 if (b->type == bp_shlib_event
7319 && b->loc->pspace == current_program_space)
cae688ec
JJ
7320 delete_breakpoint (b);
7321}
7322
7323struct breakpoint *
a6d9a66e 7324create_solib_event_breakpoint (struct gdbarch *gdbarch, CORE_ADDR address)
cae688ec
JJ
7325{
7326 struct breakpoint *b;
7327
06edf0c0
PA
7328 b = create_internal_breakpoint (gdbarch, address, bp_shlib_event,
7329 &internal_breakpoint_ops);
b60e7edf 7330 update_global_location_list_nothrow (1);
cae688ec
JJ
7331 return b;
7332}
7333
7334/* Disable any breakpoints that are on code in shared libraries. Only
7335 apply to enabled breakpoints, disabled ones can just stay disabled. */
7336
7337void
cb851954 7338disable_breakpoints_in_shlibs (void)
cae688ec 7339{
876fa593 7340 struct bp_location *loc, **locp_tmp;
cae688ec 7341
876fa593 7342 ALL_BP_LOCATIONS (loc, locp_tmp)
cae688ec 7343 {
2bdf28a0 7344 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
0d381245 7345 struct breakpoint *b = loc->owner;
2bdf28a0 7346
4a64f543
MS
7347 /* We apply the check to all breakpoints, including disabled for
7348 those with loc->duplicate set. This is so that when breakpoint
7349 becomes enabled, or the duplicate is removed, gdb will try to
7350 insert all breakpoints. If we don't set shlib_disabled here,
7351 we'll try to insert those breakpoints and fail. */
1042e4c0 7352 if (((b->type == bp_breakpoint)
508ccb1f 7353 || (b->type == bp_jit_event)
1042e4c0 7354 || (b->type == bp_hardware_breakpoint)
d77f58be 7355 || (is_tracepoint (b)))
6c95b8df 7356 && loc->pspace == current_program_space
0d381245 7357 && !loc->shlib_disabled
a77053c2 7358#ifdef PC_SOLIB
0d381245 7359 && PC_SOLIB (loc->address)
a77053c2 7360#else
6c95b8df 7361 && solib_name_from_address (loc->pspace, loc->address)
a77053c2
MK
7362#endif
7363 )
0d381245
VP
7364 {
7365 loc->shlib_disabled = 1;
7366 }
cae688ec
JJ
7367 }
7368}
7369
1e4d1764
YQ
7370/* Disable any breakpoints and tracepoints that are in an unloaded shared
7371 library. Only apply to enabled breakpoints, disabled ones can just stay
4a64f543 7372 disabled. */
84acb35a 7373
75149521 7374static void
84acb35a
JJ
7375disable_breakpoints_in_unloaded_shlib (struct so_list *solib)
7376{
876fa593 7377 struct bp_location *loc, **locp_tmp;
84acb35a
JJ
7378 int disabled_shlib_breaks = 0;
7379
c86cf029
VP
7380 /* SunOS a.out shared libraries are always mapped, so do not
7381 disable breakpoints; they will only be reported as unloaded
7382 through clear_solib when GDB discards its shared library
7383 list. See clear_solib for more information. */
7384 if (exec_bfd != NULL
7385 && bfd_get_flavour (exec_bfd) == bfd_target_aout_flavour)
7386 return;
7387
876fa593 7388 ALL_BP_LOCATIONS (loc, locp_tmp)
84acb35a 7389 {
2bdf28a0 7390 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always non-NULL. */
0d381245 7391 struct breakpoint *b = loc->owner;
cc59ec59 7392
1e4d1764 7393 if (solib->pspace == loc->pspace
e2dd7057 7394 && !loc->shlib_disabled
1e4d1764
YQ
7395 && (((b->type == bp_breakpoint
7396 || b->type == bp_jit_event
7397 || b->type == bp_hardware_breakpoint)
7398 && (loc->loc_type == bp_loc_hardware_breakpoint
7399 || loc->loc_type == bp_loc_software_breakpoint))
7400 || is_tracepoint (b))
e2dd7057 7401 && solib_contains_address_p (solib, loc->address))
84acb35a 7402 {
e2dd7057
PP
7403 loc->shlib_disabled = 1;
7404 /* At this point, we cannot rely on remove_breakpoint
7405 succeeding so we must mark the breakpoint as not inserted
7406 to prevent future errors occurring in remove_breakpoints. */
7407 loc->inserted = 0;
8d3788bd
VP
7408
7409 /* This may cause duplicate notifications for the same breakpoint. */
7410 observer_notify_breakpoint_modified (b);
7411
e2dd7057
PP
7412 if (!disabled_shlib_breaks)
7413 {
7414 target_terminal_ours_for_output ();
3e43a32a
MS
7415 warning (_("Temporarily disabling breakpoints "
7416 "for unloaded shared library \"%s\""),
e2dd7057 7417 solib->so_name);
84acb35a 7418 }
e2dd7057 7419 disabled_shlib_breaks = 1;
84acb35a
JJ
7420 }
7421 }
84acb35a
JJ
7422}
7423
ce78b96d
JB
7424/* FORK & VFORK catchpoints. */
7425
e29a4733
PA
7426/* An instance of this type is used to represent a fork or vfork
7427 catchpoint. It includes a "struct breakpoint" as a kind of base
7428 class; users downcast to "struct breakpoint *" when needed. A
7429 breakpoint is really of this type iff its ops pointer points to
7430 CATCH_FORK_BREAKPOINT_OPS. */
7431
7432struct fork_catchpoint
7433{
7434 /* The base class. */
7435 struct breakpoint base;
7436
7437 /* Process id of a child process whose forking triggered this
7438 catchpoint. This field is only valid immediately after this
7439 catchpoint has triggered. */
7440 ptid_t forked_inferior_pid;
7441};
7442
4a64f543
MS
7443/* Implement the "insert" breakpoint_ops method for fork
7444 catchpoints. */
ce78b96d 7445
77b06cd7
TJB
7446static int
7447insert_catch_fork (struct bp_location *bl)
ce78b96d 7448{
77b06cd7 7449 return target_insert_fork_catchpoint (PIDGET (inferior_ptid));
ce78b96d
JB
7450}
7451
4a64f543
MS
7452/* Implement the "remove" breakpoint_ops method for fork
7453 catchpoints. */
ce78b96d
JB
7454
7455static int
77b06cd7 7456remove_catch_fork (struct bp_location *bl)
ce78b96d
JB
7457{
7458 return target_remove_fork_catchpoint (PIDGET (inferior_ptid));
7459}
7460
7461/* Implement the "breakpoint_hit" breakpoint_ops method for fork
7462 catchpoints. */
7463
7464static int
f1310107 7465breakpoint_hit_catch_fork (const struct bp_location *bl,
09ac7c10
TT
7466 struct address_space *aspace, CORE_ADDR bp_addr,
7467 const struct target_waitstatus *ws)
ce78b96d 7468{
e29a4733
PA
7469 struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
7470
f90263c1
TT
7471 if (ws->kind != TARGET_WAITKIND_FORKED)
7472 return 0;
7473
7474 c->forked_inferior_pid = ws->value.related_pid;
7475 return 1;
ce78b96d
JB
7476}
7477
4a64f543
MS
7478/* Implement the "print_it" breakpoint_ops method for fork
7479 catchpoints. */
ce78b96d
JB
7480
7481static enum print_stop_action
348d480f 7482print_it_catch_fork (bpstat bs)
ce78b96d 7483{
36dfb11c 7484 struct ui_out *uiout = current_uiout;
348d480f
PA
7485 struct breakpoint *b = bs->breakpoint_at;
7486 struct fork_catchpoint *c = (struct fork_catchpoint *) bs->breakpoint_at;
e29a4733 7487
ce78b96d 7488 annotate_catchpoint (b->number);
36dfb11c
TT
7489 if (b->disposition == disp_del)
7490 ui_out_text (uiout, "\nTemporary catchpoint ");
7491 else
7492 ui_out_text (uiout, "\nCatchpoint ");
7493 if (ui_out_is_mi_like_p (uiout))
7494 {
7495 ui_out_field_string (uiout, "reason",
7496 async_reason_lookup (EXEC_ASYNC_FORK));
7497 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
7498 }
7499 ui_out_field_int (uiout, "bkptno", b->number);
7500 ui_out_text (uiout, " (forked process ");
7501 ui_out_field_int (uiout, "newpid", ptid_get_pid (c->forked_inferior_pid));
7502 ui_out_text (uiout, "), ");
ce78b96d
JB
7503 return PRINT_SRC_AND_LOC;
7504}
7505
4a64f543
MS
7506/* Implement the "print_one" breakpoint_ops method for fork
7507 catchpoints. */
ce78b96d
JB
7508
7509static void
a6d9a66e 7510print_one_catch_fork (struct breakpoint *b, struct bp_location **last_loc)
ce78b96d 7511{
e29a4733 7512 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
79a45b7d 7513 struct value_print_options opts;
79a45e25 7514 struct ui_out *uiout = current_uiout;
79a45b7d
TT
7515
7516 get_user_print_options (&opts);
7517
4a64f543
MS
7518 /* Field 4, the address, is omitted (which makes the columns not
7519 line up too nicely with the headers, but the effect is relatively
7520 readable). */
79a45b7d 7521 if (opts.addressprint)
ce78b96d
JB
7522 ui_out_field_skip (uiout, "addr");
7523 annotate_field (5);
7524 ui_out_text (uiout, "fork");
e29a4733 7525 if (!ptid_equal (c->forked_inferior_pid, null_ptid))
ce78b96d
JB
7526 {
7527 ui_out_text (uiout, ", process ");
7528 ui_out_field_int (uiout, "what",
e29a4733 7529 ptid_get_pid (c->forked_inferior_pid));
ce78b96d
JB
7530 ui_out_spaces (uiout, 1);
7531 }
7532}
7533
7534/* Implement the "print_mention" breakpoint_ops method for fork
7535 catchpoints. */
7536
7537static void
7538print_mention_catch_fork (struct breakpoint *b)
7539{
7540 printf_filtered (_("Catchpoint %d (fork)"), b->number);
7541}
7542
6149aea9
PA
7543/* Implement the "print_recreate" breakpoint_ops method for fork
7544 catchpoints. */
7545
7546static void
7547print_recreate_catch_fork (struct breakpoint *b, struct ui_file *fp)
7548{
7549 fprintf_unfiltered (fp, "catch fork");
d9b3f62e 7550 print_recreate_thread (b, fp);
6149aea9
PA
7551}
7552
ce78b96d
JB
7553/* The breakpoint_ops structure to be used in fork catchpoints. */
7554
2060206e 7555static struct breakpoint_ops catch_fork_breakpoint_ops;
ce78b96d 7556
4a64f543
MS
7557/* Implement the "insert" breakpoint_ops method for vfork
7558 catchpoints. */
ce78b96d 7559
77b06cd7
TJB
7560static int
7561insert_catch_vfork (struct bp_location *bl)
ce78b96d 7562{
77b06cd7 7563 return target_insert_vfork_catchpoint (PIDGET (inferior_ptid));
ce78b96d
JB
7564}
7565
4a64f543
MS
7566/* Implement the "remove" breakpoint_ops method for vfork
7567 catchpoints. */
ce78b96d
JB
7568
7569static int
77b06cd7 7570remove_catch_vfork (struct bp_location *bl)
ce78b96d
JB
7571{
7572 return target_remove_vfork_catchpoint (PIDGET (inferior_ptid));
7573}
7574
7575/* Implement the "breakpoint_hit" breakpoint_ops method for vfork
7576 catchpoints. */
7577
7578static int
f1310107 7579breakpoint_hit_catch_vfork (const struct bp_location *bl,
09ac7c10
TT
7580 struct address_space *aspace, CORE_ADDR bp_addr,
7581 const struct target_waitstatus *ws)
ce78b96d 7582{
e29a4733
PA
7583 struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
7584
f90263c1
TT
7585 if (ws->kind != TARGET_WAITKIND_VFORKED)
7586 return 0;
7587
7588 c->forked_inferior_pid = ws->value.related_pid;
7589 return 1;
ce78b96d
JB
7590}
7591
4a64f543
MS
7592/* Implement the "print_it" breakpoint_ops method for vfork
7593 catchpoints. */
ce78b96d
JB
7594
7595static enum print_stop_action
348d480f 7596print_it_catch_vfork (bpstat bs)
ce78b96d 7597{
36dfb11c 7598 struct ui_out *uiout = current_uiout;
348d480f 7599 struct breakpoint *b = bs->breakpoint_at;
e29a4733
PA
7600 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
7601
ce78b96d 7602 annotate_catchpoint (b->number);
36dfb11c
TT
7603 if (b->disposition == disp_del)
7604 ui_out_text (uiout, "\nTemporary catchpoint ");
7605 else
7606 ui_out_text (uiout, "\nCatchpoint ");
7607 if (ui_out_is_mi_like_p (uiout))
7608 {
7609 ui_out_field_string (uiout, "reason",
7610 async_reason_lookup (EXEC_ASYNC_VFORK));
7611 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
7612 }
7613 ui_out_field_int (uiout, "bkptno", b->number);
7614 ui_out_text (uiout, " (vforked process ");
7615 ui_out_field_int (uiout, "newpid", ptid_get_pid (c->forked_inferior_pid));
7616 ui_out_text (uiout, "), ");
ce78b96d
JB
7617 return PRINT_SRC_AND_LOC;
7618}
7619
4a64f543
MS
7620/* Implement the "print_one" breakpoint_ops method for vfork
7621 catchpoints. */
ce78b96d
JB
7622
7623static void
a6d9a66e 7624print_one_catch_vfork (struct breakpoint *b, struct bp_location **last_loc)
ce78b96d 7625{
e29a4733 7626 struct fork_catchpoint *c = (struct fork_catchpoint *) b;
79a45b7d 7627 struct value_print_options opts;
79a45e25 7628 struct ui_out *uiout = current_uiout;
79a45b7d
TT
7629
7630 get_user_print_options (&opts);
4a64f543
MS
7631 /* Field 4, the address, is omitted (which makes the columns not
7632 line up too nicely with the headers, but the effect is relatively
7633 readable). */
79a45b7d 7634 if (opts.addressprint)
ce78b96d
JB
7635 ui_out_field_skip (uiout, "addr");
7636 annotate_field (5);
7637 ui_out_text (uiout, "vfork");
e29a4733 7638 if (!ptid_equal (c->forked_inferior_pid, null_ptid))
ce78b96d
JB
7639 {
7640 ui_out_text (uiout, ", process ");
7641 ui_out_field_int (uiout, "what",
e29a4733 7642 ptid_get_pid (c->forked_inferior_pid));
ce78b96d
JB
7643 ui_out_spaces (uiout, 1);
7644 }
7645}
7646
7647/* Implement the "print_mention" breakpoint_ops method for vfork
7648 catchpoints. */
7649
7650static void
7651print_mention_catch_vfork (struct breakpoint *b)
7652{
7653 printf_filtered (_("Catchpoint %d (vfork)"), b->number);
7654}
7655
6149aea9
PA
7656/* Implement the "print_recreate" breakpoint_ops method for vfork
7657 catchpoints. */
7658
7659static void
7660print_recreate_catch_vfork (struct breakpoint *b, struct ui_file *fp)
7661{
7662 fprintf_unfiltered (fp, "catch vfork");
d9b3f62e 7663 print_recreate_thread (b, fp);
6149aea9
PA
7664}
7665
ce78b96d
JB
7666/* The breakpoint_ops structure to be used in vfork catchpoints. */
7667
2060206e 7668static struct breakpoint_ops catch_vfork_breakpoint_ops;
ce78b96d 7669
edcc5120
TT
7670/* An instance of this type is used to represent an solib catchpoint.
7671 It includes a "struct breakpoint" as a kind of base class; users
7672 downcast to "struct breakpoint *" when needed. A breakpoint is
7673 really of this type iff its ops pointer points to
7674 CATCH_SOLIB_BREAKPOINT_OPS. */
7675
7676struct solib_catchpoint
7677{
7678 /* The base class. */
7679 struct breakpoint base;
7680
7681 /* True for "catch load", false for "catch unload". */
7682 unsigned char is_load;
7683
7684 /* Regular expression to match, if any. COMPILED is only valid when
7685 REGEX is non-NULL. */
7686 char *regex;
7687 regex_t compiled;
7688};
7689
7690static void
7691dtor_catch_solib (struct breakpoint *b)
7692{
7693 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
7694
7695 if (self->regex)
7696 regfree (&self->compiled);
7697 xfree (self->regex);
7698
7699 base_breakpoint_ops.dtor (b);
7700}
7701
7702static int
7703insert_catch_solib (struct bp_location *ignore)
7704{
7705 return 0;
7706}
7707
7708static int
7709remove_catch_solib (struct bp_location *ignore)
7710{
7711 return 0;
7712}
7713
7714static int
7715breakpoint_hit_catch_solib (const struct bp_location *bl,
7716 struct address_space *aspace,
7717 CORE_ADDR bp_addr,
7718 const struct target_waitstatus *ws)
7719{
7720 struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
7721 struct breakpoint *other;
7722
7723 if (ws->kind == TARGET_WAITKIND_LOADED)
7724 return 1;
7725
7726 ALL_BREAKPOINTS (other)
7727 {
7728 struct bp_location *other_bl;
7729
7730 if (other == bl->owner)
7731 continue;
7732
7733 if (other->type != bp_shlib_event)
7734 continue;
7735
7736 if (self->base.pspace != NULL && other->pspace != self->base.pspace)
7737 continue;
7738
7739 for (other_bl = other->loc; other_bl != NULL; other_bl = other_bl->next)
7740 {
7741 if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
7742 return 1;
7743 }
7744 }
7745
7746 return 0;
7747}
7748
7749static void
7750check_status_catch_solib (struct bpstats *bs)
7751{
7752 struct solib_catchpoint *self
7753 = (struct solib_catchpoint *) bs->breakpoint_at;
7754 int ix;
7755
7756 if (self->is_load)
7757 {
7758 struct so_list *iter;
7759
7760 for (ix = 0;
7761 VEC_iterate (so_list_ptr, current_program_space->added_solibs,
7762 ix, iter);
7763 ++ix)
7764 {
7765 if (!self->regex
7766 || regexec (&self->compiled, iter->so_name, 0, NULL, 0) == 0)
7767 return;
7768 }
7769 }
7770 else
7771 {
7772 char *iter;
7773
7774 for (ix = 0;
7775 VEC_iterate (char_ptr, current_program_space->deleted_solibs,
7776 ix, iter);
7777 ++ix)
7778 {
7779 if (!self->regex
7780 || regexec (&self->compiled, iter, 0, NULL, 0) == 0)
7781 return;
7782 }
7783 }
7784
7785 bs->stop = 0;
7786 bs->print_it = print_it_noop;
7787}
7788
7789static enum print_stop_action
7790print_it_catch_solib (bpstat bs)
7791{
7792 struct breakpoint *b = bs->breakpoint_at;
7793 struct ui_out *uiout = current_uiout;
7794
7795 annotate_catchpoint (b->number);
7796 if (b->disposition == disp_del)
7797 ui_out_text (uiout, "\nTemporary catchpoint ");
7798 else
7799 ui_out_text (uiout, "\nCatchpoint ");
7800 ui_out_field_int (uiout, "bkptno", b->number);
7801 ui_out_text (uiout, "\n");
7802 if (ui_out_is_mi_like_p (uiout))
7803 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
7804 print_solib_event (1);
7805 return PRINT_SRC_AND_LOC;
7806}
7807
7808static void
7809print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
7810{
7811 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
7812 struct value_print_options opts;
7813 struct ui_out *uiout = current_uiout;
7814 char *msg;
7815
7816 get_user_print_options (&opts);
7817 /* Field 4, the address, is omitted (which makes the columns not
7818 line up too nicely with the headers, but the effect is relatively
7819 readable). */
7820 if (opts.addressprint)
7821 {
7822 annotate_field (4);
7823 ui_out_field_skip (uiout, "addr");
7824 }
7825
7826 annotate_field (5);
7827 if (self->is_load)
7828 {
7829 if (self->regex)
7830 msg = xstrprintf (_("load of library matching %s"), self->regex);
7831 else
7832 msg = xstrdup (_("load of library"));
7833 }
7834 else
7835 {
7836 if (self->regex)
7837 msg = xstrprintf (_("unload of library matching %s"), self->regex);
7838 else
7839 msg = xstrdup (_("unload of library"));
7840 }
7841 ui_out_field_string (uiout, "what", msg);
7842 xfree (msg);
7843}
7844
7845static void
7846print_mention_catch_solib (struct breakpoint *b)
7847{
7848 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
7849
7850 printf_filtered (_("Catchpoint %d (%s)"), b->number,
7851 self->is_load ? "load" : "unload");
7852}
7853
7854static void
7855print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
7856{
7857 struct solib_catchpoint *self = (struct solib_catchpoint *) b;
7858
7859 fprintf_unfiltered (fp, "%s %s",
7860 b->disposition == disp_del ? "tcatch" : "catch",
7861 self->is_load ? "load" : "unload");
7862 if (self->regex)
7863 fprintf_unfiltered (fp, " %s", self->regex);
7864 fprintf_unfiltered (fp, "\n");
7865}
7866
7867static struct breakpoint_ops catch_solib_breakpoint_ops;
7868
91985142
MG
7869/* Shared helper function (MI and CLI) for creating and installing
7870 a shared object event catchpoint. If IS_LOAD is non-zero then
7871 the events to be caught are load events, otherwise they are
7872 unload events. If IS_TEMP is non-zero the catchpoint is a
7873 temporary one. If ENABLED is non-zero the catchpoint is
7874 created in an enabled state. */
edcc5120 7875
91985142
MG
7876void
7877add_solib_catchpoint (char *arg, int is_load, int is_temp, int enabled)
edcc5120
TT
7878{
7879 struct solib_catchpoint *c;
7880 struct gdbarch *gdbarch = get_current_arch ();
edcc5120
TT
7881 struct cleanup *cleanup;
7882
edcc5120
TT
7883 if (!arg)
7884 arg = "";
7885 arg = skip_spaces (arg);
7886
7887 c = XCNEW (struct solib_catchpoint);
7888 cleanup = make_cleanup (xfree, c);
7889
7890 if (*arg != '\0')
7891 {
7892 int errcode;
7893
7894 errcode = regcomp (&c->compiled, arg, REG_NOSUB);
7895 if (errcode != 0)
7896 {
7897 char *err = get_regcomp_error (errcode, &c->compiled);
7898
7899 make_cleanup (xfree, err);
7900 error (_("Invalid regexp (%s): %s"), err, arg);
7901 }
7902 c->regex = xstrdup (arg);
7903 }
7904
7905 c->is_load = is_load;
91985142 7906 init_catchpoint (&c->base, gdbarch, is_temp, NULL,
edcc5120
TT
7907 &catch_solib_breakpoint_ops);
7908
91985142
MG
7909 c->base.enable_state = enabled ? bp_enabled : bp_disabled;
7910
edcc5120
TT
7911 discard_cleanups (cleanup);
7912 install_breakpoint (0, &c->base, 1);
7913}
7914
91985142
MG
7915/* A helper function that does all the work for "catch load" and
7916 "catch unload". */
7917
7918static void
7919catch_load_or_unload (char *arg, int from_tty, int is_load,
7920 struct cmd_list_element *command)
7921{
7922 int tempflag;
7923 const int enabled = 1;
7924
7925 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
7926
7927 add_solib_catchpoint (arg, is_load, tempflag, enabled);
7928}
7929
edcc5120
TT
7930static void
7931catch_load_command_1 (char *arg, int from_tty,
7932 struct cmd_list_element *command)
7933{
7934 catch_load_or_unload (arg, from_tty, 1, command);
7935}
7936
7937static void
7938catch_unload_command_1 (char *arg, int from_tty,
7939 struct cmd_list_element *command)
7940{
7941 catch_load_or_unload (arg, from_tty, 0, command);
7942}
7943
fa3064dd
YQ
7944DEF_VEC_I(int);
7945
be5c67c1
PA
7946/* An instance of this type is used to represent a syscall catchpoint.
7947 It includes a "struct breakpoint" as a kind of base class; users
7948 downcast to "struct breakpoint *" when needed. A breakpoint is
7949 really of this type iff its ops pointer points to
7950 CATCH_SYSCALL_BREAKPOINT_OPS. */
7951
7952struct syscall_catchpoint
7953{
7954 /* The base class. */
7955 struct breakpoint base;
7956
7957 /* Syscall numbers used for the 'catch syscall' feature. If no
7958 syscall has been specified for filtering, its value is NULL.
7959 Otherwise, it holds a list of all syscalls to be caught. The
7960 list elements are allocated with xmalloc. */
7961 VEC(int) *syscalls_to_be_caught;
7962};
7963
7964/* Implement the "dtor" breakpoint_ops method for syscall
7965 catchpoints. */
7966
7967static void
7968dtor_catch_syscall (struct breakpoint *b)
7969{
7970 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
7971
7972 VEC_free (int, c->syscalls_to_be_caught);
348d480f 7973
2060206e 7974 base_breakpoint_ops.dtor (b);
be5c67c1
PA
7975}
7976
fa3064dd
YQ
7977static const struct inferior_data *catch_syscall_inferior_data = NULL;
7978
7979struct catch_syscall_inferior_data
7980{
7981 /* We keep a count of the number of times the user has requested a
7982 particular syscall to be tracked, and pass this information to the
7983 target. This lets capable targets implement filtering directly. */
7984
7985 /* Number of times that "any" syscall is requested. */
7986 int any_syscall_count;
7987
7988 /* Count of each system call. */
7989 VEC(int) *syscalls_counts;
7990
7991 /* This counts all syscall catch requests, so we can readily determine
7992 if any catching is necessary. */
7993 int total_syscalls_count;
7994};
7995
7996static struct catch_syscall_inferior_data*
7997get_catch_syscall_inferior_data (struct inferior *inf)
7998{
7999 struct catch_syscall_inferior_data *inf_data;
8000
8001 inf_data = inferior_data (inf, catch_syscall_inferior_data);
8002 if (inf_data == NULL)
8003 {
8004 inf_data = XZALLOC (struct catch_syscall_inferior_data);
8005 set_inferior_data (inf, catch_syscall_inferior_data, inf_data);
8006 }
8007
8008 return inf_data;
8009}
8010
8011static void
8012catch_syscall_inferior_data_cleanup (struct inferior *inf, void *arg)
8013{
8014 xfree (arg);
8015}
8016
8017
a96d9b2e
SDJ
8018/* Implement the "insert" breakpoint_ops method for syscall
8019 catchpoints. */
8020
77b06cd7
TJB
8021static int
8022insert_catch_syscall (struct bp_location *bl)
a96d9b2e 8023{
be5c67c1 8024 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
a96d9b2e 8025 struct inferior *inf = current_inferior ();
fa3064dd
YQ
8026 struct catch_syscall_inferior_data *inf_data
8027 = get_catch_syscall_inferior_data (inf);
a96d9b2e 8028
fa3064dd 8029 ++inf_data->total_syscalls_count;
be5c67c1 8030 if (!c->syscalls_to_be_caught)
fa3064dd 8031 ++inf_data->any_syscall_count;
a96d9b2e
SDJ
8032 else
8033 {
8034 int i, iter;
cc59ec59 8035
a96d9b2e 8036 for (i = 0;
be5c67c1 8037 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
8038 i++)
8039 {
8040 int elem;
cc59ec59 8041
fa3064dd 8042 if (iter >= VEC_length (int, inf_data->syscalls_counts))
a96d9b2e 8043 {
fa3064dd 8044 int old_size = VEC_length (int, inf_data->syscalls_counts);
3e43a32a
MS
8045 uintptr_t vec_addr_offset
8046 = old_size * ((uintptr_t) sizeof (int));
a96d9b2e 8047 uintptr_t vec_addr;
fa3064dd
YQ
8048 VEC_safe_grow (int, inf_data->syscalls_counts, iter + 1);
8049 vec_addr = ((uintptr_t) VEC_address (int,
8050 inf_data->syscalls_counts)
8051 + vec_addr_offset);
a96d9b2e
SDJ
8052 memset ((void *) vec_addr, 0,
8053 (iter + 1 - old_size) * sizeof (int));
8054 }
fa3064dd
YQ
8055 elem = VEC_index (int, inf_data->syscalls_counts, iter);
8056 VEC_replace (int, inf_data->syscalls_counts, iter, ++elem);
a96d9b2e
SDJ
8057 }
8058 }
8059
77b06cd7 8060 return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
fa3064dd
YQ
8061 inf_data->total_syscalls_count != 0,
8062 inf_data->any_syscall_count,
8063 VEC_length (int,
8064 inf_data->syscalls_counts),
8065 VEC_address (int,
8066 inf_data->syscalls_counts));
a96d9b2e
SDJ
8067}
8068
8069/* Implement the "remove" breakpoint_ops method for syscall
8070 catchpoints. */
8071
8072static int
77b06cd7 8073remove_catch_syscall (struct bp_location *bl)
a96d9b2e 8074{
be5c67c1 8075 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bl->owner;
a96d9b2e 8076 struct inferior *inf = current_inferior ();
fa3064dd
YQ
8077 struct catch_syscall_inferior_data *inf_data
8078 = get_catch_syscall_inferior_data (inf);
a96d9b2e 8079
fa3064dd 8080 --inf_data->total_syscalls_count;
be5c67c1 8081 if (!c->syscalls_to_be_caught)
fa3064dd 8082 --inf_data->any_syscall_count;
a96d9b2e
SDJ
8083 else
8084 {
8085 int i, iter;
cc59ec59 8086
a96d9b2e 8087 for (i = 0;
be5c67c1 8088 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
8089 i++)
8090 {
8091 int elem;
fa3064dd 8092 if (iter >= VEC_length (int, inf_data->syscalls_counts))
a96d9b2e
SDJ
8093 /* Shouldn't happen. */
8094 continue;
fa3064dd
YQ
8095 elem = VEC_index (int, inf_data->syscalls_counts, iter);
8096 VEC_replace (int, inf_data->syscalls_counts, iter, --elem);
a96d9b2e
SDJ
8097 }
8098 }
8099
8100 return target_set_syscall_catchpoint (PIDGET (inferior_ptid),
fa3064dd
YQ
8101 inf_data->total_syscalls_count != 0,
8102 inf_data->any_syscall_count,
8103 VEC_length (int,
8104 inf_data->syscalls_counts),
3e43a32a 8105 VEC_address (int,
fa3064dd 8106 inf_data->syscalls_counts));
a96d9b2e
SDJ
8107}
8108
8109/* Implement the "breakpoint_hit" breakpoint_ops method for syscall
8110 catchpoints. */
8111
8112static int
f1310107 8113breakpoint_hit_catch_syscall (const struct bp_location *bl,
09ac7c10
TT
8114 struct address_space *aspace, CORE_ADDR bp_addr,
8115 const struct target_waitstatus *ws)
a96d9b2e 8116{
4a64f543
MS
8117 /* We must check if we are catching specific syscalls in this
8118 breakpoint. If we are, then we must guarantee that the called
8119 syscall is the same syscall we are catching. */
a96d9b2e 8120 int syscall_number = 0;
be5c67c1
PA
8121 const struct syscall_catchpoint *c
8122 = (const struct syscall_catchpoint *) bl->owner;
a96d9b2e 8123
f90263c1
TT
8124 if (ws->kind != TARGET_WAITKIND_SYSCALL_ENTRY
8125 && ws->kind != TARGET_WAITKIND_SYSCALL_RETURN)
a96d9b2e
SDJ
8126 return 0;
8127
f90263c1
TT
8128 syscall_number = ws->value.syscall_number;
8129
a96d9b2e 8130 /* Now, checking if the syscall is the same. */
be5c67c1 8131 if (c->syscalls_to_be_caught)
a96d9b2e
SDJ
8132 {
8133 int i, iter;
cc59ec59 8134
a96d9b2e 8135 for (i = 0;
be5c67c1 8136 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
8137 i++)
8138 if (syscall_number == iter)
8139 break;
8140 /* Not the same. */
8141 if (!iter)
8142 return 0;
8143 }
8144
8145 return 1;
8146}
8147
8148/* Implement the "print_it" breakpoint_ops method for syscall
8149 catchpoints. */
8150
8151static enum print_stop_action
348d480f 8152print_it_catch_syscall (bpstat bs)
a96d9b2e 8153{
36dfb11c 8154 struct ui_out *uiout = current_uiout;
348d480f 8155 struct breakpoint *b = bs->breakpoint_at;
a96d9b2e
SDJ
8156 /* These are needed because we want to know in which state a
8157 syscall is. It can be in the TARGET_WAITKIND_SYSCALL_ENTRY
8158 or TARGET_WAITKIND_SYSCALL_RETURN, and depending on it we
8159 must print "called syscall" or "returned from syscall". */
8160 ptid_t ptid;
8161 struct target_waitstatus last;
8162 struct syscall s;
a96d9b2e
SDJ
8163
8164 get_last_target_status (&ptid, &last);
8165
8166 get_syscall_by_number (last.value.syscall_number, &s);
8167
8168 annotate_catchpoint (b->number);
8169
36dfb11c
TT
8170 if (b->disposition == disp_del)
8171 ui_out_text (uiout, "\nTemporary catchpoint ");
a96d9b2e 8172 else
36dfb11c
TT
8173 ui_out_text (uiout, "\nCatchpoint ");
8174 if (ui_out_is_mi_like_p (uiout))
8175 {
8176 ui_out_field_string (uiout, "reason",
8177 async_reason_lookup (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY
8178 ? EXEC_ASYNC_SYSCALL_ENTRY
8179 : EXEC_ASYNC_SYSCALL_RETURN));
8180 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
8181 }
8182 ui_out_field_int (uiout, "bkptno", b->number);
a96d9b2e
SDJ
8183
8184 if (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY)
36dfb11c
TT
8185 ui_out_text (uiout, " (call to syscall ");
8186 else
8187 ui_out_text (uiout, " (returned from syscall ");
a96d9b2e 8188
36dfb11c
TT
8189 if (s.name == NULL || ui_out_is_mi_like_p (uiout))
8190 ui_out_field_int (uiout, "syscall-number", last.value.syscall_number);
8191 if (s.name != NULL)
8192 ui_out_field_string (uiout, "syscall-name", s.name);
8193
8194 ui_out_text (uiout, "), ");
a96d9b2e
SDJ
8195
8196 return PRINT_SRC_AND_LOC;
8197}
8198
8199/* Implement the "print_one" breakpoint_ops method for syscall
8200 catchpoints. */
8201
8202static void
8203print_one_catch_syscall (struct breakpoint *b,
f1310107 8204 struct bp_location **last_loc)
a96d9b2e 8205{
be5c67c1 8206 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
a96d9b2e 8207 struct value_print_options opts;
79a45e25 8208 struct ui_out *uiout = current_uiout;
a96d9b2e
SDJ
8209
8210 get_user_print_options (&opts);
4a64f543
MS
8211 /* Field 4, the address, is omitted (which makes the columns not
8212 line up too nicely with the headers, but the effect is relatively
8213 readable). */
a96d9b2e
SDJ
8214 if (opts.addressprint)
8215 ui_out_field_skip (uiout, "addr");
8216 annotate_field (5);
8217
be5c67c1
PA
8218 if (c->syscalls_to_be_caught
8219 && VEC_length (int, c->syscalls_to_be_caught) > 1)
a96d9b2e
SDJ
8220 ui_out_text (uiout, "syscalls \"");
8221 else
8222 ui_out_text (uiout, "syscall \"");
8223
be5c67c1 8224 if (c->syscalls_to_be_caught)
a96d9b2e
SDJ
8225 {
8226 int i, iter;
8227 char *text = xstrprintf ("%s", "");
cc59ec59 8228
a96d9b2e 8229 for (i = 0;
be5c67c1 8230 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
8231 i++)
8232 {
8233 char *x = text;
8234 struct syscall s;
8235 get_syscall_by_number (iter, &s);
8236
8237 if (s.name != NULL)
8238 text = xstrprintf ("%s%s, ", text, s.name);
8239 else
8240 text = xstrprintf ("%s%d, ", text, iter);
8241
8242 /* We have to xfree the last 'text' (now stored at 'x')
e5dd4106 8243 because xstrprintf dynamically allocates new space for it
a96d9b2e
SDJ
8244 on every call. */
8245 xfree (x);
8246 }
8247 /* Remove the last comma. */
8248 text[strlen (text) - 2] = '\0';
8249 ui_out_field_string (uiout, "what", text);
8250 }
8251 else
8252 ui_out_field_string (uiout, "what", "<any syscall>");
8253 ui_out_text (uiout, "\" ");
8254}
8255
8256/* Implement the "print_mention" breakpoint_ops method for syscall
8257 catchpoints. */
8258
8259static void
8260print_mention_catch_syscall (struct breakpoint *b)
8261{
be5c67c1
PA
8262 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
8263
8264 if (c->syscalls_to_be_caught)
a96d9b2e
SDJ
8265 {
8266 int i, iter;
8267
be5c67c1 8268 if (VEC_length (int, c->syscalls_to_be_caught) > 1)
a96d9b2e
SDJ
8269 printf_filtered (_("Catchpoint %d (syscalls"), b->number);
8270 else
8271 printf_filtered (_("Catchpoint %d (syscall"), b->number);
8272
8273 for (i = 0;
be5c67c1 8274 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
8275 i++)
8276 {
8277 struct syscall s;
8278 get_syscall_by_number (iter, &s);
8279
8280 if (s.name)
8281 printf_filtered (" '%s' [%d]", s.name, s.number);
8282 else
8283 printf_filtered (" %d", s.number);
8284 }
8285 printf_filtered (")");
8286 }
8287 else
8288 printf_filtered (_("Catchpoint %d (any syscall)"),
8289 b->number);
8290}
8291
6149aea9
PA
8292/* Implement the "print_recreate" breakpoint_ops method for syscall
8293 catchpoints. */
8294
8295static void
8296print_recreate_catch_syscall (struct breakpoint *b, struct ui_file *fp)
8297{
be5c67c1
PA
8298 struct syscall_catchpoint *c = (struct syscall_catchpoint *) b;
8299
6149aea9
PA
8300 fprintf_unfiltered (fp, "catch syscall");
8301
be5c67c1 8302 if (c->syscalls_to_be_caught)
6149aea9
PA
8303 {
8304 int i, iter;
8305
8306 for (i = 0;
be5c67c1 8307 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
6149aea9
PA
8308 i++)
8309 {
8310 struct syscall s;
8311
8312 get_syscall_by_number (iter, &s);
8313 if (s.name)
8314 fprintf_unfiltered (fp, " %s", s.name);
8315 else
8316 fprintf_unfiltered (fp, " %d", s.number);
8317 }
8318 }
d9b3f62e 8319 print_recreate_thread (b, fp);
6149aea9
PA
8320}
8321
a96d9b2e
SDJ
8322/* The breakpoint_ops structure to be used in syscall catchpoints. */
8323
2060206e 8324static struct breakpoint_ops catch_syscall_breakpoint_ops;
a96d9b2e
SDJ
8325
8326/* Returns non-zero if 'b' is a syscall catchpoint. */
8327
8328static int
8329syscall_catchpoint_p (struct breakpoint *b)
8330{
8331 return (b->ops == &catch_syscall_breakpoint_ops);
8332}
8333
346774a9
PA
8334/* Initialize a new breakpoint of the bp_catchpoint kind. If TEMPFLAG
8335 is non-zero, then make the breakpoint temporary. If COND_STRING is
8336 not NULL, then store it in the breakpoint. OPS, if not NULL, is
8337 the breakpoint_ops structure associated to the catchpoint. */
ce78b96d 8338
346774a9
PA
8339static void
8340init_catchpoint (struct breakpoint *b,
8341 struct gdbarch *gdbarch, int tempflag,
8342 char *cond_string,
c0a91b2b 8343 const struct breakpoint_ops *ops)
c906108c 8344{
c5aa993b 8345 struct symtab_and_line sal;
346774a9 8346
fe39c653 8347 init_sal (&sal);
6c95b8df 8348 sal.pspace = current_program_space;
c5aa993b 8349
28010a5d 8350 init_raw_breakpoint (b, gdbarch, sal, bp_catchpoint, ops);
ce78b96d 8351
1b36a34b 8352 b->cond_string = (cond_string == NULL) ? NULL : xstrdup (cond_string);
b5de0fa7 8353 b->disposition = tempflag ? disp_del : disp_donttouch;
346774a9
PA
8354}
8355
28010a5d 8356void
3ea46bff 8357install_breakpoint (int internal, struct breakpoint *b, int update_gll)
c56053d2
PA
8358{
8359 add_to_breakpoint_chain (b);
3a5c3e22 8360 set_breakpoint_number (internal, b);
558a9d82
YQ
8361 if (is_tracepoint (b))
8362 set_tracepoint_count (breakpoint_count);
3a5c3e22
PA
8363 if (!internal)
8364 mention (b);
c56053d2 8365 observer_notify_breakpoint_created (b);
3ea46bff
YQ
8366
8367 if (update_gll)
8368 update_global_location_list (1);
c56053d2
PA
8369}
8370
9b70b993 8371static void
a6d9a66e
UW
8372create_fork_vfork_event_catchpoint (struct gdbarch *gdbarch,
8373 int tempflag, char *cond_string,
c0a91b2b 8374 const struct breakpoint_ops *ops)
c906108c 8375{
e29a4733 8376 struct fork_catchpoint *c = XNEW (struct fork_catchpoint);
ce78b96d 8377
e29a4733
PA
8378 init_catchpoint (&c->base, gdbarch, tempflag, cond_string, ops);
8379
8380 c->forked_inferior_pid = null_ptid;
8381
3ea46bff 8382 install_breakpoint (0, &c->base, 1);
c906108c
SS
8383}
8384
fe798b75
JB
8385/* Exec catchpoints. */
8386
b4d90040
PA
8387/* An instance of this type is used to represent an exec catchpoint.
8388 It includes a "struct breakpoint" as a kind of base class; users
8389 downcast to "struct breakpoint *" when needed. A breakpoint is
8390 really of this type iff its ops pointer points to
8391 CATCH_EXEC_BREAKPOINT_OPS. */
8392
8393struct exec_catchpoint
8394{
8395 /* The base class. */
8396 struct breakpoint base;
8397
8398 /* Filename of a program whose exec triggered this catchpoint.
8399 This field is only valid immediately after this catchpoint has
8400 triggered. */
8401 char *exec_pathname;
8402};
8403
8404/* Implement the "dtor" breakpoint_ops method for exec
8405 catchpoints. */
8406
8407static void
8408dtor_catch_exec (struct breakpoint *b)
8409{
8410 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
8411
8412 xfree (c->exec_pathname);
348d480f 8413
2060206e 8414 base_breakpoint_ops.dtor (b);
b4d90040
PA
8415}
8416
77b06cd7
TJB
8417static int
8418insert_catch_exec (struct bp_location *bl)
c906108c 8419{
77b06cd7 8420 return target_insert_exec_catchpoint (PIDGET (inferior_ptid));
fe798b75 8421}
c906108c 8422
fe798b75 8423static int
77b06cd7 8424remove_catch_exec (struct bp_location *bl)
fe798b75
JB
8425{
8426 return target_remove_exec_catchpoint (PIDGET (inferior_ptid));
8427}
c906108c 8428
fe798b75 8429static int
f1310107 8430breakpoint_hit_catch_exec (const struct bp_location *bl,
09ac7c10
TT
8431 struct address_space *aspace, CORE_ADDR bp_addr,
8432 const struct target_waitstatus *ws)
fe798b75 8433{
b4d90040
PA
8434 struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
8435
f90263c1
TT
8436 if (ws->kind != TARGET_WAITKIND_EXECD)
8437 return 0;
8438
8439 c->exec_pathname = xstrdup (ws->value.execd_pathname);
8440 return 1;
fe798b75 8441}
c906108c 8442
fe798b75 8443static enum print_stop_action
348d480f 8444print_it_catch_exec (bpstat bs)
fe798b75 8445{
36dfb11c 8446 struct ui_out *uiout = current_uiout;
348d480f 8447 struct breakpoint *b = bs->breakpoint_at;
b4d90040
PA
8448 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
8449
fe798b75 8450 annotate_catchpoint (b->number);
36dfb11c
TT
8451 if (b->disposition == disp_del)
8452 ui_out_text (uiout, "\nTemporary catchpoint ");
8453 else
8454 ui_out_text (uiout, "\nCatchpoint ");
8455 if (ui_out_is_mi_like_p (uiout))
8456 {
8457 ui_out_field_string (uiout, "reason",
8458 async_reason_lookup (EXEC_ASYNC_EXEC));
8459 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
8460 }
8461 ui_out_field_int (uiout, "bkptno", b->number);
8462 ui_out_text (uiout, " (exec'd ");
8463 ui_out_field_string (uiout, "new-exec", c->exec_pathname);
8464 ui_out_text (uiout, "), ");
8465
fe798b75 8466 return PRINT_SRC_AND_LOC;
c906108c
SS
8467}
8468
fe798b75 8469static void
a6d9a66e 8470print_one_catch_exec (struct breakpoint *b, struct bp_location **last_loc)
fe798b75 8471{
b4d90040 8472 struct exec_catchpoint *c = (struct exec_catchpoint *) b;
fe798b75 8473 struct value_print_options opts;
79a45e25 8474 struct ui_out *uiout = current_uiout;
fe798b75
JB
8475
8476 get_user_print_options (&opts);
8477
8478 /* Field 4, the address, is omitted (which makes the columns
8479 not line up too nicely with the headers, but the effect
8480 is relatively readable). */
8481 if (opts.addressprint)
8482 ui_out_field_skip (uiout, "addr");
8483 annotate_field (5);
8484 ui_out_text (uiout, "exec");
b4d90040 8485 if (c->exec_pathname != NULL)
fe798b75
JB
8486 {
8487 ui_out_text (uiout, ", program \"");
b4d90040 8488 ui_out_field_string (uiout, "what", c->exec_pathname);
fe798b75
JB
8489 ui_out_text (uiout, "\" ");
8490 }
8491}
8492
8493static void
8494print_mention_catch_exec (struct breakpoint *b)
8495{
8496 printf_filtered (_("Catchpoint %d (exec)"), b->number);
8497}
8498
6149aea9
PA
8499/* Implement the "print_recreate" breakpoint_ops method for exec
8500 catchpoints. */
8501
8502static void
8503print_recreate_catch_exec (struct breakpoint *b, struct ui_file *fp)
8504{
8505 fprintf_unfiltered (fp, "catch exec");
d9b3f62e 8506 print_recreate_thread (b, fp);
6149aea9
PA
8507}
8508
2060206e 8509static struct breakpoint_ops catch_exec_breakpoint_ops;
fe798b75 8510
a96d9b2e
SDJ
8511static void
8512create_syscall_event_catchpoint (int tempflag, VEC(int) *filter,
c0a91b2b 8513 const struct breakpoint_ops *ops)
a96d9b2e 8514{
be5c67c1 8515 struct syscall_catchpoint *c;
a96d9b2e 8516 struct gdbarch *gdbarch = get_current_arch ();
a96d9b2e 8517
be5c67c1
PA
8518 c = XNEW (struct syscall_catchpoint);
8519 init_catchpoint (&c->base, gdbarch, tempflag, NULL, ops);
8520 c->syscalls_to_be_caught = filter;
a96d9b2e 8521
3ea46bff 8522 install_breakpoint (0, &c->base, 1);
a96d9b2e
SDJ
8523}
8524
c906108c 8525static int
fba45db2 8526hw_breakpoint_used_count (void)
c906108c 8527{
c906108c 8528 int i = 0;
f1310107
TJB
8529 struct breakpoint *b;
8530 struct bp_location *bl;
c906108c
SS
8531
8532 ALL_BREAKPOINTS (b)
c5aa993b 8533 {
d6b74ac4 8534 if (b->type == bp_hardware_breakpoint && breakpoint_enabled (b))
f1310107
TJB
8535 for (bl = b->loc; bl; bl = bl->next)
8536 {
8537 /* Special types of hardware breakpoints may use more than
8538 one register. */
348d480f 8539 i += b->ops->resources_needed (bl);
f1310107 8540 }
c5aa993b 8541 }
c906108c
SS
8542
8543 return i;
8544}
8545
a1398e0c
PA
8546/* Returns the resources B would use if it were a hardware
8547 watchpoint. */
8548
c906108c 8549static int
a1398e0c 8550hw_watchpoint_use_count (struct breakpoint *b)
c906108c 8551{
c906108c 8552 int i = 0;
e09342b5 8553 struct bp_location *bl;
c906108c 8554
a1398e0c
PA
8555 if (!breakpoint_enabled (b))
8556 return 0;
8557
8558 for (bl = b->loc; bl; bl = bl->next)
8559 {
8560 /* Special types of hardware watchpoints may use more than
8561 one register. */
8562 i += b->ops->resources_needed (bl);
8563 }
8564
8565 return i;
8566}
8567
8568/* Returns the sum the used resources of all hardware watchpoints of
8569 type TYPE in the breakpoints list. Also returns in OTHER_TYPE_USED
8570 the sum of the used resources of all hardware watchpoints of other
8571 types _not_ TYPE. */
8572
8573static int
8574hw_watchpoint_used_count_others (struct breakpoint *except,
8575 enum bptype type, int *other_type_used)
8576{
8577 int i = 0;
8578 struct breakpoint *b;
8579
c906108c
SS
8580 *other_type_used = 0;
8581 ALL_BREAKPOINTS (b)
e09342b5 8582 {
a1398e0c
PA
8583 if (b == except)
8584 continue;
e09342b5
TJB
8585 if (!breakpoint_enabled (b))
8586 continue;
8587
a1398e0c
PA
8588 if (b->type == type)
8589 i += hw_watchpoint_use_count (b);
8590 else if (is_hardware_watchpoint (b))
8591 *other_type_used = 1;
e09342b5
TJB
8592 }
8593
c906108c
SS
8594 return i;
8595}
8596
c906108c 8597void
fba45db2 8598disable_watchpoints_before_interactive_call_start (void)
c906108c 8599{
c5aa993b 8600 struct breakpoint *b;
c906108c
SS
8601
8602 ALL_BREAKPOINTS (b)
c5aa993b 8603 {
cc60f2e3 8604 if (is_watchpoint (b) && breakpoint_enabled (b))
c5aa993b 8605 {
b5de0fa7 8606 b->enable_state = bp_call_disabled;
b60e7edf 8607 update_global_location_list (0);
c5aa993b
JM
8608 }
8609 }
c906108c
SS
8610}
8611
8612void
fba45db2 8613enable_watchpoints_after_interactive_call_stop (void)
c906108c 8614{
c5aa993b 8615 struct breakpoint *b;
c906108c
SS
8616
8617 ALL_BREAKPOINTS (b)
c5aa993b 8618 {
cc60f2e3 8619 if (is_watchpoint (b) && b->enable_state == bp_call_disabled)
c5aa993b 8620 {
b5de0fa7 8621 b->enable_state = bp_enabled;
b60e7edf 8622 update_global_location_list (1);
c5aa993b
JM
8623 }
8624 }
c906108c
SS
8625}
8626
8bea4e01
UW
8627void
8628disable_breakpoints_before_startup (void)
8629{
6c95b8df 8630 current_program_space->executing_startup = 1;
f8eba3c6 8631 update_global_location_list (0);
8bea4e01
UW
8632}
8633
8634void
8635enable_breakpoints_after_startup (void)
8636{
6c95b8df 8637 current_program_space->executing_startup = 0;
f8eba3c6 8638 breakpoint_re_set ();
8bea4e01
UW
8639}
8640
c906108c
SS
8641
8642/* Set a breakpoint that will evaporate an end of command
8643 at address specified by SAL.
8644 Restrict it to frame FRAME if FRAME is nonzero. */
8645
8646struct breakpoint *
a6d9a66e
UW
8647set_momentary_breakpoint (struct gdbarch *gdbarch, struct symtab_and_line sal,
8648 struct frame_id frame_id, enum bptype type)
c906108c 8649{
52f0bd74 8650 struct breakpoint *b;
edb3359d 8651
193facb3
JK
8652 /* If FRAME_ID is valid, it should be a real frame, not an inlined or
8653 tail-called one. */
8654 gdb_assert (!frame_id_artificial_p (frame_id));
edb3359d 8655
06edf0c0 8656 b = set_raw_breakpoint (gdbarch, sal, type, &momentary_breakpoint_ops);
b5de0fa7
EZ
8657 b->enable_state = bp_enabled;
8658 b->disposition = disp_donttouch;
818dd999 8659 b->frame_id = frame_id;
c906108c 8660
4a64f543
MS
8661 /* If we're debugging a multi-threaded program, then we want
8662 momentary breakpoints to be active in only a single thread of
8663 control. */
39f77062
KB
8664 if (in_thread_list (inferior_ptid))
8665 b->thread = pid_to_thread_id (inferior_ptid);
c906108c 8666
b60e7edf 8667 update_global_location_list_nothrow (1);
74960c60 8668
c906108c
SS
8669 return b;
8670}
611c83ae 8671
06edf0c0
PA
8672/* Make a momentary breakpoint based on the master breakpoint ORIG.
8673 The new breakpoint will have type TYPE, and use OPS as it
8674 breakpoint_ops. */
e58b0e63 8675
06edf0c0
PA
8676static struct breakpoint *
8677momentary_breakpoint_from_master (struct breakpoint *orig,
8678 enum bptype type,
c0a91b2b 8679 const struct breakpoint_ops *ops)
e58b0e63
PA
8680{
8681 struct breakpoint *copy;
8682
06edf0c0 8683 copy = set_raw_breakpoint_without_location (orig->gdbarch, type, ops);
e58b0e63 8684 copy->loc = allocate_bp_location (copy);
0e30163f 8685 set_breakpoint_location_function (copy->loc, 1);
e58b0e63 8686
a6d9a66e 8687 copy->loc->gdbarch = orig->loc->gdbarch;
e58b0e63
PA
8688 copy->loc->requested_address = orig->loc->requested_address;
8689 copy->loc->address = orig->loc->address;
8690 copy->loc->section = orig->loc->section;
6c95b8df 8691 copy->loc->pspace = orig->loc->pspace;
55aa24fb 8692 copy->loc->probe = orig->loc->probe;
e58b0e63 8693
f8eba3c6
TT
8694 if (orig->loc->source_file != NULL)
8695 copy->loc->source_file = xstrdup (orig->loc->source_file);
e58b0e63 8696
f8eba3c6 8697 copy->loc->line_number = orig->loc->line_number;
e58b0e63
PA
8698 copy->frame_id = orig->frame_id;
8699 copy->thread = orig->thread;
6c95b8df 8700 copy->pspace = orig->pspace;
e58b0e63
PA
8701
8702 copy->enable_state = bp_enabled;
8703 copy->disposition = disp_donttouch;
8704 copy->number = internal_breakpoint_number--;
8705
8706 update_global_location_list_nothrow (0);
8707 return copy;
8708}
8709
06edf0c0
PA
8710/* Make a deep copy of momentary breakpoint ORIG. Returns NULL if
8711 ORIG is NULL. */
8712
8713struct breakpoint *
8714clone_momentary_breakpoint (struct breakpoint *orig)
8715{
8716 /* If there's nothing to clone, then return nothing. */
8717 if (orig == NULL)
8718 return NULL;
8719
8720 return momentary_breakpoint_from_master (orig, orig->type, orig->ops);
8721}
8722
611c83ae 8723struct breakpoint *
a6d9a66e
UW
8724set_momentary_breakpoint_at_pc (struct gdbarch *gdbarch, CORE_ADDR pc,
8725 enum bptype type)
611c83ae
PA
8726{
8727 struct symtab_and_line sal;
8728
8729 sal = find_pc_line (pc, 0);
8730 sal.pc = pc;
8731 sal.section = find_pc_overlay (pc);
8732 sal.explicit_pc = 1;
8733
a6d9a66e 8734 return set_momentary_breakpoint (gdbarch, sal, null_frame_id, type);
611c83ae 8735}
c906108c 8736\f
c5aa993b 8737
c906108c
SS
8738/* Tell the user we have just set a breakpoint B. */
8739
8740static void
fba45db2 8741mention (struct breakpoint *b)
c906108c 8742{
348d480f 8743 b->ops->print_mention (b);
79a45e25 8744 if (ui_out_is_mi_like_p (current_uiout))
fb40c209 8745 return;
c906108c
SS
8746 printf_filtered ("\n");
8747}
c906108c 8748\f
c5aa993b 8749
0d381245 8750static struct bp_location *
39d61571 8751add_location_to_breakpoint (struct breakpoint *b,
0d381245
VP
8752 const struct symtab_and_line *sal)
8753{
8754 struct bp_location *loc, **tmp;
3742cc8b
YQ
8755 CORE_ADDR adjusted_address;
8756 struct gdbarch *loc_gdbarch = get_sal_arch (*sal);
8757
8758 if (loc_gdbarch == NULL)
8759 loc_gdbarch = b->gdbarch;
8760
8761 /* Adjust the breakpoint's address prior to allocating a location.
8762 Once we call allocate_bp_location(), that mostly uninitialized
8763 location will be placed on the location chain. Adjustment of the
8764 breakpoint may cause target_read_memory() to be called and we do
8765 not want its scan of the location chain to find a breakpoint and
8766 location that's only been partially initialized. */
8767 adjusted_address = adjust_breakpoint_address (loc_gdbarch,
8768 sal->pc, b->type);
0d381245 8769
39d61571 8770 loc = allocate_bp_location (b);
0d381245
VP
8771 for (tmp = &(b->loc); *tmp != NULL; tmp = &((*tmp)->next))
8772 ;
8773 *tmp = loc;
3742cc8b 8774
0d381245 8775 loc->requested_address = sal->pc;
3742cc8b 8776 loc->address = adjusted_address;
6c95b8df 8777 loc->pspace = sal->pspace;
55aa24fb 8778 loc->probe = sal->probe;
6c95b8df 8779 gdb_assert (loc->pspace != NULL);
0d381245 8780 loc->section = sal->section;
3742cc8b 8781 loc->gdbarch = loc_gdbarch;
f8eba3c6
TT
8782
8783 if (sal->symtab != NULL)
8784 loc->source_file = xstrdup (sal->symtab->filename);
8785 loc->line_number = sal->line;
8786
0e30163f
JK
8787 set_breakpoint_location_function (loc,
8788 sal->explicit_pc || sal->explicit_line);
0d381245
VP
8789 return loc;
8790}
514f746b
AR
8791\f
8792
8793/* Return 1 if LOC is pointing to a permanent breakpoint,
8794 return 0 otherwise. */
8795
8796static int
8797bp_loc_is_permanent (struct bp_location *loc)
8798{
8799 int len;
8800 CORE_ADDR addr;
1afeeb75 8801 const gdb_byte *bpoint;
514f746b 8802 gdb_byte *target_mem;
939c61fa
JK
8803 struct cleanup *cleanup;
8804 int retval = 0;
514f746b
AR
8805
8806 gdb_assert (loc != NULL);
8807
8808 addr = loc->address;
1afeeb75 8809 bpoint = gdbarch_breakpoint_from_pc (loc->gdbarch, &addr, &len);
514f746b 8810
939c61fa 8811 /* Software breakpoints unsupported? */
1afeeb75 8812 if (bpoint == NULL)
939c61fa
JK
8813 return 0;
8814
514f746b
AR
8815 target_mem = alloca (len);
8816
939c61fa
JK
8817 /* Enable the automatic memory restoration from breakpoints while
8818 we read the memory. Otherwise we could say about our temporary
8819 breakpoints they are permanent. */
6c95b8df
PA
8820 cleanup = save_current_space_and_thread ();
8821
8822 switch_to_program_space_and_thread (loc->pspace);
8823 make_show_memory_breakpoints_cleanup (0);
939c61fa 8824
514f746b 8825 if (target_read_memory (loc->address, target_mem, len) == 0
1afeeb75 8826 && memcmp (target_mem, bpoint, len) == 0)
939c61fa 8827 retval = 1;
514f746b 8828
939c61fa
JK
8829 do_cleanups (cleanup);
8830
8831 return retval;
514f746b
AR
8832}
8833
e7e0cddf
SS
8834/* Build a command list for the dprintf corresponding to the current
8835 settings of the dprintf style options. */
8836
8837static void
8838update_dprintf_command_list (struct breakpoint *b)
8839{
8840 char *dprintf_args = b->extra_string;
8841 char *printf_line = NULL;
8842
8843 if (!dprintf_args)
8844 return;
8845
8846 dprintf_args = skip_spaces (dprintf_args);
8847
8848 /* Allow a comma, as it may have terminated a location, but don't
8849 insist on it. */
8850 if (*dprintf_args == ',')
8851 ++dprintf_args;
8852 dprintf_args = skip_spaces (dprintf_args);
8853
8854 if (*dprintf_args != '"')
8855 error (_("Bad format string, missing '\"'."));
8856
d3ce09f5 8857 if (strcmp (dprintf_style, dprintf_style_gdb) == 0)
e7e0cddf 8858 printf_line = xstrprintf ("printf %s", dprintf_args);
d3ce09f5 8859 else if (strcmp (dprintf_style, dprintf_style_call) == 0)
e7e0cddf
SS
8860 {
8861 if (!dprintf_function)
8862 error (_("No function supplied for dprintf call"));
8863
8864 if (dprintf_channel && strlen (dprintf_channel) > 0)
8865 printf_line = xstrprintf ("call (void) %s (%s,%s)",
8866 dprintf_function,
8867 dprintf_channel,
8868 dprintf_args);
8869 else
8870 printf_line = xstrprintf ("call (void) %s (%s)",
8871 dprintf_function,
8872 dprintf_args);
8873 }
d3ce09f5
SS
8874 else if (strcmp (dprintf_style, dprintf_style_agent) == 0)
8875 {
8876 if (target_can_run_breakpoint_commands ())
8877 printf_line = xstrprintf ("agent-printf %s", dprintf_args);
8878 else
8879 {
8880 warning (_("Target cannot run dprintf commands, falling back to GDB printf"));
8881 printf_line = xstrprintf ("printf %s", dprintf_args);
8882 }
8883 }
e7e0cddf
SS
8884 else
8885 internal_error (__FILE__, __LINE__,
8886 _("Invalid dprintf style."));
8887
f28045c2 8888 gdb_assert (printf_line != NULL);
e7e0cddf 8889 /* Manufacture a printf/continue sequence. */
f28045c2
YQ
8890 {
8891 struct command_line *printf_cmd_line, *cont_cmd_line = NULL;
e7e0cddf 8892
f28045c2
YQ
8893 if (strcmp (dprintf_style, dprintf_style_agent) != 0)
8894 {
8895 cont_cmd_line = xmalloc (sizeof (struct command_line));
8896 cont_cmd_line->control_type = simple_control;
8897 cont_cmd_line->body_count = 0;
8898 cont_cmd_line->body_list = NULL;
8899 cont_cmd_line->next = NULL;
8900 cont_cmd_line->line = xstrdup ("continue");
8901 }
e7e0cddf 8902
f28045c2
YQ
8903 printf_cmd_line = xmalloc (sizeof (struct command_line));
8904 printf_cmd_line->control_type = simple_control;
8905 printf_cmd_line->body_count = 0;
8906 printf_cmd_line->body_list = NULL;
8907 printf_cmd_line->next = cont_cmd_line;
8908 printf_cmd_line->line = printf_line;
e7e0cddf 8909
f28045c2
YQ
8910 breakpoint_set_commands (b, printf_cmd_line);
8911 }
e7e0cddf
SS
8912}
8913
8914/* Update all dprintf commands, making their command lists reflect
8915 current style settings. */
8916
8917static void
8918update_dprintf_commands (char *args, int from_tty,
8919 struct cmd_list_element *c)
8920{
8921 struct breakpoint *b;
8922
8923 ALL_BREAKPOINTS (b)
8924 {
8925 if (b->type == bp_dprintf)
8926 update_dprintf_command_list (b);
8927 }
8928}
c3f6f71d 8929
018d34a4
VP
8930/* Create a breakpoint with SAL as location. Use ADDR_STRING
8931 as textual description of the location, and COND_STRING
db107f19 8932 as condition expression. */
018d34a4
VP
8933
8934static void
d9b3f62e
PA
8935init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
8936 struct symtabs_and_lines sals, char *addr_string,
f8eba3c6 8937 char *filter, char *cond_string,
e7e0cddf 8938 char *extra_string,
d9b3f62e
PA
8939 enum bptype type, enum bpdisp disposition,
8940 int thread, int task, int ignore_count,
c0a91b2b 8941 const struct breakpoint_ops *ops, int from_tty,
44f238bb
PA
8942 int enabled, int internal, unsigned flags,
8943 int display_canonical)
018d34a4 8944{
0d381245 8945 int i;
018d34a4
VP
8946
8947 if (type == bp_hardware_breakpoint)
8948 {
fbbd034e
AS
8949 int target_resources_ok;
8950
8951 i = hw_breakpoint_used_count ();
8952 target_resources_ok =
8953 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
018d34a4
VP
8954 i + 1, 0);
8955 if (target_resources_ok == 0)
8956 error (_("No hardware breakpoint support in the target."));
8957 else if (target_resources_ok < 0)
8958 error (_("Hardware breakpoints used exceeds limit."));
8959 }
8960
6c95b8df
PA
8961 gdb_assert (sals.nelts > 0);
8962
0d381245
VP
8963 for (i = 0; i < sals.nelts; ++i)
8964 {
8965 struct symtab_and_line sal = sals.sals[i];
8966 struct bp_location *loc;
8967
8968 if (from_tty)
5af949e3
UW
8969 {
8970 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
8971 if (!loc_gdbarch)
8972 loc_gdbarch = gdbarch;
8973
8974 describe_other_breakpoints (loc_gdbarch,
6c95b8df 8975 sal.pspace, sal.pc, sal.section, thread);
5af949e3 8976 }
0d381245
VP
8977
8978 if (i == 0)
8979 {
d9b3f62e 8980 init_raw_breakpoint (b, gdbarch, sal, type, ops);
0d381245 8981 b->thread = thread;
4a306c9a 8982 b->task = task;
855a6e68 8983
0d381245 8984 b->cond_string = cond_string;
e7e0cddf 8985 b->extra_string = extra_string;
0d381245 8986 b->ignore_count = ignore_count;
41447f92 8987 b->enable_state = enabled ? bp_enabled : bp_disabled;
0d381245 8988 b->disposition = disposition;
6c95b8df 8989
44f238bb
PA
8990 if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
8991 b->loc->inserted = 1;
8992
0fb4aa4b
PA
8993 if (type == bp_static_tracepoint)
8994 {
d9b3f62e 8995 struct tracepoint *t = (struct tracepoint *) b;
0fb4aa4b
PA
8996 struct static_tracepoint_marker marker;
8997
983af33b 8998 if (strace_marker_p (b))
0fb4aa4b
PA
8999 {
9000 /* We already know the marker exists, otherwise, we
9001 wouldn't see a sal for it. */
9002 char *p = &addr_string[3];
9003 char *endp;
9004 char *marker_str;
0fb4aa4b 9005
e9cafbcc 9006 p = skip_spaces (p);
0fb4aa4b 9007
e9cafbcc 9008 endp = skip_to_space (p);
0fb4aa4b
PA
9009
9010 marker_str = savestring (p, endp - p);
d9b3f62e 9011 t->static_trace_marker_id = marker_str;
0fb4aa4b 9012
3e43a32a
MS
9013 printf_filtered (_("Probed static tracepoint "
9014 "marker \"%s\"\n"),
d9b3f62e 9015 t->static_trace_marker_id);
0fb4aa4b
PA
9016 }
9017 else if (target_static_tracepoint_marker_at (sal.pc, &marker))
9018 {
d9b3f62e 9019 t->static_trace_marker_id = xstrdup (marker.str_id);
0fb4aa4b
PA
9020 release_static_tracepoint_marker (&marker);
9021
3e43a32a
MS
9022 printf_filtered (_("Probed static tracepoint "
9023 "marker \"%s\"\n"),
d9b3f62e 9024 t->static_trace_marker_id);
0fb4aa4b
PA
9025 }
9026 else
3e43a32a
MS
9027 warning (_("Couldn't determine the static "
9028 "tracepoint marker to probe"));
0fb4aa4b
PA
9029 }
9030
0d381245
VP
9031 loc = b->loc;
9032 }
9033 else
018d34a4 9034 {
39d61571 9035 loc = add_location_to_breakpoint (b, &sal);
44f238bb
PA
9036 if ((flags & CREATE_BREAKPOINT_FLAGS_INSERTED) != 0)
9037 loc->inserted = 1;
0d381245
VP
9038 }
9039
514f746b
AR
9040 if (bp_loc_is_permanent (loc))
9041 make_breakpoint_permanent (b);
9042
0d381245
VP
9043 if (b->cond_string)
9044 {
9045 char *arg = b->cond_string;
1bb9788d
TT
9046 loc->cond = parse_exp_1 (&arg, loc->address,
9047 block_for_pc (loc->address), 0);
0d381245 9048 if (*arg)
588ae58c 9049 error (_("Garbage '%s' follows condition"), arg);
018d34a4 9050 }
e7e0cddf
SS
9051
9052 /* Dynamic printf requires and uses additional arguments on the
9053 command line, otherwise it's an error. */
9054 if (type == bp_dprintf)
9055 {
9056 if (b->extra_string)
9057 update_dprintf_command_list (b);
9058 else
9059 error (_("Format string required"));
9060 }
9061 else if (b->extra_string)
588ae58c 9062 error (_("Garbage '%s' at end of command"), b->extra_string);
855a6e68 9063 }
018d34a4 9064
56435ebe 9065 b->display_canonical = display_canonical;
018d34a4
VP
9066 if (addr_string)
9067 b->addr_string = addr_string;
9068 else
9069 /* addr_string has to be used or breakpoint_re_set will delete
9070 me. */
5af949e3
UW
9071 b->addr_string
9072 = xstrprintf ("*%s", paddress (b->loc->gdbarch, b->loc->address));
f8eba3c6 9073 b->filter = filter;
d9b3f62e 9074}
018d34a4 9075
d9b3f62e
PA
9076static void
9077create_breakpoint_sal (struct gdbarch *gdbarch,
9078 struct symtabs_and_lines sals, char *addr_string,
f8eba3c6 9079 char *filter, char *cond_string,
e7e0cddf 9080 char *extra_string,
d9b3f62e
PA
9081 enum bptype type, enum bpdisp disposition,
9082 int thread, int task, int ignore_count,
c0a91b2b 9083 const struct breakpoint_ops *ops, int from_tty,
44f238bb
PA
9084 int enabled, int internal, unsigned flags,
9085 int display_canonical)
d9b3f62e
PA
9086{
9087 struct breakpoint *b;
9088 struct cleanup *old_chain;
9089
9090 if (is_tracepoint_type (type))
9091 {
9092 struct tracepoint *t;
9093
9094 t = XCNEW (struct tracepoint);
9095 b = &t->base;
9096 }
9097 else
9098 b = XNEW (struct breakpoint);
9099
9100 old_chain = make_cleanup (xfree, b);
9101
9102 init_breakpoint_sal (b, gdbarch,
9103 sals, addr_string,
e7e0cddf 9104 filter, cond_string, extra_string,
d9b3f62e
PA
9105 type, disposition,
9106 thread, task, ignore_count,
9107 ops, from_tty,
44f238bb
PA
9108 enabled, internal, flags,
9109 display_canonical);
d9b3f62e
PA
9110 discard_cleanups (old_chain);
9111
3ea46bff 9112 install_breakpoint (internal, b, 0);
018d34a4
VP
9113}
9114
9115/* Add SALS.nelts breakpoints to the breakpoint table. For each
9116 SALS.sal[i] breakpoint, include the corresponding ADDR_STRING[i]
9117 value. COND_STRING, if not NULL, specified the condition to be
9118 used for all breakpoints. Essentially the only case where
9119 SALS.nelts is not 1 is when we set a breakpoint on an overloaded
9120 function. In that case, it's still not possible to specify
9121 separate conditions for different overloaded functions, so
9122 we take just a single condition string.
9123
c3f6f71d 9124 NOTE: If the function succeeds, the caller is expected to cleanup
018d34a4 9125 the arrays ADDR_STRING, COND_STRING, and SALS (but not the
c3f6f71d
JM
9126 array contents). If the function fails (error() is called), the
9127 caller is expected to cleanups both the ADDR_STRING, COND_STRING,
4a64f543 9128 COND and SALS arrays and each of those arrays contents. */
c906108c
SS
9129
9130static void
8cdf0e15 9131create_breakpoints_sal (struct gdbarch *gdbarch,
7efd8fc2 9132 struct linespec_result *canonical,
e7e0cddf 9133 char *cond_string, char *extra_string,
8cdf0e15
VP
9134 enum bptype type, enum bpdisp disposition,
9135 int thread, int task, int ignore_count,
c0a91b2b 9136 const struct breakpoint_ops *ops, int from_tty,
44f238bb 9137 int enabled, int internal, unsigned flags)
c906108c 9138{
018d34a4 9139 int i;
f8eba3c6 9140 struct linespec_sals *lsal;
cc59ec59 9141
f8eba3c6
TT
9142 if (canonical->pre_expanded)
9143 gdb_assert (VEC_length (linespec_sals, canonical->sals) == 1);
9144
9145 for (i = 0; VEC_iterate (linespec_sals, canonical->sals, i, lsal); ++i)
c3f6f71d 9146 {
f8eba3c6
TT
9147 /* Note that 'addr_string' can be NULL in the case of a plain
9148 'break', without arguments. */
9149 char *addr_string = (canonical->addr_string
9150 ? xstrdup (canonical->addr_string)
9151 : NULL);
9152 char *filter_string = lsal->canonical ? xstrdup (lsal->canonical) : NULL;
9153 struct cleanup *inner = make_cleanup (xfree, addr_string);
0d381245 9154
f8eba3c6
TT
9155 make_cleanup (xfree, filter_string);
9156 create_breakpoint_sal (gdbarch, lsal->sals,
9157 addr_string,
9158 filter_string,
e7e0cddf
SS
9159 cond_string, extra_string,
9160 type, disposition,
84f4c1fe 9161 thread, task, ignore_count, ops,
44f238bb 9162 from_tty, enabled, internal, flags,
56435ebe 9163 canonical->special_display);
f8eba3c6 9164 discard_cleanups (inner);
c3f6f71d 9165 }
c3f6f71d 9166}
c906108c 9167
9998af43 9168/* Parse ADDRESS which is assumed to be a SAL specification possibly
c3f6f71d 9169 followed by conditionals. On return, SALS contains an array of SAL
4a64f543 9170 addresses found. ADDR_STRING contains a vector of (canonical)
9998af43
TJB
9171 address strings. ADDRESS points to the end of the SAL.
9172
9173 The array and the line spec strings are allocated on the heap, it is
9174 the caller's responsibility to free them. */
c906108c 9175
b9362cc7 9176static void
c3f6f71d 9177parse_breakpoint_sals (char **address,
58438ac1 9178 struct linespec_result *canonical)
c3f6f71d 9179{
c3f6f71d 9180 /* If no arg given, or if first arg is 'if ', use the default
4a64f543 9181 breakpoint. */
c3f6f71d
JM
9182 if ((*address) == NULL
9183 || (strncmp ((*address), "if", 2) == 0 && isspace ((*address)[2])))
c906108c 9184 {
1bfeeb0f
JL
9185 /* The last displayed codepoint, if it's valid, is our default breakpoint
9186 address. */
9187 if (last_displayed_sal_is_valid ())
c906108c 9188 {
f8eba3c6 9189 struct linespec_sals lsal;
c3f6f71d 9190 struct symtab_and_line sal;
1c8cdcb1 9191 CORE_ADDR pc;
cc59ec59 9192
4a64f543 9193 init_sal (&sal); /* Initialize to zeroes. */
f8eba3c6 9194 lsal.sals.sals = (struct symtab_and_line *)
c906108c 9195 xmalloc (sizeof (struct symtab_and_line));
1bfeeb0f
JL
9196
9197 /* Set sal's pspace, pc, symtab, and line to the values
1c8cdcb1
JK
9198 corresponding to the last call to print_frame_info.
9199 Be sure to reinitialize LINE with NOTCURRENT == 0
9200 as the breakpoint line number is inappropriate otherwise.
9201 find_pc_line would adjust PC, re-set it back. */
1bfeeb0f 9202 get_last_displayed_sal (&sal);
1c8cdcb1
JK
9203 pc = sal.pc;
9204 sal = find_pc_line (pc, 0);
00903456 9205
4a64f543 9206 /* "break" without arguments is equivalent to "break *PC"
1bfeeb0f
JL
9207 where PC is the last displayed codepoint's address. So
9208 make sure to set sal.explicit_pc to prevent GDB from
9209 trying to expand the list of sals to include all other
9210 instances with the same symtab and line. */
1c8cdcb1 9211 sal.pc = pc;
00903456
JK
9212 sal.explicit_pc = 1;
9213
f8eba3c6
TT
9214 lsal.sals.sals[0] = sal;
9215 lsal.sals.nelts = 1;
9216 lsal.canonical = NULL;
9217
9218 VEC_safe_push (linespec_sals, canonical->sals, &lsal);
c906108c
SS
9219 }
9220 else
8a3fe4f8 9221 error (_("No default breakpoint address now."));
c906108c
SS
9222 }
9223 else
9224 {
cc80f267
JK
9225 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
9226
c906108c 9227 /* Force almost all breakpoints to be in terms of the
4a64f543
MS
9228 current_source_symtab (which is decode_line_1's default).
9229 This should produce the results we want almost all of the
cc80f267
JK
9230 time while leaving default_breakpoint_* alone.
9231
9232 ObjC: However, don't match an Objective-C method name which
9233 may have a '+' or '-' succeeded by a '['. */
9234 if (last_displayed_sal_is_valid ()
9235 && (!cursal.symtab
9236 || ((strchr ("+-", (*address)[0]) != NULL)
9237 && ((*address)[1] != '['))))
f8eba3c6
TT
9238 decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
9239 get_last_displayed_symtab (),
9240 get_last_displayed_line (),
9241 canonical, NULL, NULL);
c906108c 9242 else
f8eba3c6 9243 decode_line_full (address, DECODE_LINE_FUNFIRSTLINE,
cc80f267 9244 cursal.symtab, cursal.line, canonical, NULL, NULL);
c906108c 9245 }
c3f6f71d 9246}
c906108c 9247
c906108c 9248
c3f6f71d 9249/* Convert each SAL into a real PC. Verify that the PC can be
4a64f543 9250 inserted as a breakpoint. If it can't throw an error. */
c906108c 9251
b9362cc7 9252static void
23e7acfb 9253breakpoint_sals_to_pc (struct symtabs_and_lines *sals)
c3f6f71d
JM
9254{
9255 int i;
cc59ec59 9256
c3f6f71d 9257 for (i = 0; i < sals->nelts; i++)
ee53e872 9258 resolve_sal_pc (&sals->sals[i]);
c3f6f71d
JM
9259}
9260
7a697b8d
SS
9261/* Fast tracepoints may have restrictions on valid locations. For
9262 instance, a fast tracepoint using a jump instead of a trap will
9263 likely have to overwrite more bytes than a trap would, and so can
9264 only be placed where the instruction is longer than the jump, or a
9265 multi-instruction sequence does not have a jump into the middle of
9266 it, etc. */
9267
9268static void
9269check_fast_tracepoint_sals (struct gdbarch *gdbarch,
9270 struct symtabs_and_lines *sals)
9271{
9272 int i, rslt;
9273 struct symtab_and_line *sal;
9274 char *msg;
9275 struct cleanup *old_chain;
9276
9277 for (i = 0; i < sals->nelts; i++)
9278 {
f8eba3c6
TT
9279 struct gdbarch *sarch;
9280
7a697b8d
SS
9281 sal = &sals->sals[i];
9282
f8eba3c6
TT
9283 sarch = get_sal_arch (*sal);
9284 /* We fall back to GDBARCH if there is no architecture
9285 associated with SAL. */
9286 if (sarch == NULL)
9287 sarch = gdbarch;
9288 rslt = gdbarch_fast_tracepoint_valid_at (sarch, sal->pc,
7a697b8d
SS
9289 NULL, &msg);
9290 old_chain = make_cleanup (xfree, msg);
9291
9292 if (!rslt)
9293 error (_("May not have a fast tracepoint at 0x%s%s"),
f8eba3c6 9294 paddress (sarch, sal->pc), (msg ? msg : ""));
7a697b8d
SS
9295
9296 do_cleanups (old_chain);
9297 }
9298}
9299
af4908ba
KS
9300/* Issue an invalid thread ID error. */
9301
9302static void ATTRIBUTE_NORETURN
9303invalid_thread_id_error (int id)
9304{
9305 error (_("Unknown thread %d."), id);
9306}
9307
018d34a4
VP
9308/* Given TOK, a string specification of condition and thread, as
9309 accepted by the 'break' command, extract the condition
9310 string and thread number and set *COND_STRING and *THREAD.
4a64f543 9311 PC identifies the context at which the condition should be parsed.
018d34a4
VP
9312 If no condition is found, *COND_STRING is set to NULL.
9313 If no thread is found, *THREAD is set to -1. */
d634f2de
JB
9314
9315static void
9316find_condition_and_thread (char *tok, CORE_ADDR pc,
e7e0cddf
SS
9317 char **cond_string, int *thread, int *task,
9318 char **rest)
018d34a4
VP
9319{
9320 *cond_string = NULL;
9321 *thread = -1;
ed1d1739
KS
9322 *task = 0;
9323 *rest = NULL;
9324
018d34a4
VP
9325 while (tok && *tok)
9326 {
9327 char *end_tok;
9328 int toklen;
9329 char *cond_start = NULL;
9330 char *cond_end = NULL;
cc59ec59 9331
e9cafbcc 9332 tok = skip_spaces (tok);
e7e0cddf
SS
9333
9334 if ((*tok == '"' || *tok == ',') && rest)
9335 {
9336 *rest = savestring (tok, strlen (tok));
9337 return;
9338 }
9339
e9cafbcc 9340 end_tok = skip_to_space (tok);
d634f2de 9341
018d34a4 9342 toklen = end_tok - tok;
d634f2de 9343
018d34a4
VP
9344 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
9345 {
f7545552
TT
9346 struct expression *expr;
9347
018d34a4 9348 tok = cond_start = end_tok + 1;
1bb9788d 9349 expr = parse_exp_1 (&tok, pc, block_for_pc (pc), 0);
f7545552 9350 xfree (expr);
018d34a4 9351 cond_end = tok;
d634f2de 9352 *cond_string = savestring (cond_start, cond_end - cond_start);
018d34a4
VP
9353 }
9354 else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
9355 {
9356 char *tmptok;
d634f2de 9357
018d34a4
VP
9358 tok = end_tok + 1;
9359 tmptok = tok;
9360 *thread = strtol (tok, &tok, 0);
9361 if (tok == tmptok)
9362 error (_("Junk after thread keyword."));
9363 if (!valid_thread_id (*thread))
af4908ba 9364 invalid_thread_id_error (*thread);
018d34a4 9365 }
4a306c9a
JB
9366 else if (toklen >= 1 && strncmp (tok, "task", toklen) == 0)
9367 {
9368 char *tmptok;
9369
9370 tok = end_tok + 1;
9371 tmptok = tok;
9372 *task = strtol (tok, &tok, 0);
9373 if (tok == tmptok)
9374 error (_("Junk after task keyword."));
9375 if (!valid_task_id (*task))
b6199126 9376 error (_("Unknown task %d."), *task);
4a306c9a 9377 }
e7e0cddf
SS
9378 else if (rest)
9379 {
9380 *rest = savestring (tok, strlen (tok));
ccab2054 9381 return;
e7e0cddf 9382 }
018d34a4
VP
9383 else
9384 error (_("Junk at end of arguments."));
9385 }
9386}
9387
0fb4aa4b
PA
9388/* Decode a static tracepoint marker spec. */
9389
9390static struct symtabs_and_lines
9391decode_static_tracepoint_spec (char **arg_p)
9392{
9393 VEC(static_tracepoint_marker_p) *markers = NULL;
9394 struct symtabs_and_lines sals;
0fb4aa4b
PA
9395 struct cleanup *old_chain;
9396 char *p = &(*arg_p)[3];
9397 char *endp;
9398 char *marker_str;
9399 int i;
9400
e9cafbcc 9401 p = skip_spaces (p);
0fb4aa4b 9402
e9cafbcc 9403 endp = skip_to_space (p);
0fb4aa4b
PA
9404
9405 marker_str = savestring (p, endp - p);
9406 old_chain = make_cleanup (xfree, marker_str);
9407
9408 markers = target_static_tracepoint_markers_by_strid (marker_str);
9409 if (VEC_empty(static_tracepoint_marker_p, markers))
9410 error (_("No known static tracepoint marker named %s"), marker_str);
9411
9412 sals.nelts = VEC_length(static_tracepoint_marker_p, markers);
9413 sals.sals = xmalloc (sizeof *sals.sals * sals.nelts);
9414
9415 for (i = 0; i < sals.nelts; i++)
9416 {
9417 struct static_tracepoint_marker *marker;
9418
9419 marker = VEC_index (static_tracepoint_marker_p, markers, i);
9420
9421 init_sal (&sals.sals[i]);
9422
9423 sals.sals[i] = find_pc_line (marker->address, 0);
9424 sals.sals[i].pc = marker->address;
9425
9426 release_static_tracepoint_marker (marker);
9427 }
9428
9429 do_cleanups (old_chain);
9430
9431 *arg_p = endp;
9432 return sals;
9433}
9434
fd9b8c24
PA
9435/* Set a breakpoint. This function is shared between CLI and MI
9436 functions for setting a breakpoint. This function has two major
9437 modes of operations, selected by the PARSE_CONDITION_AND_THREAD
9438 parameter. If non-zero, the function will parse arg, extracting
4a64f543
MS
9439 breakpoint location, address and thread. Otherwise, ARG is just
9440 the location of breakpoint, with condition and thread specified by
9441 the COND_STRING and THREAD parameters. If INTERNAL is non-zero,
9442 the breakpoint number will be allocated from the internal
9443 breakpoint count. Returns true if any breakpoint was created;
9444 false otherwise. */
0101ce28 9445
8cdf0e15
VP
9446int
9447create_breakpoint (struct gdbarch *gdbarch,
e7e0cddf
SS
9448 char *arg, char *cond_string,
9449 int thread, char *extra_string,
8cdf0e15 9450 int parse_condition_and_thread,
0fb4aa4b 9451 int tempflag, enum bptype type_wanted,
8cdf0e15
VP
9452 int ignore_count,
9453 enum auto_boolean pending_break_support,
c0a91b2b 9454 const struct breakpoint_ops *ops,
44f238bb
PA
9455 int from_tty, int enabled, int internal,
9456 unsigned flags)
c3f6f71d 9457{
b78a6381 9458 volatile struct gdb_exception e;
f8eba3c6 9459 char *copy_arg = NULL;
c3f6f71d 9460 char *addr_start = arg;
7efd8fc2 9461 struct linespec_result canonical;
c3f6f71d 9462 struct cleanup *old_chain;
80c99de1 9463 struct cleanup *bkpt_chain = NULL;
0101ce28 9464 int pending = 0;
4a306c9a 9465 int task = 0;
86b17b60 9466 int prev_bkpt_count = breakpoint_count;
c3f6f71d 9467
348d480f
PA
9468 gdb_assert (ops != NULL);
9469
7efd8fc2 9470 init_linespec_result (&canonical);
c3f6f71d 9471
b78a6381
TT
9472 TRY_CATCH (e, RETURN_MASK_ALL)
9473 {
983af33b
SDJ
9474 ops->create_sals_from_address (&arg, &canonical, type_wanted,
9475 addr_start, &copy_arg);
b78a6381 9476 }
0101ce28
JJ
9477
9478 /* If caller is interested in rc value from parse, set value. */
05ff989b 9479 switch (e.reason)
0101ce28 9480 {
983af33b
SDJ
9481 case GDB_NO_ERROR:
9482 if (VEC_empty (linespec_sals, canonical.sals))
9483 return 0;
9484 break;
05ff989b
AC
9485 case RETURN_ERROR:
9486 switch (e.error)
0101ce28 9487 {
05ff989b 9488 case NOT_FOUND_ERROR:
0101ce28 9489
05ff989b
AC
9490 /* If pending breakpoint support is turned off, throw
9491 error. */
fa8d40ab
JJ
9492
9493 if (pending_break_support == AUTO_BOOLEAN_FALSE)
723a2275
VP
9494 throw_exception (e);
9495
9496 exception_print (gdb_stderr, e);
fa8d40ab 9497
05ff989b
AC
9498 /* If pending breakpoint support is auto query and the user
9499 selects no, then simply return the error code. */
059fb39f 9500 if (pending_break_support == AUTO_BOOLEAN_AUTO
bfccc43c
YQ
9501 && !nquery (_("Make %s pending on future shared library load? "),
9502 bptype_string (type_wanted)))
fd9b8c24 9503 return 0;
fa8d40ab 9504
05ff989b
AC
9505 /* At this point, either the user was queried about setting
9506 a pending breakpoint and selected yes, or pending
9507 breakpoint behavior is on and thus a pending breakpoint
9508 is defaulted on behalf of the user. */
f8eba3c6
TT
9509 {
9510 struct linespec_sals lsal;
9511
9512 copy_arg = xstrdup (addr_start);
9513 lsal.canonical = xstrdup (copy_arg);
9514 lsal.sals.nelts = 1;
9515 lsal.sals.sals = XNEW (struct symtab_and_line);
9516 init_sal (&lsal.sals.sals[0]);
9517 pending = 1;
9518 VEC_safe_push (linespec_sals, canonical.sals, &lsal);
9519 }
05ff989b
AC
9520 break;
9521 default:
98deb0da 9522 throw_exception (e);
0101ce28 9523 }
2abae994 9524 break;
05ff989b 9525 default:
983af33b 9526 throw_exception (e);
0101ce28 9527 }
c3f6f71d 9528
4a64f543 9529 /* Create a chain of things that always need to be cleaned up. */
f8eba3c6 9530 old_chain = make_cleanup_destroy_linespec_result (&canonical);
c3f6f71d 9531
c3f6f71d
JM
9532 /* ----------------------------- SNIP -----------------------------
9533 Anything added to the cleanup chain beyond this point is assumed
9534 to be part of a breakpoint. If the breakpoint create succeeds
80c99de1
PA
9535 then the memory is not reclaimed. */
9536 bkpt_chain = make_cleanup (null_cleanup, 0);
c3f6f71d 9537
c3f6f71d
JM
9538 /* Resolve all line numbers to PC's and verify that the addresses
9539 are ok for the target. */
0101ce28 9540 if (!pending)
f8eba3c6
TT
9541 {
9542 int ix;
9543 struct linespec_sals *iter;
9544
9545 for (ix = 0; VEC_iterate (linespec_sals, canonical.sals, ix, iter); ++ix)
9546 breakpoint_sals_to_pc (&iter->sals);
9547 }
c3f6f71d 9548
7a697b8d 9549 /* Fast tracepoints may have additional restrictions on location. */
bfccc43c 9550 if (!pending && type_wanted == bp_fast_tracepoint)
f8eba3c6
TT
9551 {
9552 int ix;
9553 struct linespec_sals *iter;
9554
9555 for (ix = 0; VEC_iterate (linespec_sals, canonical.sals, ix, iter); ++ix)
9556 check_fast_tracepoint_sals (gdbarch, &iter->sals);
9557 }
7a697b8d 9558
c3f6f71d
JM
9559 /* Verify that condition can be parsed, before setting any
9560 breakpoints. Allocate a separate condition expression for each
4a64f543 9561 breakpoint. */
0101ce28 9562 if (!pending)
c3f6f71d 9563 {
f8eba3c6
TT
9564 struct linespec_sals *lsal;
9565
9566 lsal = VEC_index (linespec_sals, canonical.sals, 0);
9567
2f069f6f 9568 if (parse_condition_and_thread)
72b2ff0e 9569 {
e7e0cddf 9570 char *rest;
72b2ff0e
VP
9571 /* Here we only parse 'arg' to separate condition
9572 from thread number, so parsing in context of first
9573 sal is OK. When setting the breakpoint we'll
9574 re-parse it in context of each sal. */
ed1d1739 9575
f8eba3c6 9576 find_condition_and_thread (arg, lsal->sals.sals[0].pc, &cond_string,
e7e0cddf 9577 &thread, &task, &rest);
72b2ff0e
VP
9578 if (cond_string)
9579 make_cleanup (xfree, cond_string);
e7e0cddf
SS
9580 if (rest)
9581 make_cleanup (xfree, rest);
9582 if (rest)
9583 extra_string = rest;
72b2ff0e 9584 }
2f069f6f 9585 else
72b2ff0e
VP
9586 {
9587 /* Create a private copy of condition string. */
9588 if (cond_string)
9589 {
9590 cond_string = xstrdup (cond_string);
9591 make_cleanup (xfree, cond_string);
9592 }
e7e0cddf
SS
9593 /* Create a private copy of any extra string. */
9594 if (extra_string)
9595 {
9596 extra_string = xstrdup (extra_string);
9597 make_cleanup (xfree, extra_string);
9598 }
72b2ff0e 9599 }
0fb4aa4b 9600
983af33b 9601 ops->create_breakpoints_sal (gdbarch, &canonical, lsal,
e7e0cddf 9602 cond_string, extra_string, type_wanted,
d9b3f62e
PA
9603 tempflag ? disp_del : disp_donttouch,
9604 thread, task, ignore_count, ops,
44f238bb 9605 from_tty, enabled, internal, flags);
c906108c 9606 }
0101ce28
JJ
9607 else
9608 {
0101ce28
JJ
9609 struct breakpoint *b;
9610
0101ce28
JJ
9611 make_cleanup (xfree, copy_arg);
9612
bfccc43c
YQ
9613 if (is_tracepoint_type (type_wanted))
9614 {
9615 struct tracepoint *t;
9616
9617 t = XCNEW (struct tracepoint);
9618 b = &t->base;
9619 }
9620 else
9621 b = XNEW (struct breakpoint);
9622
9623 init_raw_breakpoint_without_location (b, gdbarch, type_wanted, ops);
9624
f8eba3c6 9625 b->addr_string = copy_arg;
e12c7713
MK
9626 if (parse_condition_and_thread)
9627 b->cond_string = NULL;
9628 else
9629 {
9630 /* Create a private copy of condition string. */
9631 if (cond_string)
9632 {
9633 cond_string = xstrdup (cond_string);
9634 make_cleanup (xfree, cond_string);
9635 }
9636 b->cond_string = cond_string;
9637 }
e7e0cddf 9638 b->extra_string = NULL;
0101ce28 9639 b->ignore_count = ignore_count;
0101ce28 9640 b->disposition = tempflag ? disp_del : disp_donttouch;
0d381245 9641 b->condition_not_parsed = 1;
41447f92 9642 b->enable_state = enabled ? bp_enabled : bp_disabled;
cc72b2a2
KP
9643 if ((type_wanted != bp_breakpoint
9644 && type_wanted != bp_hardware_breakpoint) || thread != -1)
f8eba3c6 9645 b->pspace = current_program_space;
8bea4e01 9646
bfccc43c 9647 install_breakpoint (internal, b, 0);
0101ce28
JJ
9648 }
9649
f8eba3c6 9650 if (VEC_length (linespec_sals, canonical.sals) > 1)
95a42b64 9651 {
3e43a32a
MS
9652 warning (_("Multiple breakpoints were set.\nUse the "
9653 "\"delete\" command to delete unwanted breakpoints."));
86b17b60 9654 prev_breakpoint_count = prev_bkpt_count;
95a42b64
TT
9655 }
9656
80c99de1
PA
9657 /* That's it. Discard the cleanups for data inserted into the
9658 breakpoint. */
9659 discard_cleanups (bkpt_chain);
9660 /* But cleanup everything else. */
c3f6f71d 9661 do_cleanups (old_chain);
217dc9e2 9662
80c99de1 9663 /* error call may happen here - have BKPT_CHAIN already discarded. */
217dc9e2 9664 update_global_location_list (1);
fd9b8c24
PA
9665
9666 return 1;
c3f6f71d 9667}
c906108c 9668
348d480f 9669/* Set a breakpoint.
72b2ff0e
VP
9670 ARG is a string describing breakpoint address,
9671 condition, and thread.
9672 FLAG specifies if a breakpoint is hardware on,
9673 and if breakpoint is temporary, using BP_HARDWARE_FLAG
9674 and BP_TEMPFLAG. */
348d480f 9675
98deb0da 9676static void
72b2ff0e 9677break_command_1 (char *arg, int flag, int from_tty)
c3f6f71d 9678{
72b2ff0e 9679 int tempflag = flag & BP_TEMPFLAG;
0fb4aa4b
PA
9680 enum bptype type_wanted = (flag & BP_HARDWAREFLAG
9681 ? bp_hardware_breakpoint
9682 : bp_breakpoint);
55aa24fb
SDJ
9683 struct breakpoint_ops *ops;
9684 const char *arg_cp = arg;
9685
9686 /* Matching breakpoints on probes. */
9687 if (arg && probe_linespec_to_ops (&arg_cp) != NULL)
9688 ops = &bkpt_probe_breakpoint_ops;
9689 else
9690 ops = &bkpt_breakpoint_ops;
c3f6f71d 9691
8cdf0e15
VP
9692 create_breakpoint (get_current_arch (),
9693 arg,
e7e0cddf 9694 NULL, 0, NULL, 1 /* parse arg */,
0fb4aa4b 9695 tempflag, type_wanted,
8cdf0e15
VP
9696 0 /* Ignore count */,
9697 pending_break_support,
55aa24fb 9698 ops,
8cdf0e15 9699 from_tty,
84f4c1fe 9700 1 /* enabled */,
44f238bb
PA
9701 0 /* internal */,
9702 0);
c906108c
SS
9703}
9704
c906108c
SS
9705/* Helper function for break_command_1 and disassemble_command. */
9706
9707void
fba45db2 9708resolve_sal_pc (struct symtab_and_line *sal)
c906108c
SS
9709{
9710 CORE_ADDR pc;
9711
9712 if (sal->pc == 0 && sal->symtab != NULL)
9713 {
9714 if (!find_line_pc (sal->symtab, sal->line, &pc))
8a3fe4f8 9715 error (_("No line %d in file \"%s\"."),
c906108c
SS
9716 sal->line, sal->symtab->filename);
9717 sal->pc = pc;
6a048695 9718
4a64f543
MS
9719 /* If this SAL corresponds to a breakpoint inserted using a line
9720 number, then skip the function prologue if necessary. */
6a048695 9721 if (sal->explicit_line)
059acae7 9722 skip_prologue_sal (sal);
c906108c
SS
9723 }
9724
9725 if (sal->section == 0 && sal->symtab != NULL)
9726 {
9727 struct blockvector *bv;
c5aa993b
JM
9728 struct block *b;
9729 struct symbol *sym;
c906108c 9730
801e3a5b 9731 bv = blockvector_for_pc_sect (sal->pc, 0, &b, sal->symtab);
c906108c
SS
9732 if (bv != NULL)
9733 {
7f0df278 9734 sym = block_linkage_function (b);
c906108c
SS
9735 if (sym != NULL)
9736 {
9737 fixup_symbol_section (sym, sal->symtab->objfile);
714835d5 9738 sal->section = SYMBOL_OBJ_SECTION (sym);
c906108c
SS
9739 }
9740 else
9741 {
4a64f543
MS
9742 /* It really is worthwhile to have the section, so we'll
9743 just have to look harder. This case can be executed
9744 if we have line numbers but no functions (as can
9745 happen in assembly source). */
c906108c 9746
c5aa993b 9747 struct minimal_symbol *msym;
6c95b8df
PA
9748 struct cleanup *old_chain = save_current_space_and_thread ();
9749
9750 switch_to_program_space_and_thread (sal->pspace);
c906108c
SS
9751
9752 msym = lookup_minimal_symbol_by_pc (sal->pc);
9753 if (msym)
714835d5 9754 sal->section = SYMBOL_OBJ_SECTION (msym);
6c95b8df
PA
9755
9756 do_cleanups (old_chain);
c906108c
SS
9757 }
9758 }
9759 }
9760}
9761
9762void
fba45db2 9763break_command (char *arg, int from_tty)
c906108c 9764{
db107f19 9765 break_command_1 (arg, 0, from_tty);
c906108c
SS
9766}
9767
c906108c 9768void
fba45db2 9769tbreak_command (char *arg, int from_tty)
c906108c 9770{
db107f19 9771 break_command_1 (arg, BP_TEMPFLAG, from_tty);
c906108c
SS
9772}
9773
c906108c 9774static void
fba45db2 9775hbreak_command (char *arg, int from_tty)
c906108c 9776{
db107f19 9777 break_command_1 (arg, BP_HARDWAREFLAG, from_tty);
c906108c
SS
9778}
9779
9780static void
fba45db2 9781thbreak_command (char *arg, int from_tty)
c906108c 9782{
db107f19 9783 break_command_1 (arg, (BP_TEMPFLAG | BP_HARDWAREFLAG), from_tty);
c906108c
SS
9784}
9785
9786static void
fba45db2 9787stop_command (char *arg, int from_tty)
c906108c 9788{
a3f17187 9789 printf_filtered (_("Specify the type of breakpoint to set.\n\
c906108c 9790Usage: stop in <function | address>\n\
a3f17187 9791 stop at <line>\n"));
c906108c
SS
9792}
9793
9794static void
fba45db2 9795stopin_command (char *arg, int from_tty)
c906108c
SS
9796{
9797 int badInput = 0;
9798
c5aa993b 9799 if (arg == (char *) NULL)
c906108c
SS
9800 badInput = 1;
9801 else if (*arg != '*')
9802 {
9803 char *argptr = arg;
9804 int hasColon = 0;
9805
4a64f543 9806 /* Look for a ':'. If this is a line number specification, then
53a5351d 9807 say it is bad, otherwise, it should be an address or
4a64f543 9808 function/method name. */
c906108c 9809 while (*argptr && !hasColon)
c5aa993b
JM
9810 {
9811 hasColon = (*argptr == ':');
9812 argptr++;
9813 }
c906108c
SS
9814
9815 if (hasColon)
c5aa993b 9816 badInput = (*argptr != ':'); /* Not a class::method */
c906108c 9817 else
c5aa993b 9818 badInput = isdigit (*arg); /* a simple line number */
c906108c
SS
9819 }
9820
9821 if (badInput)
a3f17187 9822 printf_filtered (_("Usage: stop in <function | address>\n"));
c906108c 9823 else
db107f19 9824 break_command_1 (arg, 0, from_tty);
c906108c
SS
9825}
9826
9827static void
fba45db2 9828stopat_command (char *arg, int from_tty)
c906108c
SS
9829{
9830 int badInput = 0;
9831
c5aa993b 9832 if (arg == (char *) NULL || *arg == '*') /* no line number */
c906108c
SS
9833 badInput = 1;
9834 else
9835 {
9836 char *argptr = arg;
9837 int hasColon = 0;
9838
4a64f543
MS
9839 /* Look for a ':'. If there is a '::' then get out, otherwise
9840 it is probably a line number. */
c906108c 9841 while (*argptr && !hasColon)
c5aa993b
JM
9842 {
9843 hasColon = (*argptr == ':');
9844 argptr++;
9845 }
c906108c
SS
9846
9847 if (hasColon)
c5aa993b 9848 badInput = (*argptr == ':'); /* we have class::method */
c906108c 9849 else
c5aa993b 9850 badInput = !isdigit (*arg); /* not a line number */
c906108c
SS
9851 }
9852
9853 if (badInput)
a3f17187 9854 printf_filtered (_("Usage: stop at <line>\n"));
c906108c 9855 else
db107f19 9856 break_command_1 (arg, 0, from_tty);
c906108c
SS
9857}
9858
e7e0cddf
SS
9859/* The dynamic printf command is mostly like a regular breakpoint, but
9860 with a prewired command list consisting of a single output command,
9861 built from extra arguments supplied on the dprintf command
9862 line. */
9863
da821c7b 9864static void
e7e0cddf
SS
9865dprintf_command (char *arg, int from_tty)
9866{
9867 create_breakpoint (get_current_arch (),
9868 arg,
9869 NULL, 0, NULL, 1 /* parse arg */,
9870 0, bp_dprintf,
9871 0 /* Ignore count */,
9872 pending_break_support,
9873 &dprintf_breakpoint_ops,
9874 from_tty,
9875 1 /* enabled */,
9876 0 /* internal */,
9877 0);
9878}
9879
d3ce09f5
SS
9880static void
9881agent_printf_command (char *arg, int from_tty)
9882{
9883 error (_("May only run agent-printf on the target"));
9884}
9885
f1310107
TJB
9886/* Implement the "breakpoint_hit" breakpoint_ops method for
9887 ranged breakpoints. */
9888
9889static int
9890breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
9891 struct address_space *aspace,
09ac7c10
TT
9892 CORE_ADDR bp_addr,
9893 const struct target_waitstatus *ws)
f1310107 9894{
09ac7c10 9895 if (ws->kind != TARGET_WAITKIND_STOPPED
a493e3e2 9896 || ws->value.sig != GDB_SIGNAL_TRAP)
09ac7c10
TT
9897 return 0;
9898
f1310107
TJB
9899 return breakpoint_address_match_range (bl->pspace->aspace, bl->address,
9900 bl->length, aspace, bp_addr);
9901}
9902
9903/* Implement the "resources_needed" breakpoint_ops method for
9904 ranged breakpoints. */
9905
9906static int
9907resources_needed_ranged_breakpoint (const struct bp_location *bl)
9908{
9909 return target_ranged_break_num_registers ();
9910}
9911
9912/* Implement the "print_it" breakpoint_ops method for
9913 ranged breakpoints. */
9914
9915static enum print_stop_action
348d480f 9916print_it_ranged_breakpoint (bpstat bs)
f1310107 9917{
348d480f 9918 struct breakpoint *b = bs->breakpoint_at;
f1310107 9919 struct bp_location *bl = b->loc;
79a45e25 9920 struct ui_out *uiout = current_uiout;
f1310107
TJB
9921
9922 gdb_assert (b->type == bp_hardware_breakpoint);
9923
9924 /* Ranged breakpoints have only one location. */
9925 gdb_assert (bl && bl->next == NULL);
9926
9927 annotate_breakpoint (b->number);
9928 if (b->disposition == disp_del)
9929 ui_out_text (uiout, "\nTemporary ranged breakpoint ");
9930 else
9931 ui_out_text (uiout, "\nRanged breakpoint ");
9932 if (ui_out_is_mi_like_p (uiout))
9933 {
9934 ui_out_field_string (uiout, "reason",
9935 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
9936 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
9937 }
9938 ui_out_field_int (uiout, "bkptno", b->number);
9939 ui_out_text (uiout, ", ");
9940
9941 return PRINT_SRC_AND_LOC;
9942}
9943
9944/* Implement the "print_one" breakpoint_ops method for
9945 ranged breakpoints. */
9946
9947static void
9948print_one_ranged_breakpoint (struct breakpoint *b,
9949 struct bp_location **last_loc)
9950{
9951 struct bp_location *bl = b->loc;
9952 struct value_print_options opts;
79a45e25 9953 struct ui_out *uiout = current_uiout;
f1310107
TJB
9954
9955 /* Ranged breakpoints have only one location. */
9956 gdb_assert (bl && bl->next == NULL);
9957
9958 get_user_print_options (&opts);
9959
9960 if (opts.addressprint)
9961 /* We don't print the address range here, it will be printed later
9962 by print_one_detail_ranged_breakpoint. */
9963 ui_out_field_skip (uiout, "addr");
9964 annotate_field (5);
9965 print_breakpoint_location (b, bl);
9966 *last_loc = bl;
9967}
9968
9969/* Implement the "print_one_detail" breakpoint_ops method for
9970 ranged breakpoints. */
9971
9972static void
9973print_one_detail_ranged_breakpoint (const struct breakpoint *b,
9974 struct ui_out *uiout)
9975{
9976 CORE_ADDR address_start, address_end;
9977 struct bp_location *bl = b->loc;
f99d8bf4
PA
9978 struct ui_file *stb = mem_fileopen ();
9979 struct cleanup *cleanup = make_cleanup_ui_file_delete (stb);
f1310107
TJB
9980
9981 gdb_assert (bl);
9982
9983 address_start = bl->address;
9984 address_end = address_start + bl->length - 1;
9985
9986 ui_out_text (uiout, "\taddress range: ");
f99d8bf4 9987 fprintf_unfiltered (stb, "[%s, %s]",
f1310107
TJB
9988 print_core_address (bl->gdbarch, address_start),
9989 print_core_address (bl->gdbarch, address_end));
9990 ui_out_field_stream (uiout, "addr", stb);
9991 ui_out_text (uiout, "\n");
9992
9993 do_cleanups (cleanup);
9994}
9995
9996/* Implement the "print_mention" breakpoint_ops method for
9997 ranged breakpoints. */
9998
9999static void
10000print_mention_ranged_breakpoint (struct breakpoint *b)
10001{
10002 struct bp_location *bl = b->loc;
79a45e25 10003 struct ui_out *uiout = current_uiout;
f1310107
TJB
10004
10005 gdb_assert (bl);
10006 gdb_assert (b->type == bp_hardware_breakpoint);
10007
10008 if (ui_out_is_mi_like_p (uiout))
10009 return;
10010
10011 printf_filtered (_("Hardware assisted ranged breakpoint %d from %s to %s."),
10012 b->number, paddress (bl->gdbarch, bl->address),
10013 paddress (bl->gdbarch, bl->address + bl->length - 1));
10014}
10015
10016/* Implement the "print_recreate" breakpoint_ops method for
10017 ranged breakpoints. */
10018
10019static void
10020print_recreate_ranged_breakpoint (struct breakpoint *b, struct ui_file *fp)
10021{
10022 fprintf_unfiltered (fp, "break-range %s, %s", b->addr_string,
10023 b->addr_string_range_end);
d9b3f62e 10024 print_recreate_thread (b, fp);
f1310107
TJB
10025}
10026
10027/* The breakpoint_ops structure to be used in ranged breakpoints. */
10028
2060206e 10029static struct breakpoint_ops ranged_breakpoint_ops;
f1310107
TJB
10030
10031/* Find the address where the end of the breakpoint range should be
10032 placed, given the SAL of the end of the range. This is so that if
10033 the user provides a line number, the end of the range is set to the
10034 last instruction of the given line. */
10035
10036static CORE_ADDR
10037find_breakpoint_range_end (struct symtab_and_line sal)
10038{
10039 CORE_ADDR end;
10040
10041 /* If the user provided a PC value, use it. Otherwise,
10042 find the address of the end of the given location. */
10043 if (sal.explicit_pc)
10044 end = sal.pc;
10045 else
10046 {
10047 int ret;
10048 CORE_ADDR start;
10049
10050 ret = find_line_pc_range (sal, &start, &end);
10051 if (!ret)
10052 error (_("Could not find location of the end of the range."));
10053
10054 /* find_line_pc_range returns the start of the next line. */
10055 end--;
10056 }
10057
10058 return end;
10059}
10060
10061/* Implement the "break-range" CLI command. */
10062
10063static void
10064break_range_command (char *arg, int from_tty)
10065{
10066 char *arg_start, *addr_string_start, *addr_string_end;
10067 struct linespec_result canonical_start, canonical_end;
10068 int bp_count, can_use_bp, length;
10069 CORE_ADDR end;
10070 struct breakpoint *b;
10071 struct symtab_and_line sal_start, sal_end;
f1310107 10072 struct cleanup *cleanup_bkpt;
f8eba3c6 10073 struct linespec_sals *lsal_start, *lsal_end;
f1310107
TJB
10074
10075 /* We don't support software ranged breakpoints. */
10076 if (target_ranged_break_num_registers () < 0)
10077 error (_("This target does not support hardware ranged breakpoints."));
10078
10079 bp_count = hw_breakpoint_used_count ();
10080 bp_count += target_ranged_break_num_registers ();
10081 can_use_bp = target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
10082 bp_count, 0);
10083 if (can_use_bp < 0)
10084 error (_("Hardware breakpoints used exceeds limit."));
10085
f8eba3c6 10086 arg = skip_spaces (arg);
f1310107
TJB
10087 if (arg == NULL || arg[0] == '\0')
10088 error(_("No address range specified."));
10089
f1310107
TJB
10090 init_linespec_result (&canonical_start);
10091
f8eba3c6
TT
10092 arg_start = arg;
10093 parse_breakpoint_sals (&arg, &canonical_start);
f1310107 10094
f8eba3c6 10095 cleanup_bkpt = make_cleanup_destroy_linespec_result (&canonical_start);
f1310107
TJB
10096
10097 if (arg[0] != ',')
10098 error (_("Too few arguments."));
f8eba3c6 10099 else if (VEC_empty (linespec_sals, canonical_start.sals))
f1310107 10100 error (_("Could not find location of the beginning of the range."));
f8eba3c6
TT
10101
10102 lsal_start = VEC_index (linespec_sals, canonical_start.sals, 0);
10103
10104 if (VEC_length (linespec_sals, canonical_start.sals) > 1
10105 || lsal_start->sals.nelts != 1)
f1310107
TJB
10106 error (_("Cannot create a ranged breakpoint with multiple locations."));
10107
f8eba3c6
TT
10108 sal_start = lsal_start->sals.sals[0];
10109 addr_string_start = savestring (arg_start, arg - arg_start);
10110 make_cleanup (xfree, addr_string_start);
f1310107
TJB
10111
10112 arg++; /* Skip the comma. */
f8eba3c6 10113 arg = skip_spaces (arg);
f1310107
TJB
10114
10115 /* Parse the end location. */
10116
f1310107
TJB
10117 init_linespec_result (&canonical_end);
10118 arg_start = arg;
10119
f8eba3c6 10120 /* We call decode_line_full directly here instead of using
f1310107
TJB
10121 parse_breakpoint_sals because we need to specify the start location's
10122 symtab and line as the default symtab and line for the end of the
10123 range. This makes it possible to have ranges like "foo.c:27, +14",
10124 where +14 means 14 lines from the start location. */
f8eba3c6
TT
10125 decode_line_full (&arg, DECODE_LINE_FUNFIRSTLINE,
10126 sal_start.symtab, sal_start.line,
10127 &canonical_end, NULL, NULL);
10128
10129 make_cleanup_destroy_linespec_result (&canonical_end);
f1310107 10130
f8eba3c6 10131 if (VEC_empty (linespec_sals, canonical_end.sals))
f1310107 10132 error (_("Could not find location of the end of the range."));
f8eba3c6
TT
10133
10134 lsal_end = VEC_index (linespec_sals, canonical_end.sals, 0);
10135 if (VEC_length (linespec_sals, canonical_end.sals) > 1
10136 || lsal_end->sals.nelts != 1)
f1310107
TJB
10137 error (_("Cannot create a ranged breakpoint with multiple locations."));
10138
f8eba3c6
TT
10139 sal_end = lsal_end->sals.sals[0];
10140 addr_string_end = savestring (arg_start, arg - arg_start);
10141 make_cleanup (xfree, addr_string_end);
f1310107
TJB
10142
10143 end = find_breakpoint_range_end (sal_end);
10144 if (sal_start.pc > end)
177b42fe 10145 error (_("Invalid address range, end precedes start."));
f1310107
TJB
10146
10147 length = end - sal_start.pc + 1;
10148 if (length < 0)
10149 /* Length overflowed. */
10150 error (_("Address range too large."));
10151 else if (length == 1)
10152 {
10153 /* This range is simple enough to be handled by
10154 the `hbreak' command. */
10155 hbreak_command (addr_string_start, 1);
10156
10157 do_cleanups (cleanup_bkpt);
10158
10159 return;
10160 }
10161
10162 /* Now set up the breakpoint. */
10163 b = set_raw_breakpoint (get_current_arch (), sal_start,
348d480f 10164 bp_hardware_breakpoint, &ranged_breakpoint_ops);
f1310107
TJB
10165 set_breakpoint_count (breakpoint_count + 1);
10166 b->number = breakpoint_count;
10167 b->disposition = disp_donttouch;
f8eba3c6
TT
10168 b->addr_string = xstrdup (addr_string_start);
10169 b->addr_string_range_end = xstrdup (addr_string_end);
f1310107
TJB
10170 b->loc->length = length;
10171
f8eba3c6 10172 do_cleanups (cleanup_bkpt);
f1310107
TJB
10173
10174 mention (b);
8d3788bd 10175 observer_notify_breakpoint_created (b);
f1310107
TJB
10176 update_global_location_list (1);
10177}
10178
4a64f543
MS
10179/* Return non-zero if EXP is verified as constant. Returned zero
10180 means EXP is variable. Also the constant detection may fail for
10181 some constant expressions and in such case still falsely return
10182 zero. */
2e6e3d9c 10183
65d79d4b
SDJ
10184static int
10185watchpoint_exp_is_const (const struct expression *exp)
10186{
10187 int i = exp->nelts;
10188
10189 while (i > 0)
10190 {
10191 int oplenp, argsp;
10192
10193 /* We are only interested in the descriptor of each element. */
10194 operator_length (exp, i, &oplenp, &argsp);
10195 i -= oplenp;
10196
10197 switch (exp->elts[i].opcode)
10198 {
10199 case BINOP_ADD:
10200 case BINOP_SUB:
10201 case BINOP_MUL:
10202 case BINOP_DIV:
10203 case BINOP_REM:
10204 case BINOP_MOD:
10205 case BINOP_LSH:
10206 case BINOP_RSH:
10207 case BINOP_LOGICAL_AND:
10208 case BINOP_LOGICAL_OR:
10209 case BINOP_BITWISE_AND:
10210 case BINOP_BITWISE_IOR:
10211 case BINOP_BITWISE_XOR:
10212 case BINOP_EQUAL:
10213 case BINOP_NOTEQUAL:
10214 case BINOP_LESS:
10215 case BINOP_GTR:
10216 case BINOP_LEQ:
10217 case BINOP_GEQ:
10218 case BINOP_REPEAT:
10219 case BINOP_COMMA:
10220 case BINOP_EXP:
10221 case BINOP_MIN:
10222 case BINOP_MAX:
10223 case BINOP_INTDIV:
10224 case BINOP_CONCAT:
10225 case BINOP_IN:
10226 case BINOP_RANGE:
10227 case TERNOP_COND:
10228 case TERNOP_SLICE:
65d79d4b
SDJ
10229
10230 case OP_LONG:
10231 case OP_DOUBLE:
10232 case OP_DECFLOAT:
10233 case OP_LAST:
10234 case OP_COMPLEX:
10235 case OP_STRING:
65d79d4b
SDJ
10236 case OP_ARRAY:
10237 case OP_TYPE:
608b4967
TT
10238 case OP_TYPEOF:
10239 case OP_DECLTYPE:
65d79d4b
SDJ
10240 case OP_NAME:
10241 case OP_OBJC_NSSTRING:
10242
10243 case UNOP_NEG:
10244 case UNOP_LOGICAL_NOT:
10245 case UNOP_COMPLEMENT:
10246 case UNOP_ADDR:
10247 case UNOP_HIGH:
aeaa2474 10248 case UNOP_CAST:
9eaf6705
TT
10249
10250 case UNOP_CAST_TYPE:
10251 case UNOP_REINTERPRET_CAST:
10252 case UNOP_DYNAMIC_CAST:
4a64f543
MS
10253 /* Unary, binary and ternary operators: We have to check
10254 their operands. If they are constant, then so is the
10255 result of that operation. For instance, if A and B are
10256 determined to be constants, then so is "A + B".
10257
10258 UNOP_IND is one exception to the rule above, because the
10259 value of *ADDR is not necessarily a constant, even when
10260 ADDR is. */
65d79d4b
SDJ
10261 break;
10262
10263 case OP_VAR_VALUE:
10264 /* Check whether the associated symbol is a constant.
4a64f543 10265
65d79d4b 10266 We use SYMBOL_CLASS rather than TYPE_CONST because it's
4a64f543
MS
10267 possible that a buggy compiler could mark a variable as
10268 constant even when it is not, and TYPE_CONST would return
10269 true in this case, while SYMBOL_CLASS wouldn't.
10270
10271 We also have to check for function symbols because they
10272 are always constant. */
65d79d4b
SDJ
10273 {
10274 struct symbol *s = exp->elts[i + 2].symbol;
10275
10276 if (SYMBOL_CLASS (s) != LOC_BLOCK
10277 && SYMBOL_CLASS (s) != LOC_CONST
10278 && SYMBOL_CLASS (s) != LOC_CONST_BYTES)
10279 return 0;
10280 break;
10281 }
10282
10283 /* The default action is to return 0 because we are using
10284 the optimistic approach here: If we don't know something,
10285 then it is not a constant. */
10286 default:
10287 return 0;
10288 }
10289 }
10290
10291 return 1;
10292}
10293
3a5c3e22
PA
10294/* Implement the "dtor" breakpoint_ops method for watchpoints. */
10295
10296static void
10297dtor_watchpoint (struct breakpoint *self)
10298{
10299 struct watchpoint *w = (struct watchpoint *) self;
10300
10301 xfree (w->cond_exp);
10302 xfree (w->exp);
10303 xfree (w->exp_string);
10304 xfree (w->exp_string_reparse);
10305 value_free (w->val);
10306
10307 base_breakpoint_ops.dtor (self);
10308}
10309
348d480f
PA
10310/* Implement the "re_set" breakpoint_ops method for watchpoints. */
10311
10312static void
10313re_set_watchpoint (struct breakpoint *b)
10314{
3a5c3e22
PA
10315 struct watchpoint *w = (struct watchpoint *) b;
10316
348d480f
PA
10317 /* Watchpoint can be either on expression using entirely global
10318 variables, or it can be on local variables.
10319
10320 Watchpoints of the first kind are never auto-deleted, and even
10321 persist across program restarts. Since they can use variables
10322 from shared libraries, we need to reparse expression as libraries
10323 are loaded and unloaded.
10324
10325 Watchpoints on local variables can also change meaning as result
10326 of solib event. For example, if a watchpoint uses both a local
10327 and a global variables in expression, it's a local watchpoint,
10328 but unloading of a shared library will make the expression
10329 invalid. This is not a very common use case, but we still
10330 re-evaluate expression, to avoid surprises to the user.
10331
10332 Note that for local watchpoints, we re-evaluate it only if
10333 watchpoints frame id is still valid. If it's not, it means the
10334 watchpoint is out of scope and will be deleted soon. In fact,
10335 I'm not sure we'll ever be called in this case.
10336
10337 If a local watchpoint's frame id is still valid, then
3a5c3e22 10338 w->exp_valid_block is likewise valid, and we can safely use it.
348d480f 10339
3a5c3e22
PA
10340 Don't do anything about disabled watchpoints, since they will be
10341 reevaluated again when enabled. */
10342 update_watchpoint (w, 1 /* reparse */);
348d480f
PA
10343}
10344
77b06cd7
TJB
10345/* Implement the "insert" breakpoint_ops method for hardware watchpoints. */
10346
10347static int
10348insert_watchpoint (struct bp_location *bl)
10349{
3a5c3e22
PA
10350 struct watchpoint *w = (struct watchpoint *) bl->owner;
10351 int length = w->exact ? 1 : bl->length;
e09342b5
TJB
10352
10353 return target_insert_watchpoint (bl->address, length, bl->watchpoint_type,
3a5c3e22 10354 w->cond_exp);
77b06cd7
TJB
10355}
10356
10357/* Implement the "remove" breakpoint_ops method for hardware watchpoints. */
10358
10359static int
10360remove_watchpoint (struct bp_location *bl)
10361{
3a5c3e22
PA
10362 struct watchpoint *w = (struct watchpoint *) bl->owner;
10363 int length = w->exact ? 1 : bl->length;
e09342b5
TJB
10364
10365 return target_remove_watchpoint (bl->address, length, bl->watchpoint_type,
3a5c3e22 10366 w->cond_exp);
e09342b5
TJB
10367}
10368
e09342b5 10369static int
348d480f 10370breakpoint_hit_watchpoint (const struct bp_location *bl,
09ac7c10
TT
10371 struct address_space *aspace, CORE_ADDR bp_addr,
10372 const struct target_waitstatus *ws)
e09342b5 10373{
348d480f 10374 struct breakpoint *b = bl->owner;
3a5c3e22 10375 struct watchpoint *w = (struct watchpoint *) b;
77b06cd7 10376
348d480f
PA
10377 /* Continuable hardware watchpoints are treated as non-existent if the
10378 reason we stopped wasn't a hardware watchpoint (we didn't stop on
10379 some data address). Otherwise gdb won't stop on a break instruction
10380 in the code (not from a breakpoint) when a hardware watchpoint has
10381 been defined. Also skip watchpoints which we know did not trigger
10382 (did not match the data address). */
10383 if (is_hardware_watchpoint (b)
3a5c3e22 10384 && w->watchpoint_triggered == watch_triggered_no)
348d480f 10385 return 0;
9c06b0b4 10386
348d480f 10387 return 1;
9c06b0b4
TJB
10388}
10389
348d480f
PA
10390static void
10391check_status_watchpoint (bpstat bs)
9c06b0b4 10392{
348d480f 10393 gdb_assert (is_watchpoint (bs->breakpoint_at));
9c06b0b4 10394
348d480f 10395 bpstat_check_watchpoint (bs);
9c06b0b4
TJB
10396}
10397
10398/* Implement the "resources_needed" breakpoint_ops method for
348d480f 10399 hardware watchpoints. */
9c06b0b4
TJB
10400
10401static int
348d480f 10402resources_needed_watchpoint (const struct bp_location *bl)
9c06b0b4 10403{
3a5c3e22
PA
10404 struct watchpoint *w = (struct watchpoint *) bl->owner;
10405 int length = w->exact? 1 : bl->length;
348d480f
PA
10406
10407 return target_region_ok_for_hw_watchpoint (bl->address, length);
9c06b0b4
TJB
10408}
10409
10410/* Implement the "works_in_software_mode" breakpoint_ops method for
348d480f 10411 hardware watchpoints. */
9c06b0b4
TJB
10412
10413static int
348d480f 10414works_in_software_mode_watchpoint (const struct breakpoint *b)
9c06b0b4 10415{
efa80663
PA
10416 /* Read and access watchpoints only work with hardware support. */
10417 return b->type == bp_watchpoint || b->type == bp_hardware_watchpoint;
9c06b0b4
TJB
10418}
10419
9c06b0b4 10420static enum print_stop_action
348d480f 10421print_it_watchpoint (bpstat bs)
9c06b0b4 10422{
348d480f
PA
10423 struct cleanup *old_chain;
10424 struct breakpoint *b;
10425 const struct bp_location *bl;
f99d8bf4 10426 struct ui_file *stb;
348d480f 10427 enum print_stop_action result;
3a5c3e22 10428 struct watchpoint *w;
79a45e25 10429 struct ui_out *uiout = current_uiout;
348d480f
PA
10430
10431 gdb_assert (bs->bp_location_at != NULL);
10432
10433 bl = bs->bp_location_at;
10434 b = bs->breakpoint_at;
3a5c3e22 10435 w = (struct watchpoint *) b;
348d480f 10436
f99d8bf4
PA
10437 stb = mem_fileopen ();
10438 old_chain = make_cleanup_ui_file_delete (stb);
9c06b0b4
TJB
10439
10440 switch (b->type)
10441 {
348d480f 10442 case bp_watchpoint:
9c06b0b4
TJB
10443 case bp_hardware_watchpoint:
10444 annotate_watchpoint (b->number);
10445 if (ui_out_is_mi_like_p (uiout))
10446 ui_out_field_string
10447 (uiout, "reason",
10448 async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
348d480f
PA
10449 mention (b);
10450 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
10451 ui_out_text (uiout, "\nOld value = ");
f99d8bf4 10452 watchpoint_value_print (bs->old_val, stb);
348d480f
PA
10453 ui_out_field_stream (uiout, "old", stb);
10454 ui_out_text (uiout, "\nNew value = ");
f99d8bf4 10455 watchpoint_value_print (w->val, stb);
348d480f
PA
10456 ui_out_field_stream (uiout, "new", stb);
10457 ui_out_text (uiout, "\n");
10458 /* More than one watchpoint may have been triggered. */
10459 result = PRINT_UNKNOWN;
9c06b0b4
TJB
10460 break;
10461
10462 case bp_read_watchpoint:
10463 if (ui_out_is_mi_like_p (uiout))
10464 ui_out_field_string
10465 (uiout, "reason",
10466 async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
348d480f
PA
10467 mention (b);
10468 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
10469 ui_out_text (uiout, "\nValue = ");
f99d8bf4 10470 watchpoint_value_print (w->val, stb);
348d480f
PA
10471 ui_out_field_stream (uiout, "value", stb);
10472 ui_out_text (uiout, "\n");
10473 result = PRINT_UNKNOWN;
9c06b0b4
TJB
10474 break;
10475
10476 case bp_access_watchpoint:
348d480f
PA
10477 if (bs->old_val != NULL)
10478 {
10479 annotate_watchpoint (b->number);
10480 if (ui_out_is_mi_like_p (uiout))
10481 ui_out_field_string
10482 (uiout, "reason",
10483 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
10484 mention (b);
10485 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
10486 ui_out_text (uiout, "\nOld value = ");
f99d8bf4 10487 watchpoint_value_print (bs->old_val, stb);
348d480f
PA
10488 ui_out_field_stream (uiout, "old", stb);
10489 ui_out_text (uiout, "\nNew value = ");
10490 }
10491 else
10492 {
10493 mention (b);
10494 if (ui_out_is_mi_like_p (uiout))
10495 ui_out_field_string
10496 (uiout, "reason",
10497 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
10498 make_cleanup_ui_out_tuple_begin_end (uiout, "value");
10499 ui_out_text (uiout, "\nValue = ");
10500 }
f99d8bf4 10501 watchpoint_value_print (w->val, stb);
348d480f
PA
10502 ui_out_field_stream (uiout, "new", stb);
10503 ui_out_text (uiout, "\n");
10504 result = PRINT_UNKNOWN;
9c06b0b4
TJB
10505 break;
10506 default:
348d480f 10507 result = PRINT_UNKNOWN;
9c06b0b4
TJB
10508 }
10509
348d480f
PA
10510 do_cleanups (old_chain);
10511 return result;
10512}
10513
10514/* Implement the "print_mention" breakpoint_ops method for hardware
10515 watchpoints. */
10516
10517static void
10518print_mention_watchpoint (struct breakpoint *b)
10519{
10520 struct cleanup *ui_out_chain;
3a5c3e22 10521 struct watchpoint *w = (struct watchpoint *) b;
79a45e25 10522 struct ui_out *uiout = current_uiout;
348d480f
PA
10523
10524 switch (b->type)
10525 {
10526 case bp_watchpoint:
10527 ui_out_text (uiout, "Watchpoint ");
10528 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
10529 break;
10530 case bp_hardware_watchpoint:
10531 ui_out_text (uiout, "Hardware watchpoint ");
10532 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
10533 break;
10534 case bp_read_watchpoint:
10535 ui_out_text (uiout, "Hardware read watchpoint ");
10536 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt");
10537 break;
10538 case bp_access_watchpoint:
10539 ui_out_text (uiout, "Hardware access (read/write) watchpoint ");
10540 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt");
10541 break;
10542 default:
10543 internal_error (__FILE__, __LINE__,
10544 _("Invalid hardware watchpoint type."));
10545 }
10546
10547 ui_out_field_int (uiout, "number", b->number);
10548 ui_out_text (uiout, ": ");
3a5c3e22 10549 ui_out_field_string (uiout, "exp", w->exp_string);
348d480f
PA
10550 do_cleanups (ui_out_chain);
10551}
10552
10553/* Implement the "print_recreate" breakpoint_ops method for
10554 watchpoints. */
10555
10556static void
10557print_recreate_watchpoint (struct breakpoint *b, struct ui_file *fp)
10558{
3a5c3e22
PA
10559 struct watchpoint *w = (struct watchpoint *) b;
10560
348d480f
PA
10561 switch (b->type)
10562 {
10563 case bp_watchpoint:
10564 case bp_hardware_watchpoint:
10565 fprintf_unfiltered (fp, "watch");
10566 break;
10567 case bp_read_watchpoint:
10568 fprintf_unfiltered (fp, "rwatch");
10569 break;
10570 case bp_access_watchpoint:
10571 fprintf_unfiltered (fp, "awatch");
10572 break;
10573 default:
10574 internal_error (__FILE__, __LINE__,
10575 _("Invalid watchpoint type."));
10576 }
10577
3a5c3e22 10578 fprintf_unfiltered (fp, " %s", w->exp_string);
d9b3f62e 10579 print_recreate_thread (b, fp);
348d480f
PA
10580}
10581
10582/* The breakpoint_ops structure to be used in hardware watchpoints. */
10583
2060206e 10584static struct breakpoint_ops watchpoint_breakpoint_ops;
348d480f
PA
10585
10586/* Implement the "insert" breakpoint_ops method for
10587 masked hardware watchpoints. */
10588
10589static int
10590insert_masked_watchpoint (struct bp_location *bl)
10591{
3a5c3e22
PA
10592 struct watchpoint *w = (struct watchpoint *) bl->owner;
10593
10594 return target_insert_mask_watchpoint (bl->address, w->hw_wp_mask,
348d480f
PA
10595 bl->watchpoint_type);
10596}
10597
10598/* Implement the "remove" breakpoint_ops method for
10599 masked hardware watchpoints. */
10600
10601static int
10602remove_masked_watchpoint (struct bp_location *bl)
10603{
3a5c3e22
PA
10604 struct watchpoint *w = (struct watchpoint *) bl->owner;
10605
10606 return target_remove_mask_watchpoint (bl->address, w->hw_wp_mask,
348d480f
PA
10607 bl->watchpoint_type);
10608}
10609
10610/* Implement the "resources_needed" breakpoint_ops method for
10611 masked hardware watchpoints. */
10612
10613static int
10614resources_needed_masked_watchpoint (const struct bp_location *bl)
10615{
3a5c3e22
PA
10616 struct watchpoint *w = (struct watchpoint *) bl->owner;
10617
10618 return target_masked_watch_num_registers (bl->address, w->hw_wp_mask);
348d480f
PA
10619}
10620
10621/* Implement the "works_in_software_mode" breakpoint_ops method for
10622 masked hardware watchpoints. */
10623
10624static int
10625works_in_software_mode_masked_watchpoint (const struct breakpoint *b)
10626{
10627 return 0;
10628}
10629
10630/* Implement the "print_it" breakpoint_ops method for
10631 masked hardware watchpoints. */
10632
10633static enum print_stop_action
10634print_it_masked_watchpoint (bpstat bs)
10635{
10636 struct breakpoint *b = bs->breakpoint_at;
79a45e25 10637 struct ui_out *uiout = current_uiout;
348d480f
PA
10638
10639 /* Masked watchpoints have only one location. */
10640 gdb_assert (b->loc && b->loc->next == NULL);
10641
10642 switch (b->type)
10643 {
10644 case bp_hardware_watchpoint:
10645 annotate_watchpoint (b->number);
10646 if (ui_out_is_mi_like_p (uiout))
10647 ui_out_field_string
10648 (uiout, "reason",
10649 async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
10650 break;
10651
10652 case bp_read_watchpoint:
10653 if (ui_out_is_mi_like_p (uiout))
10654 ui_out_field_string
10655 (uiout, "reason",
10656 async_reason_lookup (EXEC_ASYNC_READ_WATCHPOINT_TRIGGER));
10657 break;
10658
10659 case bp_access_watchpoint:
10660 if (ui_out_is_mi_like_p (uiout))
10661 ui_out_field_string
10662 (uiout, "reason",
10663 async_reason_lookup (EXEC_ASYNC_ACCESS_WATCHPOINT_TRIGGER));
10664 break;
10665 default:
10666 internal_error (__FILE__, __LINE__,
10667 _("Invalid hardware watchpoint type."));
10668 }
10669
10670 mention (b);
9c06b0b4
TJB
10671 ui_out_text (uiout, _("\n\
10672Check the underlying instruction at PC for the memory\n\
10673address and value which triggered this watchpoint.\n"));
10674 ui_out_text (uiout, "\n");
10675
10676 /* More than one watchpoint may have been triggered. */
10677 return PRINT_UNKNOWN;
10678}
10679
10680/* Implement the "print_one_detail" breakpoint_ops method for
10681 masked hardware watchpoints. */
10682
10683static void
10684print_one_detail_masked_watchpoint (const struct breakpoint *b,
10685 struct ui_out *uiout)
10686{
3a5c3e22
PA
10687 struct watchpoint *w = (struct watchpoint *) b;
10688
9c06b0b4
TJB
10689 /* Masked watchpoints have only one location. */
10690 gdb_assert (b->loc && b->loc->next == NULL);
10691
10692 ui_out_text (uiout, "\tmask ");
3a5c3e22 10693 ui_out_field_core_addr (uiout, "mask", b->loc->gdbarch, w->hw_wp_mask);
9c06b0b4
TJB
10694 ui_out_text (uiout, "\n");
10695}
10696
10697/* Implement the "print_mention" breakpoint_ops method for
10698 masked hardware watchpoints. */
10699
10700static void
10701print_mention_masked_watchpoint (struct breakpoint *b)
10702{
3a5c3e22 10703 struct watchpoint *w = (struct watchpoint *) b;
79a45e25 10704 struct ui_out *uiout = current_uiout;
9c06b0b4
TJB
10705 struct cleanup *ui_out_chain;
10706
10707 switch (b->type)
10708 {
10709 case bp_hardware_watchpoint:
10710 ui_out_text (uiout, "Masked hardware watchpoint ");
10711 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt");
10712 break;
10713 case bp_read_watchpoint:
10714 ui_out_text (uiout, "Masked hardware read watchpoint ");
10715 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt");
10716 break;
10717 case bp_access_watchpoint:
10718 ui_out_text (uiout, "Masked hardware access (read/write) watchpoint ");
10719 ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt");
10720 break;
10721 default:
10722 internal_error (__FILE__, __LINE__,
10723 _("Invalid hardware watchpoint type."));
10724 }
10725
10726 ui_out_field_int (uiout, "number", b->number);
10727 ui_out_text (uiout, ": ");
3a5c3e22 10728 ui_out_field_string (uiout, "exp", w->exp_string);
9c06b0b4
TJB
10729 do_cleanups (ui_out_chain);
10730}
10731
10732/* Implement the "print_recreate" breakpoint_ops method for
10733 masked hardware watchpoints. */
10734
10735static void
10736print_recreate_masked_watchpoint (struct breakpoint *b, struct ui_file *fp)
10737{
3a5c3e22 10738 struct watchpoint *w = (struct watchpoint *) b;
9c06b0b4
TJB
10739 char tmp[40];
10740
10741 switch (b->type)
10742 {
10743 case bp_hardware_watchpoint:
10744 fprintf_unfiltered (fp, "watch");
10745 break;
10746 case bp_read_watchpoint:
10747 fprintf_unfiltered (fp, "rwatch");
10748 break;
10749 case bp_access_watchpoint:
10750 fprintf_unfiltered (fp, "awatch");
10751 break;
10752 default:
10753 internal_error (__FILE__, __LINE__,
10754 _("Invalid hardware watchpoint type."));
10755 }
10756
3a5c3e22
PA
10757 sprintf_vma (tmp, w->hw_wp_mask);
10758 fprintf_unfiltered (fp, " %s mask 0x%s", w->exp_string, tmp);
d9b3f62e 10759 print_recreate_thread (b, fp);
9c06b0b4
TJB
10760}
10761
10762/* The breakpoint_ops structure to be used in masked hardware watchpoints. */
10763
2060206e 10764static struct breakpoint_ops masked_watchpoint_breakpoint_ops;
9c06b0b4
TJB
10765
10766/* Tell whether the given watchpoint is a masked hardware watchpoint. */
10767
10768static int
10769is_masked_watchpoint (const struct breakpoint *b)
10770{
10771 return b->ops == &masked_watchpoint_breakpoint_ops;
10772}
10773
53a5351d
JM
10774/* accessflag: hw_write: watch write,
10775 hw_read: watch read,
10776 hw_access: watch access (read or write) */
c906108c 10777static void
84f4c1fe
PM
10778watch_command_1 (char *arg, int accessflag, int from_tty,
10779 int just_location, int internal)
c906108c 10780{
a9634178 10781 volatile struct gdb_exception e;
d983da9c 10782 struct breakpoint *b, *scope_breakpoint = NULL;
c906108c 10783 struct expression *exp;
270140bd 10784 const struct block *exp_valid_block = NULL, *cond_exp_valid_block = NULL;
a1442452 10785 struct value *val, *mark, *result;
c906108c 10786 struct frame_info *frame;
c906108c
SS
10787 char *exp_start = NULL;
10788 char *exp_end = NULL;
9c06b0b4
TJB
10789 char *tok, *end_tok;
10790 int toklen = -1;
c906108c
SS
10791 char *cond_start = NULL;
10792 char *cond_end = NULL;
c906108c 10793 enum bptype bp_type;
37e4754d 10794 int thread = -1;
0cf6dd15 10795 int pc = 0;
9c06b0b4
TJB
10796 /* Flag to indicate whether we are going to use masks for
10797 the hardware watchpoint. */
10798 int use_mask = 0;
10799 CORE_ADDR mask = 0;
3a5c3e22 10800 struct watchpoint *w;
c906108c 10801
37e4754d
LM
10802 /* Make sure that we actually have parameters to parse. */
10803 if (arg != NULL && arg[0] != '\0')
10804 {
9c06b0b4 10805 char *value_start;
37e4754d 10806
9c06b0b4
TJB
10807 /* Look for "parameter value" pairs at the end
10808 of the arguments string. */
10809 for (tok = arg + strlen (arg) - 1; tok > arg; tok--)
10810 {
10811 /* Skip whitespace at the end of the argument list. */
10812 while (tok > arg && (*tok == ' ' || *tok == '\t'))
10813 tok--;
10814
10815 /* Find the beginning of the last token.
10816 This is the value of the parameter. */
10817 while (tok > arg && (*tok != ' ' && *tok != '\t'))
10818 tok--;
10819 value_start = tok + 1;
10820
10821 /* Skip whitespace. */
10822 while (tok > arg && (*tok == ' ' || *tok == '\t'))
10823 tok--;
10824
10825 end_tok = tok;
10826
10827 /* Find the beginning of the second to last token.
10828 This is the parameter itself. */
10829 while (tok > arg && (*tok != ' ' && *tok != '\t'))
10830 tok--;
10831 tok++;
10832 toklen = end_tok - tok + 1;
10833
10834 if (toklen == 6 && !strncmp (tok, "thread", 6))
10835 {
10836 /* At this point we've found a "thread" token, which means
10837 the user is trying to set a watchpoint that triggers
10838 only in a specific thread. */
10839 char *endp;
37e4754d 10840
9c06b0b4
TJB
10841 if (thread != -1)
10842 error(_("You can specify only one thread."));
37e4754d 10843
9c06b0b4
TJB
10844 /* Extract the thread ID from the next token. */
10845 thread = strtol (value_start, &endp, 0);
37e4754d 10846
9c06b0b4
TJB
10847 /* Check if the user provided a valid numeric value for the
10848 thread ID. */
10849 if (*endp != ' ' && *endp != '\t' && *endp != '\0')
10850 error (_("Invalid thread ID specification %s."), value_start);
10851
10852 /* Check if the thread actually exists. */
10853 if (!valid_thread_id (thread))
af4908ba 10854 invalid_thread_id_error (thread);
9c06b0b4
TJB
10855 }
10856 else if (toklen == 4 && !strncmp (tok, "mask", 4))
10857 {
10858 /* We've found a "mask" token, which means the user wants to
10859 create a hardware watchpoint that is going to have the mask
10860 facility. */
10861 struct value *mask_value, *mark;
37e4754d 10862
9c06b0b4
TJB
10863 if (use_mask)
10864 error(_("You can specify only one mask."));
37e4754d 10865
9c06b0b4 10866 use_mask = just_location = 1;
37e4754d 10867
9c06b0b4
TJB
10868 mark = value_mark ();
10869 mask_value = parse_to_comma_and_eval (&value_start);
10870 mask = value_as_address (mask_value);
10871 value_free_to_mark (mark);
10872 }
10873 else
10874 /* We didn't recognize what we found. We should stop here. */
10875 break;
37e4754d 10876
9c06b0b4
TJB
10877 /* Truncate the string and get rid of the "parameter value" pair before
10878 the arguments string is parsed by the parse_exp_1 function. */
10879 *tok = '\0';
10880 }
37e4754d
LM
10881 }
10882
10883 /* Parse the rest of the arguments. */
c906108c
SS
10884 innermost_block = NULL;
10885 exp_start = arg;
1bb9788d 10886 exp = parse_exp_1 (&arg, 0, 0, 0);
c906108c 10887 exp_end = arg;
fa8a61dc
TT
10888 /* Remove trailing whitespace from the expression before saving it.
10889 This makes the eventual display of the expression string a bit
10890 prettier. */
10891 while (exp_end > exp_start && (exp_end[-1] == ' ' || exp_end[-1] == '\t'))
10892 --exp_end;
10893
65d79d4b
SDJ
10894 /* Checking if the expression is not constant. */
10895 if (watchpoint_exp_is_const (exp))
10896 {
10897 int len;
10898
10899 len = exp_end - exp_start;
10900 while (len > 0 && isspace (exp_start[len - 1]))
10901 len--;
10902 error (_("Cannot watch constant value `%.*s'."), len, exp_start);
10903 }
10904
c906108c
SS
10905 exp_valid_block = innermost_block;
10906 mark = value_mark ();
a1442452 10907 fetch_subexp_value (exp, &pc, &val, &result, NULL);
06a64a0b
TT
10908
10909 if (just_location)
10910 {
9c06b0b4
TJB
10911 int ret;
10912
06a64a0b 10913 exp_valid_block = NULL;
a1442452 10914 val = value_addr (result);
06a64a0b
TT
10915 release_value (val);
10916 value_free_to_mark (mark);
9c06b0b4
TJB
10917
10918 if (use_mask)
10919 {
10920 ret = target_masked_watch_num_registers (value_as_address (val),
10921 mask);
10922 if (ret == -1)
10923 error (_("This target does not support masked watchpoints."));
10924 else if (ret == -2)
10925 error (_("Invalid mask or memory region."));
10926 }
06a64a0b
TT
10927 }
10928 else if (val != NULL)
fa4727a6 10929 release_value (val);
c906108c 10930
e9cafbcc
TT
10931 tok = skip_spaces (arg);
10932 end_tok = skip_to_space (tok);
c906108c
SS
10933
10934 toklen = end_tok - tok;
10935 if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
10936 {
2d134ed3
PA
10937 struct expression *cond;
10938
60e1c644 10939 innermost_block = NULL;
c906108c 10940 tok = cond_start = end_tok + 1;
1bb9788d 10941 cond = parse_exp_1 (&tok, 0, 0, 0);
60e1c644
PA
10942
10943 /* The watchpoint expression may not be local, but the condition
10944 may still be. E.g.: `watch global if local > 0'. */
10945 cond_exp_valid_block = innermost_block;
10946
2d134ed3 10947 xfree (cond);
c906108c
SS
10948 cond_end = tok;
10949 }
10950 if (*tok)
8a3fe4f8 10951 error (_("Junk at end of command."));
c906108c 10952
53a5351d 10953 if (accessflag == hw_read)
c5aa993b 10954 bp_type = bp_read_watchpoint;
53a5351d 10955 else if (accessflag == hw_access)
c5aa993b
JM
10956 bp_type = bp_access_watchpoint;
10957 else
10958 bp_type = bp_hardware_watchpoint;
c906108c 10959
d983da9c 10960 frame = block_innermost_frame (exp_valid_block);
d983da9c
DJ
10961
10962 /* If the expression is "local", then set up a "watchpoint scope"
10963 breakpoint at the point where we've left the scope of the watchpoint
10964 expression. Create the scope breakpoint before the watchpoint, so
10965 that we will encounter it first in bpstat_stop_status. */
60e1c644 10966 if (exp_valid_block && frame)
d983da9c 10967 {
edb3359d
DJ
10968 if (frame_id_p (frame_unwind_caller_id (frame)))
10969 {
10970 scope_breakpoint
a6d9a66e
UW
10971 = create_internal_breakpoint (frame_unwind_caller_arch (frame),
10972 frame_unwind_caller_pc (frame),
06edf0c0
PA
10973 bp_watchpoint_scope,
10974 &momentary_breakpoint_ops);
d983da9c 10975
edb3359d 10976 scope_breakpoint->enable_state = bp_enabled;
d983da9c 10977
edb3359d
DJ
10978 /* Automatically delete the breakpoint when it hits. */
10979 scope_breakpoint->disposition = disp_del;
d983da9c 10980
edb3359d
DJ
10981 /* Only break in the proper frame (help with recursion). */
10982 scope_breakpoint->frame_id = frame_unwind_caller_id (frame);
d983da9c 10983
edb3359d 10984 /* Set the address at which we will stop. */
a6d9a66e
UW
10985 scope_breakpoint->loc->gdbarch
10986 = frame_unwind_caller_arch (frame);
edb3359d
DJ
10987 scope_breakpoint->loc->requested_address
10988 = frame_unwind_caller_pc (frame);
10989 scope_breakpoint->loc->address
a6d9a66e
UW
10990 = adjust_breakpoint_address (scope_breakpoint->loc->gdbarch,
10991 scope_breakpoint->loc->requested_address,
edb3359d
DJ
10992 scope_breakpoint->type);
10993 }
d983da9c
DJ
10994 }
10995
c906108c 10996 /* Now set up the breakpoint. */
3a5c3e22
PA
10997
10998 w = XCNEW (struct watchpoint);
10999 b = &w->base;
348d480f 11000 if (use_mask)
3a5c3e22
PA
11001 init_raw_breakpoint_without_location (b, NULL, bp_type,
11002 &masked_watchpoint_breakpoint_ops);
348d480f 11003 else
3a5c3e22
PA
11004 init_raw_breakpoint_without_location (b, NULL, bp_type,
11005 &watchpoint_breakpoint_ops);
37e4754d 11006 b->thread = thread;
b5de0fa7 11007 b->disposition = disp_donttouch;
348d480f 11008 b->pspace = current_program_space;
3a5c3e22
PA
11009 w->exp = exp;
11010 w->exp_valid_block = exp_valid_block;
11011 w->cond_exp_valid_block = cond_exp_valid_block;
06a64a0b
TT
11012 if (just_location)
11013 {
11014 struct type *t = value_type (val);
11015 CORE_ADDR addr = value_as_address (val);
11016 char *name;
11017
11018 t = check_typedef (TYPE_TARGET_TYPE (check_typedef (t)));
11019 name = type_to_string (t);
11020
3a5c3e22 11021 w->exp_string_reparse = xstrprintf ("* (%s *) %s", name,
d63d0675 11022 core_addr_to_string (addr));
06a64a0b
TT
11023 xfree (name);
11024
3a5c3e22 11025 w->exp_string = xstrprintf ("-location %.*s",
d63d0675
JK
11026 (int) (exp_end - exp_start), exp_start);
11027
06a64a0b
TT
11028 /* The above expression is in C. */
11029 b->language = language_c;
11030 }
11031 else
3a5c3e22 11032 w->exp_string = savestring (exp_start, exp_end - exp_start);
9c06b0b4
TJB
11033
11034 if (use_mask)
11035 {
3a5c3e22 11036 w->hw_wp_mask = mask;
9c06b0b4
TJB
11037 }
11038 else
11039 {
3a5c3e22
PA
11040 w->val = val;
11041 w->val_valid = 1;
9c06b0b4 11042 }
77b06cd7 11043
c906108c
SS
11044 if (cond_start)
11045 b->cond_string = savestring (cond_start, cond_end - cond_start);
11046 else
11047 b->cond_string = 0;
c5aa993b 11048
c906108c 11049 if (frame)
f6bc2008 11050 {
3a5c3e22
PA
11051 w->watchpoint_frame = get_frame_id (frame);
11052 w->watchpoint_thread = inferior_ptid;
f6bc2008 11053 }
c906108c 11054 else
f6bc2008 11055 {
3a5c3e22
PA
11056 w->watchpoint_frame = null_frame_id;
11057 w->watchpoint_thread = null_ptid;
f6bc2008 11058 }
c906108c 11059
d983da9c 11060 if (scope_breakpoint != NULL)
c906108c 11061 {
d983da9c
DJ
11062 /* The scope breakpoint is related to the watchpoint. We will
11063 need to act on them together. */
11064 b->related_breakpoint = scope_breakpoint;
11065 scope_breakpoint->related_breakpoint = b;
c906108c 11066 }
d983da9c 11067
06a64a0b
TT
11068 if (!just_location)
11069 value_free_to_mark (mark);
2d134ed3 11070
a9634178
TJB
11071 TRY_CATCH (e, RETURN_MASK_ALL)
11072 {
11073 /* Finally update the new watchpoint. This creates the locations
11074 that should be inserted. */
3a5c3e22 11075 update_watchpoint (w, 1);
a9634178
TJB
11076 }
11077 if (e.reason < 0)
11078 {
11079 delete_breakpoint (b);
11080 throw_exception (e);
11081 }
11082
3ea46bff 11083 install_breakpoint (internal, b, 1);
c906108c
SS
11084}
11085
e09342b5 11086/* Return count of debug registers needed to watch the given expression.
e09342b5 11087 If the watchpoint cannot be handled in hardware return zero. */
c906108c 11088
c906108c 11089static int
a9634178 11090can_use_hardware_watchpoint (struct value *v)
c906108c
SS
11091{
11092 int found_memory_cnt = 0;
2e70b7b9 11093 struct value *head = v;
c906108c
SS
11094
11095 /* Did the user specifically forbid us to use hardware watchpoints? */
c5aa993b 11096 if (!can_use_hw_watchpoints)
c906108c 11097 return 0;
c5aa993b 11098
5c44784c
JM
11099 /* Make sure that the value of the expression depends only upon
11100 memory contents, and values computed from them within GDB. If we
11101 find any register references or function calls, we can't use a
11102 hardware watchpoint.
11103
11104 The idea here is that evaluating an expression generates a series
11105 of values, one holding the value of every subexpression. (The
11106 expression a*b+c has five subexpressions: a, b, a*b, c, and
11107 a*b+c.) GDB's values hold almost enough information to establish
11108 the criteria given above --- they identify memory lvalues,
11109 register lvalues, computed values, etcetera. So we can evaluate
11110 the expression, and then scan the chain of values that leaves
11111 behind to decide whether we can detect any possible change to the
11112 expression's final value using only hardware watchpoints.
11113
11114 However, I don't think that the values returned by inferior
11115 function calls are special in any way. So this function may not
11116 notice that an expression involving an inferior function call
11117 can't be watched with hardware watchpoints. FIXME. */
17cf0ecd 11118 for (; v; v = value_next (v))
c906108c 11119 {
5c44784c 11120 if (VALUE_LVAL (v) == lval_memory)
c906108c 11121 {
8464be76
DJ
11122 if (v != head && value_lazy (v))
11123 /* A lazy memory lvalue in the chain is one that GDB never
11124 needed to fetch; we either just used its address (e.g.,
11125 `a' in `a.b') or we never needed it at all (e.g., `a'
11126 in `a,b'). This doesn't apply to HEAD; if that is
11127 lazy then it was not readable, but watch it anyway. */
5c44784c 11128 ;
53a5351d 11129 else
5c44784c
JM
11130 {
11131 /* Ahh, memory we actually used! Check if we can cover
11132 it with hardware watchpoints. */
df407dfe 11133 struct type *vtype = check_typedef (value_type (v));
2e70b7b9
MS
11134
11135 /* We only watch structs and arrays if user asked for it
11136 explicitly, never if they just happen to appear in a
11137 middle of some value chain. */
11138 if (v == head
11139 || (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
11140 && TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
11141 {
42ae5230 11142 CORE_ADDR vaddr = value_address (v);
e09342b5
TJB
11143 int len;
11144 int num_regs;
11145
a9634178 11146 len = (target_exact_watchpoints
e09342b5
TJB
11147 && is_scalar_type_recursive (vtype))?
11148 1 : TYPE_LENGTH (value_type (v));
2e70b7b9 11149
e09342b5
TJB
11150 num_regs = target_region_ok_for_hw_watchpoint (vaddr, len);
11151 if (!num_regs)
2e70b7b9
MS
11152 return 0;
11153 else
e09342b5 11154 found_memory_cnt += num_regs;
2e70b7b9 11155 }
5c44784c 11156 }
c5aa993b 11157 }
5086187c
AC
11158 else if (VALUE_LVAL (v) != not_lval
11159 && deprecated_value_modifiable (v) == 0)
38b6c3b3 11160 return 0; /* These are values from the history (e.g., $1). */
5086187c 11161 else if (VALUE_LVAL (v) == lval_register)
38b6c3b3 11162 return 0; /* Cannot watch a register with a HW watchpoint. */
c906108c
SS
11163 }
11164
11165 /* The expression itself looks suitable for using a hardware
11166 watchpoint, but give the target machine a chance to reject it. */
11167 return found_memory_cnt;
11168}
11169
8b93c638 11170void
84f4c1fe 11171watch_command_wrapper (char *arg, int from_tty, int internal)
8b93c638 11172{
84f4c1fe 11173 watch_command_1 (arg, hw_write, from_tty, 0, internal);
06a64a0b
TT
11174}
11175
06a64a0b
TT
11176/* A helper function that looks for the "-location" argument and then
11177 calls watch_command_1. */
11178
11179static void
11180watch_maybe_just_location (char *arg, int accessflag, int from_tty)
11181{
11182 int just_location = 0;
11183
11184 if (arg
11185 && (check_for_argument (&arg, "-location", sizeof ("-location") - 1)
11186 || check_for_argument (&arg, "-l", sizeof ("-l") - 1)))
11187 {
e9cafbcc 11188 arg = skip_spaces (arg);
06a64a0b
TT
11189 just_location = 1;
11190 }
11191
84f4c1fe 11192 watch_command_1 (arg, accessflag, from_tty, just_location, 0);
8b93c638 11193}
8926118c 11194
c5aa993b 11195static void
fba45db2 11196watch_command (char *arg, int from_tty)
c906108c 11197{
06a64a0b 11198 watch_maybe_just_location (arg, hw_write, from_tty);
c906108c
SS
11199}
11200
8b93c638 11201void
84f4c1fe 11202rwatch_command_wrapper (char *arg, int from_tty, int internal)
8b93c638 11203{
84f4c1fe 11204 watch_command_1 (arg, hw_read, from_tty, 0, internal);
8b93c638 11205}
8926118c 11206
c5aa993b 11207static void
fba45db2 11208rwatch_command (char *arg, int from_tty)
c906108c 11209{
06a64a0b 11210 watch_maybe_just_location (arg, hw_read, from_tty);
c906108c
SS
11211}
11212
8b93c638 11213void
84f4c1fe 11214awatch_command_wrapper (char *arg, int from_tty, int internal)
8b93c638 11215{
84f4c1fe 11216 watch_command_1 (arg, hw_access, from_tty, 0, internal);
8b93c638 11217}
8926118c 11218
c5aa993b 11219static void
fba45db2 11220awatch_command (char *arg, int from_tty)
c906108c 11221{
06a64a0b 11222 watch_maybe_just_location (arg, hw_access, from_tty);
c906108c 11223}
c906108c 11224\f
c5aa993b 11225
43ff13b4 11226/* Helper routines for the until_command routine in infcmd.c. Here
c906108c
SS
11227 because it uses the mechanisms of breakpoints. */
11228
bfec99b2
PA
11229struct until_break_command_continuation_args
11230{
11231 struct breakpoint *breakpoint;
11232 struct breakpoint *breakpoint2;
186c406b 11233 int thread_num;
bfec99b2
PA
11234};
11235
43ff13b4 11236/* This function is called by fetch_inferior_event via the
4a64f543 11237 cmd_continuation pointer, to complete the until command. It takes
43ff13b4 11238 care of cleaning up the temporary breakpoints set up by the until
4a64f543 11239 command. */
c2c6d25f 11240static void
fa4cd53f 11241until_break_command_continuation (void *arg, int err)
43ff13b4 11242{
bfec99b2
PA
11243 struct until_break_command_continuation_args *a = arg;
11244
11245 delete_breakpoint (a->breakpoint);
11246 if (a->breakpoint2)
11247 delete_breakpoint (a->breakpoint2);
186c406b 11248 delete_longjmp_breakpoint (a->thread_num);
43ff13b4
JM
11249}
11250
c906108c 11251void
ae66c1fc 11252until_break_command (char *arg, int from_tty, int anywhere)
c906108c
SS
11253{
11254 struct symtabs_and_lines sals;
11255 struct symtab_and_line sal;
8556afb4
PA
11256 struct frame_info *frame;
11257 struct gdbarch *frame_gdbarch;
11258 struct frame_id stack_frame_id;
11259 struct frame_id caller_frame_id;
c906108c 11260 struct breakpoint *breakpoint;
f107f563 11261 struct breakpoint *breakpoint2 = NULL;
c906108c 11262 struct cleanup *old_chain;
186c406b
TT
11263 int thread;
11264 struct thread_info *tp;
c906108c
SS
11265
11266 clear_proceed_status ();
11267
11268 /* Set a breakpoint where the user wants it and at return from
4a64f543 11269 this function. */
c5aa993b 11270
1bfeeb0f 11271 if (last_displayed_sal_is_valid ())
f8eba3c6 11272 sals = decode_line_1 (&arg, DECODE_LINE_FUNFIRSTLINE,
1bfeeb0f 11273 get_last_displayed_symtab (),
f8eba3c6 11274 get_last_displayed_line ());
c906108c 11275 else
f8eba3c6
TT
11276 sals = decode_line_1 (&arg, DECODE_LINE_FUNFIRSTLINE,
11277 (struct symtab *) NULL, 0);
c5aa993b 11278
c906108c 11279 if (sals.nelts != 1)
8a3fe4f8 11280 error (_("Couldn't get information on specified line."));
c5aa993b 11281
c906108c 11282 sal = sals.sals[0];
4a64f543 11283 xfree (sals.sals); /* malloc'd, so freed. */
c5aa993b 11284
c906108c 11285 if (*arg)
8a3fe4f8 11286 error (_("Junk at end of arguments."));
c5aa993b 11287
c906108c 11288 resolve_sal_pc (&sal);
c5aa993b 11289
186c406b
TT
11290 tp = inferior_thread ();
11291 thread = tp->num;
11292
883bc8d1
PA
11293 old_chain = make_cleanup (null_cleanup, NULL);
11294
8556afb4
PA
11295 /* Note linespec handling above invalidates the frame chain.
11296 Installing a breakpoint also invalidates the frame chain (as it
11297 may need to switch threads), so do any frame handling before
11298 that. */
11299
11300 frame = get_selected_frame (NULL);
11301 frame_gdbarch = get_frame_arch (frame);
11302 stack_frame_id = get_stack_frame_id (frame);
11303 caller_frame_id = frame_unwind_caller_id (frame);
883bc8d1 11304
ae66c1fc
EZ
11305 /* Keep within the current frame, or in frames called by the current
11306 one. */
edb3359d 11307
883bc8d1 11308 if (frame_id_p (caller_frame_id))
c906108c 11309 {
883bc8d1
PA
11310 struct symtab_and_line sal2;
11311
11312 sal2 = find_pc_line (frame_unwind_caller_pc (frame), 0);
11313 sal2.pc = frame_unwind_caller_pc (frame);
a6d9a66e 11314 breakpoint2 = set_momentary_breakpoint (frame_unwind_caller_arch (frame),
883bc8d1
PA
11315 sal2,
11316 caller_frame_id,
f107f563
VP
11317 bp_until);
11318 make_cleanup_delete_breakpoint (breakpoint2);
186c406b 11319
883bc8d1 11320 set_longjmp_breakpoint (tp, caller_frame_id);
186c406b 11321 make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
c906108c 11322 }
c5aa993b 11323
c70a6932
JK
11324 /* set_momentary_breakpoint could invalidate FRAME. */
11325 frame = NULL;
11326
883bc8d1
PA
11327 if (anywhere)
11328 /* If the user told us to continue until a specified location,
11329 we don't specify a frame at which we need to stop. */
11330 breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
11331 null_frame_id, bp_until);
11332 else
11333 /* Otherwise, specify the selected frame, because we want to stop
11334 only at the very same frame. */
11335 breakpoint = set_momentary_breakpoint (frame_gdbarch, sal,
11336 stack_frame_id, bp_until);
11337 make_cleanup_delete_breakpoint (breakpoint);
11338
a493e3e2 11339 proceed (-1, GDB_SIGNAL_DEFAULT, 0);
f107f563 11340
4a64f543
MS
11341 /* If we are running asynchronously, and proceed call above has
11342 actually managed to start the target, arrange for breakpoints to
11343 be deleted when the target stops. Otherwise, we're already
11344 stopped and delete breakpoints via cleanup chain. */
f107f563 11345
8ea051c5 11346 if (target_can_async_p () && is_running (inferior_ptid))
f107f563 11347 {
bfec99b2
PA
11348 struct until_break_command_continuation_args *args;
11349 args = xmalloc (sizeof (*args));
f107f563 11350
bfec99b2
PA
11351 args->breakpoint = breakpoint;
11352 args->breakpoint2 = breakpoint2;
186c406b 11353 args->thread_num = thread;
f107f563
VP
11354
11355 discard_cleanups (old_chain);
95e54da7
PA
11356 add_continuation (inferior_thread (),
11357 until_break_command_continuation, args,
604ead4a 11358 xfree);
f107f563
VP
11359 }
11360 else
c5aa993b 11361 do_cleanups (old_chain);
c906108c 11362}
ae66c1fc 11363
c906108c
SS
11364/* This function attempts to parse an optional "if <cond>" clause
11365 from the arg string. If one is not found, it returns NULL.
c5aa993b 11366
c906108c
SS
11367 Else, it returns a pointer to the condition string. (It does not
11368 attempt to evaluate the string against a particular block.) And,
11369 it updates arg to point to the first character following the parsed
4a64f543 11370 if clause in the arg string. */
53a5351d 11371
c906108c 11372static char *
fba45db2 11373ep_parse_optional_if_clause (char **arg)
c906108c 11374{
c5aa993b
JM
11375 char *cond_string;
11376
11377 if (((*arg)[0] != 'i') || ((*arg)[1] != 'f') || !isspace ((*arg)[2]))
c906108c 11378 return NULL;
c5aa993b 11379
4a64f543 11380 /* Skip the "if" keyword. */
c906108c 11381 (*arg) += 2;
c5aa993b 11382
c906108c 11383 /* Skip any extra leading whitespace, and record the start of the
4a64f543 11384 condition string. */
e9cafbcc 11385 *arg = skip_spaces (*arg);
c906108c 11386 cond_string = *arg;
c5aa993b 11387
4a64f543
MS
11388 /* Assume that the condition occupies the remainder of the arg
11389 string. */
c906108c 11390 (*arg) += strlen (cond_string);
c5aa993b 11391
c906108c
SS
11392 return cond_string;
11393}
c5aa993b 11394
c906108c
SS
11395/* Commands to deal with catching events, such as signals, exceptions,
11396 process start/exit, etc. */
c5aa993b
JM
11397
11398typedef enum
11399{
44feb3ce
TT
11400 catch_fork_temporary, catch_vfork_temporary,
11401 catch_fork_permanent, catch_vfork_permanent
c5aa993b
JM
11402}
11403catch_fork_kind;
11404
c906108c 11405static void
cc59ec59
MS
11406catch_fork_command_1 (char *arg, int from_tty,
11407 struct cmd_list_element *command)
c906108c 11408{
a6d9a66e 11409 struct gdbarch *gdbarch = get_current_arch ();
c5aa993b 11410 char *cond_string = NULL;
44feb3ce
TT
11411 catch_fork_kind fork_kind;
11412 int tempflag;
11413
11414 fork_kind = (catch_fork_kind) (uintptr_t) get_cmd_context (command);
11415 tempflag = (fork_kind == catch_fork_temporary
11416 || fork_kind == catch_vfork_temporary);
c5aa993b 11417
44feb3ce
TT
11418 if (!arg)
11419 arg = "";
e9cafbcc 11420 arg = skip_spaces (arg);
c5aa993b 11421
c906108c 11422 /* The allowed syntax is:
c5aa993b
JM
11423 catch [v]fork
11424 catch [v]fork if <cond>
11425
4a64f543 11426 First, check if there's an if clause. */
c906108c 11427 cond_string = ep_parse_optional_if_clause (&arg);
c5aa993b 11428
c906108c 11429 if ((*arg != '\0') && !isspace (*arg))
8a3fe4f8 11430 error (_("Junk at end of arguments."));
c5aa993b 11431
c906108c 11432 /* If this target supports it, create a fork or vfork catchpoint
4a64f543 11433 and enable reporting of such events. */
c5aa993b
JM
11434 switch (fork_kind)
11435 {
44feb3ce
TT
11436 case catch_fork_temporary:
11437 case catch_fork_permanent:
a6d9a66e 11438 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
ce78b96d 11439 &catch_fork_breakpoint_ops);
c906108c 11440 break;
44feb3ce
TT
11441 case catch_vfork_temporary:
11442 case catch_vfork_permanent:
a6d9a66e 11443 create_fork_vfork_event_catchpoint (gdbarch, tempflag, cond_string,
ce78b96d 11444 &catch_vfork_breakpoint_ops);
c906108c 11445 break;
c5aa993b 11446 default:
8a3fe4f8 11447 error (_("unsupported or unknown fork kind; cannot catch it"));
c906108c 11448 break;
c5aa993b 11449 }
c906108c
SS
11450}
11451
11452static void
cc59ec59
MS
11453catch_exec_command_1 (char *arg, int from_tty,
11454 struct cmd_list_element *command)
c906108c 11455{
b4d90040 11456 struct exec_catchpoint *c;
a6d9a66e 11457 struct gdbarch *gdbarch = get_current_arch ();
44feb3ce 11458 int tempflag;
c5aa993b 11459 char *cond_string = NULL;
c906108c 11460
44feb3ce
TT
11461 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11462
11463 if (!arg)
11464 arg = "";
e9cafbcc 11465 arg = skip_spaces (arg);
c906108c
SS
11466
11467 /* The allowed syntax is:
c5aa993b
JM
11468 catch exec
11469 catch exec if <cond>
c906108c 11470
4a64f543 11471 First, check if there's an if clause. */
c906108c
SS
11472 cond_string = ep_parse_optional_if_clause (&arg);
11473
11474 if ((*arg != '\0') && !isspace (*arg))
8a3fe4f8 11475 error (_("Junk at end of arguments."));
c906108c 11476
b4d90040
PA
11477 c = XNEW (struct exec_catchpoint);
11478 init_catchpoint (&c->base, gdbarch, tempflag, cond_string,
11479 &catch_exec_breakpoint_ops);
11480 c->exec_pathname = NULL;
11481
3ea46bff 11482 install_breakpoint (0, &c->base, 1);
c906108c 11483}
c5aa993b 11484
3086aeae 11485static enum print_stop_action
348d480f 11486print_it_exception_catchpoint (bpstat bs)
3086aeae 11487{
79a45e25 11488 struct ui_out *uiout = current_uiout;
348d480f 11489 struct breakpoint *b = bs->breakpoint_at;
ade92717 11490 int bp_temp, bp_throw;
3086aeae 11491
ade92717 11492 annotate_catchpoint (b->number);
3086aeae 11493
ade92717
AR
11494 bp_throw = strstr (b->addr_string, "throw") != NULL;
11495 if (b->loc->address != b->loc->requested_address)
11496 breakpoint_adjustment_warning (b->loc->requested_address,
11497 b->loc->address,
11498 b->number, 1);
df2b6d2d 11499 bp_temp = b->disposition == disp_del;
ade92717
AR
11500 ui_out_text (uiout,
11501 bp_temp ? "Temporary catchpoint "
11502 : "Catchpoint ");
11503 if (!ui_out_is_mi_like_p (uiout))
11504 ui_out_field_int (uiout, "bkptno", b->number);
11505 ui_out_text (uiout,
c0b37c48
AR
11506 bp_throw ? " (exception thrown), "
11507 : " (exception caught), ");
ade92717
AR
11508 if (ui_out_is_mi_like_p (uiout))
11509 {
11510 ui_out_field_string (uiout, "reason",
11511 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
11512 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
11513 ui_out_field_int (uiout, "bkptno", b->number);
11514 }
3086aeae
DJ
11515 return PRINT_SRC_AND_LOC;
11516}
11517
11518static void
cc59ec59
MS
11519print_one_exception_catchpoint (struct breakpoint *b,
11520 struct bp_location **last_loc)
3086aeae 11521{
79a45b7d 11522 struct value_print_options opts;
79a45e25 11523 struct ui_out *uiout = current_uiout;
cc59ec59 11524
79a45b7d
TT
11525 get_user_print_options (&opts);
11526 if (opts.addressprint)
3086aeae
DJ
11527 {
11528 annotate_field (4);
604133b5
AR
11529 if (b->loc == NULL || b->loc->shlib_disabled)
11530 ui_out_field_string (uiout, "addr", "<PENDING>");
11531 else
5af949e3
UW
11532 ui_out_field_core_addr (uiout, "addr",
11533 b->loc->gdbarch, b->loc->address);
3086aeae
DJ
11534 }
11535 annotate_field (5);
604133b5 11536 if (b->loc)
a6d9a66e 11537 *last_loc = b->loc;
3086aeae
DJ
11538 if (strstr (b->addr_string, "throw") != NULL)
11539 ui_out_field_string (uiout, "what", "exception throw");
11540 else
11541 ui_out_field_string (uiout, "what", "exception catch");
11542}
11543
11544static void
11545print_mention_exception_catchpoint (struct breakpoint *b)
11546{
79a45e25 11547 struct ui_out *uiout = current_uiout;
ade92717
AR
11548 int bp_temp;
11549 int bp_throw;
11550
df2b6d2d 11551 bp_temp = b->disposition == disp_del;
ade92717
AR
11552 bp_throw = strstr (b->addr_string, "throw") != NULL;
11553 ui_out_text (uiout, bp_temp ? _("Temporary catchpoint ")
11554 : _("Catchpoint "));
11555 ui_out_field_int (uiout, "bkptno", b->number);
11556 ui_out_text (uiout, bp_throw ? _(" (throw)")
11557 : _(" (catch)"));
3086aeae
DJ
11558}
11559
6149aea9
PA
11560/* Implement the "print_recreate" breakpoint_ops method for throw and
11561 catch catchpoints. */
11562
11563static void
4a64f543
MS
11564print_recreate_exception_catchpoint (struct breakpoint *b,
11565 struct ui_file *fp)
6149aea9
PA
11566{
11567 int bp_temp;
11568 int bp_throw;
11569
11570 bp_temp = b->disposition == disp_del;
11571 bp_throw = strstr (b->addr_string, "throw") != NULL;
11572 fprintf_unfiltered (fp, bp_temp ? "tcatch " : "catch ");
11573 fprintf_unfiltered (fp, bp_throw ? "throw" : "catch");
d9b3f62e 11574 print_recreate_thread (b, fp);
6149aea9
PA
11575}
11576
2060206e 11577static struct breakpoint_ops gnu_v3_exception_catchpoint_ops;
3086aeae
DJ
11578
11579static int
11580handle_gnu_v3_exceptions (int tempflag, char *cond_string,
11581 enum exception_event_kind ex_event, int from_tty)
11582{
604133b5
AR
11583 char *trigger_func_name;
11584
3086aeae 11585 if (ex_event == EX_EVENT_CATCH)
604133b5 11586 trigger_func_name = "__cxa_begin_catch";
3086aeae 11587 else
604133b5 11588 trigger_func_name = "__cxa_throw";
3086aeae 11589
8cdf0e15 11590 create_breakpoint (get_current_arch (),
e7e0cddf 11591 trigger_func_name, cond_string, -1, NULL,
8cdf0e15 11592 0 /* condition and thread are valid. */,
0fb4aa4b 11593 tempflag, bp_breakpoint,
8cdf0e15
VP
11594 0,
11595 AUTO_BOOLEAN_TRUE /* pending */,
11596 &gnu_v3_exception_catchpoint_ops, from_tty,
84f4c1fe 11597 1 /* enabled */,
44f238bb
PA
11598 0 /* internal */,
11599 0);
3086aeae 11600
3086aeae
DJ
11601 return 1;
11602}
11603
4a64f543 11604/* Deal with "catch catch" and "catch throw" commands. */
c906108c
SS
11605
11606static void
fba45db2
KB
11607catch_exception_command_1 (enum exception_event_kind ex_event, char *arg,
11608 int tempflag, int from_tty)
c906108c 11609{
c5aa993b 11610 char *cond_string = NULL;
c5aa993b 11611
44feb3ce
TT
11612 if (!arg)
11613 arg = "";
e9cafbcc 11614 arg = skip_spaces (arg);
c5aa993b 11615
c906108c
SS
11616 cond_string = ep_parse_optional_if_clause (&arg);
11617
11618 if ((*arg != '\0') && !isspace (*arg))
8a3fe4f8 11619 error (_("Junk at end of arguments."));
c906108c 11620
059fb39f
PM
11621 if (ex_event != EX_EVENT_THROW
11622 && ex_event != EX_EVENT_CATCH)
8a3fe4f8 11623 error (_("Unsupported or unknown exception event; cannot catch it"));
c906108c 11624
3086aeae
DJ
11625 if (handle_gnu_v3_exceptions (tempflag, cond_string, ex_event, from_tty))
11626 return;
11627
8a3fe4f8 11628 warning (_("Unsupported with this platform/compiler combination."));
c906108c
SS
11629}
11630
44feb3ce
TT
11631/* Implementation of "catch catch" command. */
11632
11633static void
11634catch_catch_command (char *arg, int from_tty, struct cmd_list_element *command)
11635{
11636 int tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
cc59ec59 11637
44feb3ce
TT
11638 catch_exception_command_1 (EX_EVENT_CATCH, arg, tempflag, from_tty);
11639}
11640
11641/* Implementation of "catch throw" command. */
11642
11643static void
11644catch_throw_command (char *arg, int from_tty, struct cmd_list_element *command)
11645{
11646 int tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
cc59ec59 11647
44feb3ce
TT
11648 catch_exception_command_1 (EX_EVENT_THROW, arg, tempflag, from_tty);
11649}
11650
9ac4176b 11651void
28010a5d
PA
11652init_ada_exception_breakpoint (struct breakpoint *b,
11653 struct gdbarch *gdbarch,
11654 struct symtab_and_line sal,
11655 char *addr_string,
c0a91b2b 11656 const struct breakpoint_ops *ops,
28010a5d
PA
11657 int tempflag,
11658 int from_tty)
f7f9143b 11659{
f7f9143b
JB
11660 if (from_tty)
11661 {
5af949e3
UW
11662 struct gdbarch *loc_gdbarch = get_sal_arch (sal);
11663 if (!loc_gdbarch)
11664 loc_gdbarch = gdbarch;
11665
6c95b8df
PA
11666 describe_other_breakpoints (loc_gdbarch,
11667 sal.pspace, sal.pc, sal.section, -1);
f7f9143b
JB
11668 /* FIXME: brobecker/2006-12-28: Actually, re-implement a special
11669 version for exception catchpoints, because two catchpoints
11670 used for different exception names will use the same address.
11671 In this case, a "breakpoint ... also set at..." warning is
4a64f543 11672 unproductive. Besides, the warning phrasing is also a bit
e5dd4106 11673 inappropriate, we should use the word catchpoint, and tell
f7f9143b
JB
11674 the user what type of catchpoint it is. The above is good
11675 enough for now, though. */
11676 }
11677
28010a5d 11678 init_raw_breakpoint (b, gdbarch, sal, bp_breakpoint, ops);
f7f9143b
JB
11679
11680 b->enable_state = bp_enabled;
11681 b->disposition = tempflag ? disp_del : disp_donttouch;
f7f9143b
JB
11682 b->addr_string = addr_string;
11683 b->language = language_ada;
f7f9143b
JB
11684}
11685
a96d9b2e
SDJ
11686/* Splits the argument using space as delimiter. Returns an xmalloc'd
11687 filter list, or NULL if no filtering is required. */
11688static VEC(int) *
11689catch_syscall_split_args (char *arg)
11690{
11691 VEC(int) *result = NULL;
29d0bb3d 11692 struct cleanup *cleanup = make_cleanup (VEC_cleanup (int), &result);
a96d9b2e
SDJ
11693
11694 while (*arg != '\0')
11695 {
11696 int i, syscall_number;
11697 char *endptr;
11698 char cur_name[128];
11699 struct syscall s;
11700
11701 /* Skip whitespace. */
11702 while (isspace (*arg))
11703 arg++;
11704
11705 for (i = 0; i < 127 && arg[i] && !isspace (arg[i]); ++i)
11706 cur_name[i] = arg[i];
11707 cur_name[i] = '\0';
11708 arg += i;
11709
11710 /* Check if the user provided a syscall name or a number. */
11711 syscall_number = (int) strtol (cur_name, &endptr, 0);
11712 if (*endptr == '\0')
bccd0dd2 11713 get_syscall_by_number (syscall_number, &s);
a96d9b2e
SDJ
11714 else
11715 {
11716 /* We have a name. Let's check if it's valid and convert it
11717 to a number. */
11718 get_syscall_by_name (cur_name, &s);
11719
11720 if (s.number == UNKNOWN_SYSCALL)
4a64f543
MS
11721 /* Here we have to issue an error instead of a warning,
11722 because GDB cannot do anything useful if there's no
11723 syscall number to be caught. */
a96d9b2e
SDJ
11724 error (_("Unknown syscall name '%s'."), cur_name);
11725 }
11726
11727 /* Ok, it's valid. */
11728 VEC_safe_push (int, result, s.number);
11729 }
11730
11731 discard_cleanups (cleanup);
11732 return result;
11733}
11734
11735/* Implement the "catch syscall" command. */
11736
11737static void
cc59ec59
MS
11738catch_syscall_command_1 (char *arg, int from_tty,
11739 struct cmd_list_element *command)
a96d9b2e
SDJ
11740{
11741 int tempflag;
11742 VEC(int) *filter;
11743 struct syscall s;
11744 struct gdbarch *gdbarch = get_current_arch ();
11745
11746 /* Checking if the feature if supported. */
11747 if (gdbarch_get_syscall_number_p (gdbarch) == 0)
11748 error (_("The feature 'catch syscall' is not supported on \
ea666128 11749this architecture yet."));
a96d9b2e
SDJ
11750
11751 tempflag = get_cmd_context (command) == CATCH_TEMPORARY;
11752
e9cafbcc 11753 arg = skip_spaces (arg);
a96d9b2e
SDJ
11754
11755 /* We need to do this first "dummy" translation in order
11756 to get the syscall XML file loaded or, most important,
11757 to display a warning to the user if there's no XML file
11758 for his/her architecture. */
11759 get_syscall_by_number (0, &s);
11760
11761 /* The allowed syntax is:
11762 catch syscall
11763 catch syscall <name | number> [<name | number> ... <name | number>]
11764
11765 Let's check if there's a syscall name. */
11766
11767 if (arg != NULL)
11768 filter = catch_syscall_split_args (arg);
11769 else
11770 filter = NULL;
11771
11772 create_syscall_event_catchpoint (tempflag, filter,
11773 &catch_syscall_breakpoint_ops);
11774}
11775
c906108c 11776static void
fba45db2 11777catch_command (char *arg, int from_tty)
c906108c 11778{
44feb3ce 11779 error (_("Catch requires an event name."));
c906108c
SS
11780}
11781\f
11782
11783static void
fba45db2 11784tcatch_command (char *arg, int from_tty)
c906108c 11785{
44feb3ce 11786 error (_("Catch requires an event name."));
c906108c
SS
11787}
11788
8a2c437b
TT
11789/* A qsort comparison function that sorts breakpoints in order. */
11790
11791static int
11792compare_breakpoints (const void *a, const void *b)
11793{
11794 const breakpoint_p *ba = a;
11795 uintptr_t ua = (uintptr_t) *ba;
11796 const breakpoint_p *bb = b;
11797 uintptr_t ub = (uintptr_t) *bb;
11798
11799 if ((*ba)->number < (*bb)->number)
11800 return -1;
11801 else if ((*ba)->number > (*bb)->number)
11802 return 1;
11803
11804 /* Now sort by address, in case we see, e..g, two breakpoints with
11805 the number 0. */
11806 if (ua < ub)
11807 return -1;
94b0e70d 11808 return ua > ub ? 1 : 0;
8a2c437b
TT
11809}
11810
80f8a6eb 11811/* Delete breakpoints by address or line. */
c906108c
SS
11812
11813static void
fba45db2 11814clear_command (char *arg, int from_tty)
c906108c 11815{
8a2c437b 11816 struct breakpoint *b, *prev;
d6e956e5
VP
11817 VEC(breakpoint_p) *found = 0;
11818 int ix;
c906108c
SS
11819 int default_match;
11820 struct symtabs_and_lines sals;
11821 struct symtab_and_line sal;
c906108c 11822 int i;
8a2c437b 11823 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
c906108c
SS
11824
11825 if (arg)
11826 {
39cf75f7
DE
11827 sals = decode_line_with_current_source (arg,
11828 (DECODE_LINE_FUNFIRSTLINE
11829 | DECODE_LINE_LIST_MODE));
cf4ded82 11830 make_cleanup (xfree, sals.sals);
c906108c
SS
11831 default_match = 0;
11832 }
11833 else
11834 {
c5aa993b 11835 sals.sals = (struct symtab_and_line *)
c906108c 11836 xmalloc (sizeof (struct symtab_and_line));
80f8a6eb 11837 make_cleanup (xfree, sals.sals);
4a64f543 11838 init_sal (&sal); /* Initialize to zeroes. */
1bfeeb0f
JL
11839
11840 /* Set sal's line, symtab, pc, and pspace to the values
11841 corresponding to the last call to print_frame_info. If the
11842 codepoint is not valid, this will set all the fields to 0. */
11843 get_last_displayed_sal (&sal);
c906108c 11844 if (sal.symtab == 0)
8a3fe4f8 11845 error (_("No source file specified."));
c906108c
SS
11846
11847 sals.sals[0] = sal;
11848 sals.nelts = 1;
11849
11850 default_match = 1;
11851 }
11852
4a64f543
MS
11853 /* We don't call resolve_sal_pc here. That's not as bad as it
11854 seems, because all existing breakpoints typically have both
11855 file/line and pc set. So, if clear is given file/line, we can
11856 match this to existing breakpoint without obtaining pc at all.
ed0616c6
VP
11857
11858 We only support clearing given the address explicitly
11859 present in breakpoint table. Say, we've set breakpoint
4a64f543 11860 at file:line. There were several PC values for that file:line,
ed0616c6 11861 due to optimization, all in one block.
4a64f543
MS
11862
11863 We've picked one PC value. If "clear" is issued with another
ed0616c6
VP
11864 PC corresponding to the same file:line, the breakpoint won't
11865 be cleared. We probably can still clear the breakpoint, but
11866 since the other PC value is never presented to user, user
11867 can only find it by guessing, and it does not seem important
11868 to support that. */
11869
4a64f543
MS
11870 /* For each line spec given, delete bps which correspond to it. Do
11871 it in two passes, solely to preserve the current behavior that
11872 from_tty is forced true if we delete more than one
11873 breakpoint. */
c906108c 11874
80f8a6eb 11875 found = NULL;
8a2c437b 11876 make_cleanup (VEC_cleanup (breakpoint_p), &found);
c906108c
SS
11877 for (i = 0; i < sals.nelts; i++)
11878 {
b57a636e 11879 int is_abs;
4aac40c8 11880
c906108c 11881 /* If exact pc given, clear bpts at that pc.
c5aa993b
JM
11882 If line given (pc == 0), clear all bpts on specified line.
11883 If defaulting, clear all bpts on default line
c906108c 11884 or at default pc.
c5aa993b
JM
11885
11886 defaulting sal.pc != 0 tests to do
11887
11888 0 1 pc
11889 1 1 pc _and_ line
11890 0 0 line
11891 1 0 <can't happen> */
c906108c
SS
11892
11893 sal = sals.sals[i];
4aac40c8 11894 is_abs = sal.symtab == NULL ? 1 : IS_ABSOLUTE_PATH (sal.symtab->filename);
c906108c 11895
4a64f543 11896 /* Find all matching breakpoints and add them to 'found'. */
d6e956e5 11897 ALL_BREAKPOINTS (b)
c5aa993b 11898 {
0d381245 11899 int match = 0;
4a64f543 11900 /* Are we going to delete b? */
cc60f2e3 11901 if (b->type != bp_none && !is_watchpoint (b))
0d381245
VP
11902 {
11903 struct bp_location *loc = b->loc;
11904 for (; loc; loc = loc->next)
11905 {
f8eba3c6
TT
11906 /* If the user specified file:line, don't allow a PC
11907 match. This matches historical gdb behavior. */
11908 int pc_match = (!sal.explicit_line
11909 && sal.pc
11910 && (loc->pspace == sal.pspace)
11911 && (loc->address == sal.pc)
11912 && (!section_is_overlay (loc->section)
11913 || loc->section == sal.section));
4aac40c8
TT
11914 int line_match = 0;
11915
11916 if ((default_match || sal.explicit_line)
11917 && loc->source_file != NULL
11918 && sal.symtab != NULL
11919 && sal.pspace == loc->pspace
11920 && loc->line_number == sal.line)
11921 {
11922 if (filename_cmp (loc->source_file,
11923 sal.symtab->filename) == 0)
11924 line_match = 1;
11925 else if (!IS_ABSOLUTE_PATH (sal.symtab->filename)
11926 && compare_filenames_for_search (loc->source_file,
b57a636e 11927 sal.symtab->filename))
4aac40c8
TT
11928 line_match = 1;
11929 }
11930
0d381245
VP
11931 if (pc_match || line_match)
11932 {
11933 match = 1;
11934 break;
11935 }
11936 }
11937 }
11938
11939 if (match)
d6e956e5 11940 VEC_safe_push(breakpoint_p, found, b);
c906108c 11941 }
80f8a6eb 11942 }
8a2c437b 11943
80f8a6eb 11944 /* Now go thru the 'found' chain and delete them. */
d6e956e5 11945 if (VEC_empty(breakpoint_p, found))
80f8a6eb
MS
11946 {
11947 if (arg)
8a3fe4f8 11948 error (_("No breakpoint at %s."), arg);
80f8a6eb 11949 else
8a3fe4f8 11950 error (_("No breakpoint at this line."));
80f8a6eb 11951 }
c906108c 11952
8a2c437b
TT
11953 /* Remove duplicates from the vec. */
11954 qsort (VEC_address (breakpoint_p, found),
11955 VEC_length (breakpoint_p, found),
11956 sizeof (breakpoint_p),
11957 compare_breakpoints);
11958 prev = VEC_index (breakpoint_p, found, 0);
11959 for (ix = 1; VEC_iterate (breakpoint_p, found, ix, b); ++ix)
11960 {
11961 if (b == prev)
11962 {
11963 VEC_ordered_remove (breakpoint_p, found, ix);
11964 --ix;
11965 }
11966 }
11967
d6e956e5 11968 if (VEC_length(breakpoint_p, found) > 1)
4a64f543 11969 from_tty = 1; /* Always report if deleted more than one. */
80f8a6eb 11970 if (from_tty)
a3f17187 11971 {
d6e956e5 11972 if (VEC_length(breakpoint_p, found) == 1)
a3f17187
AC
11973 printf_unfiltered (_("Deleted breakpoint "));
11974 else
11975 printf_unfiltered (_("Deleted breakpoints "));
11976 }
ef37bb07 11977 annotate_breakpoints_changed ();
d6e956e5
VP
11978
11979 for (ix = 0; VEC_iterate(breakpoint_p, found, ix, b); ix++)
80f8a6eb 11980 {
c5aa993b 11981 if (from_tty)
d6e956e5
VP
11982 printf_unfiltered ("%d ", b->number);
11983 delete_breakpoint (b);
c906108c 11984 }
80f8a6eb
MS
11985 if (from_tty)
11986 putchar_unfiltered ('\n');
8a2c437b
TT
11987
11988 do_cleanups (cleanups);
c906108c
SS
11989}
11990\f
11991/* Delete breakpoint in BS if they are `delete' breakpoints and
11992 all breakpoints that are marked for deletion, whether hit or not.
11993 This is called after any breakpoint is hit, or after errors. */
11994
11995void
fba45db2 11996breakpoint_auto_delete (bpstat bs)
c906108c 11997{
35df4500 11998 struct breakpoint *b, *b_tmp;
c906108c
SS
11999
12000 for (; bs; bs = bs->next)
f431efe5
PA
12001 if (bs->breakpoint_at
12002 && bs->breakpoint_at->disposition == disp_del
c906108c 12003 && bs->stop)
f431efe5 12004 delete_breakpoint (bs->breakpoint_at);
c906108c 12005
35df4500 12006 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 12007 {
b5de0fa7 12008 if (b->disposition == disp_del_at_next_stop)
c5aa993b
JM
12009 delete_breakpoint (b);
12010 }
c906108c
SS
12011}
12012
4a64f543
MS
12013/* A comparison function for bp_location AP and BP being interfaced to
12014 qsort. Sort elements primarily by their ADDRESS (no matter what
12015 does breakpoint_address_is_meaningful say for its OWNER),
12016 secondarily by ordering first bp_permanent OWNERed elements and
12017 terciarily just ensuring the array is sorted stable way despite
e5dd4106 12018 qsort being an unstable algorithm. */
876fa593
JK
12019
12020static int
494cfb0f 12021bp_location_compare (const void *ap, const void *bp)
876fa593 12022{
494cfb0f
JK
12023 struct bp_location *a = *(void **) ap;
12024 struct bp_location *b = *(void **) bp;
2bdf28a0 12025 /* A and B come from existing breakpoints having non-NULL OWNER. */
876fa593
JK
12026 int a_perm = a->owner->enable_state == bp_permanent;
12027 int b_perm = b->owner->enable_state == bp_permanent;
12028
12029 if (a->address != b->address)
12030 return (a->address > b->address) - (a->address < b->address);
12031
dea2aa5f
LM
12032 /* Sort locations at the same address by their pspace number, keeping
12033 locations of the same inferior (in a multi-inferior environment)
12034 grouped. */
12035
12036 if (a->pspace->num != b->pspace->num)
12037 return ((a->pspace->num > b->pspace->num)
12038 - (a->pspace->num < b->pspace->num));
12039
876fa593
JK
12040 /* Sort permanent breakpoints first. */
12041 if (a_perm != b_perm)
12042 return (a_perm < b_perm) - (a_perm > b_perm);
12043
c56a97f9
JK
12044 /* Make the internal GDB representation stable across GDB runs
12045 where A and B memory inside GDB can differ. Breakpoint locations of
12046 the same type at the same address can be sorted in arbitrary order. */
876fa593
JK
12047
12048 if (a->owner->number != b->owner->number)
c56a97f9
JK
12049 return ((a->owner->number > b->owner->number)
12050 - (a->owner->number < b->owner->number));
876fa593
JK
12051
12052 return (a > b) - (a < b);
12053}
12054
876fa593 12055/* Set bp_location_placed_address_before_address_max and
4a64f543
MS
12056 bp_location_shadow_len_after_address_max according to the current
12057 content of the bp_location array. */
f7545552
TT
12058
12059static void
876fa593 12060bp_location_target_extensions_update (void)
f7545552 12061{
876fa593
JK
12062 struct bp_location *bl, **blp_tmp;
12063
12064 bp_location_placed_address_before_address_max = 0;
12065 bp_location_shadow_len_after_address_max = 0;
12066
12067 ALL_BP_LOCATIONS (bl, blp_tmp)
12068 {
12069 CORE_ADDR start, end, addr;
12070
12071 if (!bp_location_has_shadow (bl))
12072 continue;
12073
12074 start = bl->target_info.placed_address;
12075 end = start + bl->target_info.shadow_len;
12076
12077 gdb_assert (bl->address >= start);
12078 addr = bl->address - start;
12079 if (addr > bp_location_placed_address_before_address_max)
12080 bp_location_placed_address_before_address_max = addr;
12081
12082 /* Zero SHADOW_LEN would not pass bp_location_has_shadow. */
12083
12084 gdb_assert (bl->address < end);
12085 addr = end - bl->address;
12086 if (addr > bp_location_shadow_len_after_address_max)
12087 bp_location_shadow_len_after_address_max = addr;
12088 }
f7545552
TT
12089}
12090
1e4d1764
YQ
12091/* Download tracepoint locations if they haven't been. */
12092
12093static void
12094download_tracepoint_locations (void)
12095{
7ed2c994 12096 struct breakpoint *b;
1e4d1764
YQ
12097 struct cleanup *old_chain;
12098
12099 if (!target_can_download_tracepoint ())
12100 return;
12101
12102 old_chain = save_current_space_and_thread ();
12103
7ed2c994 12104 ALL_TRACEPOINTS (b)
1e4d1764 12105 {
7ed2c994 12106 struct bp_location *bl;
1e4d1764 12107 struct tracepoint *t;
f2a8bc8a 12108 int bp_location_downloaded = 0;
1e4d1764 12109
7ed2c994 12110 if ((b->type == bp_fast_tracepoint
1e4d1764
YQ
12111 ? !may_insert_fast_tracepoints
12112 : !may_insert_tracepoints))
12113 continue;
12114
7ed2c994
YQ
12115 for (bl = b->loc; bl; bl = bl->next)
12116 {
12117 /* In tracepoint, locations are _never_ duplicated, so
12118 should_be_inserted is equivalent to
12119 unduplicated_should_be_inserted. */
12120 if (!should_be_inserted (bl) || bl->inserted)
12121 continue;
1e4d1764 12122
7ed2c994 12123 switch_to_program_space_and_thread (bl->pspace);
1e4d1764 12124
7ed2c994 12125 target_download_tracepoint (bl);
1e4d1764 12126
7ed2c994 12127 bl->inserted = 1;
f2a8bc8a 12128 bp_location_downloaded = 1;
7ed2c994
YQ
12129 }
12130 t = (struct tracepoint *) b;
12131 t->number_on_target = b->number;
f2a8bc8a
YQ
12132 if (bp_location_downloaded)
12133 observer_notify_breakpoint_modified (b);
1e4d1764
YQ
12134 }
12135
12136 do_cleanups (old_chain);
12137}
12138
934709f0
PW
12139/* Swap the insertion/duplication state between two locations. */
12140
12141static void
12142swap_insertion (struct bp_location *left, struct bp_location *right)
12143{
12144 const int left_inserted = left->inserted;
12145 const int left_duplicate = left->duplicate;
b775012e 12146 const int left_needs_update = left->needs_update;
934709f0
PW
12147 const struct bp_target_info left_target_info = left->target_info;
12148
1e4d1764
YQ
12149 /* Locations of tracepoints can never be duplicated. */
12150 if (is_tracepoint (left->owner))
12151 gdb_assert (!left->duplicate);
12152 if (is_tracepoint (right->owner))
12153 gdb_assert (!right->duplicate);
12154
934709f0
PW
12155 left->inserted = right->inserted;
12156 left->duplicate = right->duplicate;
b775012e 12157 left->needs_update = right->needs_update;
934709f0
PW
12158 left->target_info = right->target_info;
12159 right->inserted = left_inserted;
12160 right->duplicate = left_duplicate;
b775012e 12161 right->needs_update = left_needs_update;
934709f0
PW
12162 right->target_info = left_target_info;
12163}
12164
b775012e
LM
12165/* Force the re-insertion of the locations at ADDRESS. This is called
12166 once a new/deleted/modified duplicate location is found and we are evaluating
12167 conditions on the target's side. Such conditions need to be updated on
12168 the target. */
12169
12170static void
12171force_breakpoint_reinsertion (struct bp_location *bl)
12172{
12173 struct bp_location **locp = NULL, **loc2p;
12174 struct bp_location *loc;
12175 CORE_ADDR address = 0;
12176 int pspace_num;
12177
12178 address = bl->address;
12179 pspace_num = bl->pspace->num;
12180
12181 /* This is only meaningful if the target is
12182 evaluating conditions and if the user has
12183 opted for condition evaluation on the target's
12184 side. */
12185 if (gdb_evaluates_breakpoint_condition_p ()
12186 || !target_supports_evaluation_of_breakpoint_conditions ())
12187 return;
12188
12189 /* Flag all breakpoint locations with this address and
12190 the same program space as the location
12191 as "its condition has changed". We need to
12192 update the conditions on the target's side. */
12193 ALL_BP_LOCATIONS_AT_ADDR (loc2p, locp, address)
12194 {
12195 loc = *loc2p;
12196
12197 if (!is_breakpoint (loc->owner)
12198 || pspace_num != loc->pspace->num)
12199 continue;
12200
12201 /* Flag the location appropriately. We use a different state to
12202 let everyone know that we already updated the set of locations
12203 with addr bl->address and program space bl->pspace. This is so
12204 we don't have to keep calling these functions just to mark locations
12205 that have already been marked. */
12206 loc->condition_changed = condition_updated;
12207
12208 /* Free the agent expression bytecode as well. We will compute
12209 it later on. */
12210 if (loc->cond_bytecode)
12211 {
12212 free_agent_expr (loc->cond_bytecode);
12213 loc->cond_bytecode = NULL;
12214 }
12215 }
12216}
12217
4cd9bd08 12218/* If SHOULD_INSERT is false, do not insert any breakpoint locations
b60e7edf
PA
12219 into the inferior, only remove already-inserted locations that no
12220 longer should be inserted. Functions that delete a breakpoint or
12221 breakpoints should pass false, so that deleting a breakpoint
12222 doesn't have the side effect of inserting the locations of other
12223 breakpoints that are marked not-inserted, but should_be_inserted
12224 returns true on them.
12225
12226 This behaviour is useful is situations close to tear-down -- e.g.,
12227 after an exec, while the target still has execution, but breakpoint
12228 shadows of the previous executable image should *NOT* be restored
12229 to the new image; or before detaching, where the target still has
12230 execution and wants to delete breakpoints from GDB's lists, and all
12231 breakpoints had already been removed from the inferior. */
12232
0d381245 12233static void
b60e7edf 12234update_global_location_list (int should_insert)
0d381245 12235{
74960c60 12236 struct breakpoint *b;
876fa593 12237 struct bp_location **locp, *loc;
f7545552 12238 struct cleanup *cleanups;
b775012e
LM
12239 /* Last breakpoint location address that was marked for update. */
12240 CORE_ADDR last_addr = 0;
12241 /* Last breakpoint location program space that was marked for update. */
12242 int last_pspace_num = -1;
f7545552 12243
2d134ed3
PA
12244 /* Used in the duplicates detection below. When iterating over all
12245 bp_locations, points to the first bp_location of a given address.
12246 Breakpoints and watchpoints of different types are never
12247 duplicates of each other. Keep one pointer for each type of
12248 breakpoint/watchpoint, so we only need to loop over all locations
12249 once. */
12250 struct bp_location *bp_loc_first; /* breakpoint */
12251 struct bp_location *wp_loc_first; /* hardware watchpoint */
12252 struct bp_location *awp_loc_first; /* access watchpoint */
12253 struct bp_location *rwp_loc_first; /* read watchpoint */
876fa593 12254
4a64f543
MS
12255 /* Saved former bp_location array which we compare against the newly
12256 built bp_location from the current state of ALL_BREAKPOINTS. */
876fa593
JK
12257 struct bp_location **old_location, **old_locp;
12258 unsigned old_location_count;
12259
12260 old_location = bp_location;
12261 old_location_count = bp_location_count;
12262 bp_location = NULL;
12263 bp_location_count = 0;
12264 cleanups = make_cleanup (xfree, old_location);
0d381245 12265
74960c60 12266 ALL_BREAKPOINTS (b)
876fa593
JK
12267 for (loc = b->loc; loc; loc = loc->next)
12268 bp_location_count++;
12269
12270 bp_location = xmalloc (sizeof (*bp_location) * bp_location_count);
12271 locp = bp_location;
12272 ALL_BREAKPOINTS (b)
12273 for (loc = b->loc; loc; loc = loc->next)
12274 *locp++ = loc;
12275 qsort (bp_location, bp_location_count, sizeof (*bp_location),
494cfb0f 12276 bp_location_compare);
876fa593
JK
12277
12278 bp_location_target_extensions_update ();
74960c60 12279
4a64f543
MS
12280 /* Identify bp_location instances that are no longer present in the
12281 new list, and therefore should be freed. Note that it's not
12282 necessary that those locations should be removed from inferior --
12283 if there's another location at the same address (previously
12284 marked as duplicate), we don't need to remove/insert the
12285 location.
876fa593 12286
4a64f543
MS
12287 LOCP is kept in sync with OLD_LOCP, each pointing to the current
12288 and former bp_location array state respectively. */
876fa593
JK
12289
12290 locp = bp_location;
12291 for (old_locp = old_location; old_locp < old_location + old_location_count;
12292 old_locp++)
74960c60 12293 {
876fa593 12294 struct bp_location *old_loc = *old_locp;
c7d46a38 12295 struct bp_location **loc2p;
876fa593 12296
e5dd4106 12297 /* Tells if 'old_loc' is found among the new locations. If
4a64f543 12298 not, we have to free it. */
c7d46a38 12299 int found_object = 0;
20874c92
VP
12300 /* Tells if the location should remain inserted in the target. */
12301 int keep_in_target = 0;
12302 int removed = 0;
876fa593 12303
4a64f543
MS
12304 /* Skip LOCP entries which will definitely never be needed.
12305 Stop either at or being the one matching OLD_LOC. */
876fa593 12306 while (locp < bp_location + bp_location_count
c7d46a38 12307 && (*locp)->address < old_loc->address)
876fa593 12308 locp++;
c7d46a38
PA
12309
12310 for (loc2p = locp;
12311 (loc2p < bp_location + bp_location_count
12312 && (*loc2p)->address == old_loc->address);
12313 loc2p++)
12314 {
b775012e
LM
12315 /* Check if this is a new/duplicated location or a duplicated
12316 location that had its condition modified. If so, we want to send
12317 its condition to the target if evaluation of conditions is taking
12318 place there. */
12319 if ((*loc2p)->condition_changed == condition_modified
12320 && (last_addr != old_loc->address
12321 || last_pspace_num != old_loc->pspace->num))
c7d46a38 12322 {
b775012e
LM
12323 force_breakpoint_reinsertion (*loc2p);
12324 last_pspace_num = old_loc->pspace->num;
c7d46a38 12325 }
b775012e
LM
12326
12327 if (*loc2p == old_loc)
12328 found_object = 1;
c7d46a38 12329 }
74960c60 12330
b775012e
LM
12331 /* We have already handled this address, update it so that we don't
12332 have to go through updates again. */
12333 last_addr = old_loc->address;
12334
12335 /* Target-side condition evaluation: Handle deleted locations. */
12336 if (!found_object)
12337 force_breakpoint_reinsertion (old_loc);
12338
4a64f543
MS
12339 /* If this location is no longer present, and inserted, look if
12340 there's maybe a new location at the same address. If so,
12341 mark that one inserted, and don't remove this one. This is
12342 needed so that we don't have a time window where a breakpoint
12343 at certain location is not inserted. */
74960c60 12344
876fa593 12345 if (old_loc->inserted)
0d381245 12346 {
4a64f543
MS
12347 /* If the location is inserted now, we might have to remove
12348 it. */
74960c60 12349
876fa593 12350 if (found_object && should_be_inserted (old_loc))
74960c60 12351 {
4a64f543
MS
12352 /* The location is still present in the location list,
12353 and still should be inserted. Don't do anything. */
20874c92 12354 keep_in_target = 1;
74960c60
VP
12355 }
12356 else
12357 {
b775012e
LM
12358 /* This location still exists, but it won't be kept in the
12359 target since it may have been disabled. We proceed to
12360 remove its target-side condition. */
12361
4a64f543
MS
12362 /* The location is either no longer present, or got
12363 disabled. See if there's another location at the
12364 same address, in which case we don't need to remove
12365 this one from the target. */
876fa593 12366
2bdf28a0 12367 /* OLD_LOC comes from existing struct breakpoint. */
876fa593
JK
12368 if (breakpoint_address_is_meaningful (old_loc->owner))
12369 {
876fa593 12370 for (loc2p = locp;
c7d46a38
PA
12371 (loc2p < bp_location + bp_location_count
12372 && (*loc2p)->address == old_loc->address);
876fa593
JK
12373 loc2p++)
12374 {
12375 struct bp_location *loc2 = *loc2p;
12376
2d134ed3 12377 if (breakpoint_locations_match (loc2, old_loc))
c7d46a38 12378 {
85d721b8
PA
12379 /* Read watchpoint locations are switched to
12380 access watchpoints, if the former are not
12381 supported, but the latter are. */
12382 if (is_hardware_watchpoint (old_loc->owner))
12383 {
12384 gdb_assert (is_hardware_watchpoint (loc2->owner));
12385 loc2->watchpoint_type = old_loc->watchpoint_type;
12386 }
12387
934709f0
PW
12388 /* loc2 is a duplicated location. We need to check
12389 if it should be inserted in case it will be
12390 unduplicated. */
12391 if (loc2 != old_loc
12392 && unduplicated_should_be_inserted (loc2))
c7d46a38 12393 {
934709f0 12394 swap_insertion (old_loc, loc2);
c7d46a38
PA
12395 keep_in_target = 1;
12396 break;
12397 }
876fa593
JK
12398 }
12399 }
12400 }
74960c60
VP
12401 }
12402
20874c92
VP
12403 if (!keep_in_target)
12404 {
876fa593 12405 if (remove_breakpoint (old_loc, mark_uninserted))
20874c92 12406 {
4a64f543
MS
12407 /* This is just about all we can do. We could keep
12408 this location on the global list, and try to
12409 remove it next time, but there's no particular
12410 reason why we will succeed next time.
20874c92 12411
4a64f543
MS
12412 Note that at this point, old_loc->owner is still
12413 valid, as delete_breakpoint frees the breakpoint
12414 only after calling us. */
3e43a32a
MS
12415 printf_filtered (_("warning: Error removing "
12416 "breakpoint %d\n"),
876fa593 12417 old_loc->owner->number);
20874c92
VP
12418 }
12419 removed = 1;
12420 }
0d381245 12421 }
74960c60
VP
12422
12423 if (!found_object)
1c5cfe86 12424 {
db82e815
PA
12425 if (removed && non_stop
12426 && breakpoint_address_is_meaningful (old_loc->owner)
12427 && !is_hardware_watchpoint (old_loc->owner))
20874c92 12428 {
db82e815
PA
12429 /* This location was removed from the target. In
12430 non-stop mode, a race condition is possible where
12431 we've removed a breakpoint, but stop events for that
12432 breakpoint are already queued and will arrive later.
12433 We apply an heuristic to be able to distinguish such
12434 SIGTRAPs from other random SIGTRAPs: we keep this
12435 breakpoint location for a bit, and will retire it
12436 after we see some number of events. The theory here
12437 is that reporting of events should, "on the average",
12438 be fair, so after a while we'll see events from all
12439 threads that have anything of interest, and no longer
12440 need to keep this breakpoint location around. We
12441 don't hold locations forever so to reduce chances of
12442 mistaking a non-breakpoint SIGTRAP for a breakpoint
12443 SIGTRAP.
12444
12445 The heuristic failing can be disastrous on
12446 decr_pc_after_break targets.
12447
12448 On decr_pc_after_break targets, like e.g., x86-linux,
12449 if we fail to recognize a late breakpoint SIGTRAP,
12450 because events_till_retirement has reached 0 too
12451 soon, we'll fail to do the PC adjustment, and report
12452 a random SIGTRAP to the user. When the user resumes
12453 the inferior, it will most likely immediately crash
2dec564e 12454 with SIGILL/SIGBUS/SIGSEGV, or worse, get silently
db82e815
PA
12455 corrupted, because of being resumed e.g., in the
12456 middle of a multi-byte instruction, or skipped a
12457 one-byte instruction. This was actually seen happen
12458 on native x86-linux, and should be less rare on
12459 targets that do not support new thread events, like
12460 remote, due to the heuristic depending on
12461 thread_count.
12462
12463 Mistaking a random SIGTRAP for a breakpoint trap
12464 causes similar symptoms (PC adjustment applied when
12465 it shouldn't), but then again, playing with SIGTRAPs
12466 behind the debugger's back is asking for trouble.
12467
12468 Since hardware watchpoint traps are always
12469 distinguishable from other traps, so we don't need to
12470 apply keep hardware watchpoint moribund locations
12471 around. We simply always ignore hardware watchpoint
12472 traps we can no longer explain. */
12473
876fa593
JK
12474 old_loc->events_till_retirement = 3 * (thread_count () + 1);
12475 old_loc->owner = NULL;
20874c92 12476
876fa593 12477 VEC_safe_push (bp_location_p, moribund_locations, old_loc);
1c5cfe86
PA
12478 }
12479 else
f431efe5
PA
12480 {
12481 old_loc->owner = NULL;
12482 decref_bp_location (&old_loc);
12483 }
20874c92 12484 }
74960c60 12485 }
1c5cfe86 12486
348d480f
PA
12487 /* Rescan breakpoints at the same address and section, marking the
12488 first one as "first" and any others as "duplicates". This is so
12489 that the bpt instruction is only inserted once. If we have a
12490 permanent breakpoint at the same place as BPT, make that one the
12491 official one, and the rest as duplicates. Permanent breakpoints
12492 are sorted first for the same address.
12493
12494 Do the same for hardware watchpoints, but also considering the
12495 watchpoint's type (regular/access/read) and length. */
12496
12497 bp_loc_first = NULL;
12498 wp_loc_first = NULL;
12499 awp_loc_first = NULL;
12500 rwp_loc_first = NULL;
12501 ALL_BP_LOCATIONS (loc, locp)
12502 {
12503 /* ALL_BP_LOCATIONS bp_location has LOC->OWNER always
12504 non-NULL. */
348d480f 12505 struct bp_location **loc_first_p;
d3fbdd86 12506 b = loc->owner;
348d480f 12507
6f380991 12508 if (!unduplicated_should_be_inserted (loc)
348d480f 12509 || !breakpoint_address_is_meaningful (b)
1e4d1764
YQ
12510 /* Don't detect duplicate for tracepoint locations because they are
12511 never duplicated. See the comments in field `duplicate' of
12512 `struct bp_location'. */
348d480f 12513 || is_tracepoint (b))
b775012e
LM
12514 {
12515 /* Clear the condition modification flag. */
12516 loc->condition_changed = condition_unchanged;
12517 continue;
12518 }
348d480f
PA
12519
12520 /* Permanent breakpoint should always be inserted. */
12521 if (b->enable_state == bp_permanent && ! loc->inserted)
12522 internal_error (__FILE__, __LINE__,
12523 _("allegedly permanent breakpoint is not "
12524 "actually inserted"));
12525
12526 if (b->type == bp_hardware_watchpoint)
12527 loc_first_p = &wp_loc_first;
12528 else if (b->type == bp_read_watchpoint)
12529 loc_first_p = &rwp_loc_first;
12530 else if (b->type == bp_access_watchpoint)
12531 loc_first_p = &awp_loc_first;
12532 else
12533 loc_first_p = &bp_loc_first;
12534
12535 if (*loc_first_p == NULL
12536 || (overlay_debugging && loc->section != (*loc_first_p)->section)
12537 || !breakpoint_locations_match (loc, *loc_first_p))
12538 {
12539 *loc_first_p = loc;
12540 loc->duplicate = 0;
b775012e
LM
12541
12542 if (is_breakpoint (loc->owner) && loc->condition_changed)
12543 {
12544 loc->needs_update = 1;
12545 /* Clear the condition modification flag. */
12546 loc->condition_changed = condition_unchanged;
12547 }
348d480f
PA
12548 continue;
12549 }
12550
934709f0
PW
12551
12552 /* This and the above ensure the invariant that the first location
12553 is not duplicated, and is the inserted one.
12554 All following are marked as duplicated, and are not inserted. */
12555 if (loc->inserted)
12556 swap_insertion (loc, *loc_first_p);
348d480f
PA
12557 loc->duplicate = 1;
12558
b775012e
LM
12559 /* Clear the condition modification flag. */
12560 loc->condition_changed = condition_unchanged;
12561
348d480f
PA
12562 if ((*loc_first_p)->owner->enable_state == bp_permanent && loc->inserted
12563 && b->enable_state != bp_permanent)
12564 internal_error (__FILE__, __LINE__,
12565 _("another breakpoint was inserted on top of "
12566 "a permanent breakpoint"));
12567 }
12568
b775012e 12569 if (breakpoints_always_inserted_mode ()
348d480f 12570 && (have_live_inferiors ()
f5656ead 12571 || (gdbarch_has_global_breakpoints (target_gdbarch ()))))
b775012e
LM
12572 {
12573 if (should_insert)
12574 insert_breakpoint_locations ();
12575 else
12576 {
12577 /* Though should_insert is false, we may need to update conditions
12578 on the target's side if it is evaluating such conditions. We
12579 only update conditions for locations that are marked
12580 "needs_update". */
12581 update_inserted_breakpoint_locations ();
12582 }
12583 }
348d480f 12584
1e4d1764
YQ
12585 if (should_insert)
12586 download_tracepoint_locations ();
12587
348d480f
PA
12588 do_cleanups (cleanups);
12589}
12590
12591void
12592breakpoint_retire_moribund (void)
12593{
12594 struct bp_location *loc;
12595 int ix;
12596
12597 for (ix = 0; VEC_iterate (bp_location_p, moribund_locations, ix, loc); ++ix)
12598 if (--(loc->events_till_retirement) == 0)
12599 {
12600 decref_bp_location (&loc);
12601 VEC_unordered_remove (bp_location_p, moribund_locations, ix);
12602 --ix;
12603 }
12604}
12605
12606static void
12607update_global_location_list_nothrow (int inserting)
12608{
bfd189b1 12609 volatile struct gdb_exception e;
348d480f
PA
12610
12611 TRY_CATCH (e, RETURN_MASK_ERROR)
12612 update_global_location_list (inserting);
12613}
12614
12615/* Clear BKP from a BPS. */
12616
12617static void
12618bpstat_remove_bp_location (bpstat bps, struct breakpoint *bpt)
12619{
12620 bpstat bs;
12621
12622 for (bs = bps; bs; bs = bs->next)
12623 if (bs->breakpoint_at == bpt)
12624 {
12625 bs->breakpoint_at = NULL;
12626 bs->old_val = NULL;
12627 /* bs->commands will be freed later. */
12628 }
12629}
12630
12631/* Callback for iterate_over_threads. */
12632static int
12633bpstat_remove_breakpoint_callback (struct thread_info *th, void *data)
12634{
12635 struct breakpoint *bpt = data;
12636
12637 bpstat_remove_bp_location (th->control.stop_bpstat, bpt);
12638 return 0;
12639}
12640
12641/* Helper for breakpoint and tracepoint breakpoint_ops->mention
12642 callbacks. */
12643
12644static void
12645say_where (struct breakpoint *b)
12646{
79a45e25 12647 struct ui_out *uiout = current_uiout;
348d480f
PA
12648 struct value_print_options opts;
12649
12650 get_user_print_options (&opts);
12651
12652 /* i18n: cagney/2005-02-11: Below needs to be merged into a
12653 single string. */
12654 if (b->loc == NULL)
12655 {
12656 printf_filtered (_(" (%s) pending."), b->addr_string);
12657 }
12658 else
12659 {
f8eba3c6 12660 if (opts.addressprint || b->loc->source_file == NULL)
348d480f
PA
12661 {
12662 printf_filtered (" at ");
12663 fputs_filtered (paddress (b->loc->gdbarch, b->loc->address),
12664 gdb_stdout);
12665 }
f8eba3c6
TT
12666 if (b->loc->source_file)
12667 {
12668 /* If there is a single location, we can print the location
12669 more nicely. */
12670 if (b->loc->next == NULL)
12671 printf_filtered (": file %s, line %d.",
12672 b->loc->source_file, b->loc->line_number);
12673 else
12674 /* This is not ideal, but each location may have a
12675 different file name, and this at least reflects the
12676 real situation somewhat. */
12677 printf_filtered (": %s.", b->addr_string);
12678 }
348d480f
PA
12679
12680 if (b->loc->next)
12681 {
12682 struct bp_location *loc = b->loc;
12683 int n = 0;
12684 for (; loc; loc = loc->next)
12685 ++n;
12686 printf_filtered (" (%d locations)", n);
12687 }
12688 }
12689}
12690
348d480f
PA
12691/* Default bp_location_ops methods. */
12692
12693static void
12694bp_location_dtor (struct bp_location *self)
12695{
12696 xfree (self->cond);
b775012e
LM
12697 if (self->cond_bytecode)
12698 free_agent_expr (self->cond_bytecode);
348d480f 12699 xfree (self->function_name);
f8eba3c6 12700 xfree (self->source_file);
348d480f
PA
12701}
12702
12703static const struct bp_location_ops bp_location_ops =
12704{
12705 bp_location_dtor
12706};
12707
2060206e
PA
12708/* Default breakpoint_ops methods all breakpoint_ops ultimately
12709 inherit from. */
348d480f 12710
2060206e
PA
12711static void
12712base_breakpoint_dtor (struct breakpoint *self)
348d480f
PA
12713{
12714 decref_counted_command_line (&self->commands);
12715 xfree (self->cond_string);
348d480f 12716 xfree (self->addr_string);
f8eba3c6 12717 xfree (self->filter);
348d480f 12718 xfree (self->addr_string_range_end);
348d480f
PA
12719}
12720
2060206e
PA
12721static struct bp_location *
12722base_breakpoint_allocate_location (struct breakpoint *self)
348d480f
PA
12723{
12724 struct bp_location *loc;
12725
12726 loc = XNEW (struct bp_location);
12727 init_bp_location (loc, &bp_location_ops, self);
12728 return loc;
12729}
12730
2060206e
PA
12731static void
12732base_breakpoint_re_set (struct breakpoint *b)
12733{
12734 /* Nothing to re-set. */
12735}
12736
12737#define internal_error_pure_virtual_called() \
12738 gdb_assert_not_reached ("pure virtual function called")
12739
12740static int
12741base_breakpoint_insert_location (struct bp_location *bl)
12742{
12743 internal_error_pure_virtual_called ();
12744}
12745
12746static int
12747base_breakpoint_remove_location (struct bp_location *bl)
12748{
12749 internal_error_pure_virtual_called ();
12750}
12751
12752static int
12753base_breakpoint_breakpoint_hit (const struct bp_location *bl,
12754 struct address_space *aspace,
09ac7c10
TT
12755 CORE_ADDR bp_addr,
12756 const struct target_waitstatus *ws)
2060206e
PA
12757{
12758 internal_error_pure_virtual_called ();
12759}
12760
12761static void
12762base_breakpoint_check_status (bpstat bs)
12763{
12764 /* Always stop. */
12765}
12766
12767/* A "works_in_software_mode" breakpoint_ops method that just internal
12768 errors. */
12769
12770static int
12771base_breakpoint_works_in_software_mode (const struct breakpoint *b)
12772{
12773 internal_error_pure_virtual_called ();
12774}
12775
12776/* A "resources_needed" breakpoint_ops method that just internal
12777 errors. */
12778
12779static int
12780base_breakpoint_resources_needed (const struct bp_location *bl)
12781{
12782 internal_error_pure_virtual_called ();
12783}
12784
12785static enum print_stop_action
12786base_breakpoint_print_it (bpstat bs)
12787{
12788 internal_error_pure_virtual_called ();
12789}
12790
12791static void
12792base_breakpoint_print_one_detail (const struct breakpoint *self,
12793 struct ui_out *uiout)
12794{
12795 /* nothing */
12796}
12797
12798static void
12799base_breakpoint_print_mention (struct breakpoint *b)
12800{
12801 internal_error_pure_virtual_called ();
12802}
12803
12804static void
12805base_breakpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
12806{
12807 internal_error_pure_virtual_called ();
12808}
12809
983af33b
SDJ
12810static void
12811base_breakpoint_create_sals_from_address (char **arg,
12812 struct linespec_result *canonical,
12813 enum bptype type_wanted,
12814 char *addr_start,
12815 char **copy_arg)
12816{
12817 internal_error_pure_virtual_called ();
12818}
12819
12820static void
12821base_breakpoint_create_breakpoints_sal (struct gdbarch *gdbarch,
12822 struct linespec_result *c,
12823 struct linespec_sals *lsal,
12824 char *cond_string,
e7e0cddf 12825 char *extra_string,
983af33b
SDJ
12826 enum bptype type_wanted,
12827 enum bpdisp disposition,
12828 int thread,
12829 int task, int ignore_count,
12830 const struct breakpoint_ops *o,
12831 int from_tty, int enabled,
44f238bb 12832 int internal, unsigned flags)
983af33b
SDJ
12833{
12834 internal_error_pure_virtual_called ();
12835}
12836
12837static void
12838base_breakpoint_decode_linespec (struct breakpoint *b, char **s,
12839 struct symtabs_and_lines *sals)
12840{
12841 internal_error_pure_virtual_called ();
12842}
12843
2060206e
PA
12844static struct breakpoint_ops base_breakpoint_ops =
12845{
12846 base_breakpoint_dtor,
12847 base_breakpoint_allocate_location,
12848 base_breakpoint_re_set,
12849 base_breakpoint_insert_location,
12850 base_breakpoint_remove_location,
12851 base_breakpoint_breakpoint_hit,
12852 base_breakpoint_check_status,
12853 base_breakpoint_resources_needed,
12854 base_breakpoint_works_in_software_mode,
12855 base_breakpoint_print_it,
12856 NULL,
12857 base_breakpoint_print_one_detail,
12858 base_breakpoint_print_mention,
983af33b
SDJ
12859 base_breakpoint_print_recreate,
12860 base_breakpoint_create_sals_from_address,
12861 base_breakpoint_create_breakpoints_sal,
12862 base_breakpoint_decode_linespec,
2060206e
PA
12863};
12864
12865/* Default breakpoint_ops methods. */
12866
12867static void
348d480f
PA
12868bkpt_re_set (struct breakpoint *b)
12869{
06edf0c0
PA
12870 /* FIXME: is this still reachable? */
12871 if (b->addr_string == NULL)
12872 {
12873 /* Anything without a string can't be re-set. */
348d480f 12874 delete_breakpoint (b);
06edf0c0 12875 return;
348d480f 12876 }
06edf0c0
PA
12877
12878 breakpoint_re_set_default (b);
348d480f
PA
12879}
12880
2060206e 12881static int
348d480f
PA
12882bkpt_insert_location (struct bp_location *bl)
12883{
12884 if (bl->loc_type == bp_loc_hardware_breakpoint)
12885 return target_insert_hw_breakpoint (bl->gdbarch,
12886 &bl->target_info);
12887 else
12888 return target_insert_breakpoint (bl->gdbarch,
12889 &bl->target_info);
12890}
12891
2060206e 12892static int
348d480f
PA
12893bkpt_remove_location (struct bp_location *bl)
12894{
12895 if (bl->loc_type == bp_loc_hardware_breakpoint)
12896 return target_remove_hw_breakpoint (bl->gdbarch, &bl->target_info);
12897 else
12898 return target_remove_breakpoint (bl->gdbarch, &bl->target_info);
12899}
12900
2060206e 12901static int
348d480f 12902bkpt_breakpoint_hit (const struct bp_location *bl,
09ac7c10
TT
12903 struct address_space *aspace, CORE_ADDR bp_addr,
12904 const struct target_waitstatus *ws)
348d480f
PA
12905{
12906 struct breakpoint *b = bl->owner;
12907
09ac7c10 12908 if (ws->kind != TARGET_WAITKIND_STOPPED
a493e3e2 12909 || ws->value.sig != GDB_SIGNAL_TRAP)
09ac7c10
TT
12910 return 0;
12911
348d480f
PA
12912 if (!breakpoint_address_match (bl->pspace->aspace, bl->address,
12913 aspace, bp_addr))
12914 return 0;
12915
12916 if (overlay_debugging /* unmapped overlay section */
12917 && section_is_overlay (bl->section)
12918 && !section_is_mapped (bl->section))
12919 return 0;
12920
12921 return 1;
12922}
12923
2060206e 12924static int
348d480f
PA
12925bkpt_resources_needed (const struct bp_location *bl)
12926{
12927 gdb_assert (bl->owner->type == bp_hardware_breakpoint);
12928
12929 return 1;
12930}
12931
2060206e 12932static enum print_stop_action
348d480f
PA
12933bkpt_print_it (bpstat bs)
12934{
348d480f
PA
12935 struct breakpoint *b;
12936 const struct bp_location *bl;
001c8c33 12937 int bp_temp;
79a45e25 12938 struct ui_out *uiout = current_uiout;
348d480f
PA
12939
12940 gdb_assert (bs->bp_location_at != NULL);
12941
12942 bl = bs->bp_location_at;
12943 b = bs->breakpoint_at;
12944
001c8c33
PA
12945 bp_temp = b->disposition == disp_del;
12946 if (bl->address != bl->requested_address)
12947 breakpoint_adjustment_warning (bl->requested_address,
12948 bl->address,
12949 b->number, 1);
12950 annotate_breakpoint (b->number);
12951 if (bp_temp)
12952 ui_out_text (uiout, "\nTemporary breakpoint ");
12953 else
12954 ui_out_text (uiout, "\nBreakpoint ");
12955 if (ui_out_is_mi_like_p (uiout))
348d480f 12956 {
001c8c33
PA
12957 ui_out_field_string (uiout, "reason",
12958 async_reason_lookup (EXEC_ASYNC_BREAKPOINT_HIT));
12959 ui_out_field_string (uiout, "disp", bpdisp_text (b->disposition));
06edf0c0 12960 }
001c8c33
PA
12961 ui_out_field_int (uiout, "bkptno", b->number);
12962 ui_out_text (uiout, ", ");
06edf0c0 12963
001c8c33 12964 return PRINT_SRC_AND_LOC;
06edf0c0
PA
12965}
12966
2060206e 12967static void
06edf0c0
PA
12968bkpt_print_mention (struct breakpoint *b)
12969{
79a45e25 12970 if (ui_out_is_mi_like_p (current_uiout))
06edf0c0
PA
12971 return;
12972
12973 switch (b->type)
12974 {
12975 case bp_breakpoint:
12976 case bp_gnu_ifunc_resolver:
12977 if (b->disposition == disp_del)
12978 printf_filtered (_("Temporary breakpoint"));
12979 else
12980 printf_filtered (_("Breakpoint"));
12981 printf_filtered (_(" %d"), b->number);
12982 if (b->type == bp_gnu_ifunc_resolver)
12983 printf_filtered (_(" at gnu-indirect-function resolver"));
12984 break;
12985 case bp_hardware_breakpoint:
12986 printf_filtered (_("Hardware assisted breakpoint %d"), b->number);
12987 break;
e7e0cddf
SS
12988 case bp_dprintf:
12989 printf_filtered (_("Dprintf %d"), b->number);
12990 break;
06edf0c0
PA
12991 }
12992
12993 say_where (b);
12994}
12995
2060206e 12996static void
06edf0c0
PA
12997bkpt_print_recreate (struct breakpoint *tp, struct ui_file *fp)
12998{
12999 if (tp->type == bp_breakpoint && tp->disposition == disp_del)
13000 fprintf_unfiltered (fp, "tbreak");
13001 else if (tp->type == bp_breakpoint)
13002 fprintf_unfiltered (fp, "break");
13003 else if (tp->type == bp_hardware_breakpoint
13004 && tp->disposition == disp_del)
13005 fprintf_unfiltered (fp, "thbreak");
13006 else if (tp->type == bp_hardware_breakpoint)
13007 fprintf_unfiltered (fp, "hbreak");
13008 else
13009 internal_error (__FILE__, __LINE__,
13010 _("unhandled breakpoint type %d"), (int) tp->type);
13011
2060206e 13012 fprintf_unfiltered (fp, " %s", tp->addr_string);
dd11a36c 13013 print_recreate_thread (tp, fp);
06edf0c0
PA
13014}
13015
983af33b
SDJ
13016static void
13017bkpt_create_sals_from_address (char **arg,
13018 struct linespec_result *canonical,
13019 enum bptype type_wanted,
13020 char *addr_start, char **copy_arg)
13021{
13022 create_sals_from_address_default (arg, canonical, type_wanted,
13023 addr_start, copy_arg);
13024}
13025
13026static void
13027bkpt_create_breakpoints_sal (struct gdbarch *gdbarch,
13028 struct linespec_result *canonical,
13029 struct linespec_sals *lsal,
13030 char *cond_string,
e7e0cddf 13031 char *extra_string,
983af33b
SDJ
13032 enum bptype type_wanted,
13033 enum bpdisp disposition,
13034 int thread,
13035 int task, int ignore_count,
13036 const struct breakpoint_ops *ops,
13037 int from_tty, int enabled,
44f238bb 13038 int internal, unsigned flags)
983af33b
SDJ
13039{
13040 create_breakpoints_sal_default (gdbarch, canonical, lsal,
e7e0cddf
SS
13041 cond_string, extra_string,
13042 type_wanted,
983af33b
SDJ
13043 disposition, thread, task,
13044 ignore_count, ops, from_tty,
44f238bb 13045 enabled, internal, flags);
983af33b
SDJ
13046}
13047
13048static void
13049bkpt_decode_linespec (struct breakpoint *b, char **s,
13050 struct symtabs_and_lines *sals)
13051{
13052 decode_linespec_default (b, s, sals);
13053}
13054
06edf0c0
PA
13055/* Virtual table for internal breakpoints. */
13056
13057static void
13058internal_bkpt_re_set (struct breakpoint *b)
13059{
13060 switch (b->type)
13061 {
13062 /* Delete overlay event and longjmp master breakpoints; they
13063 will be reset later by breakpoint_re_set. */
13064 case bp_overlay_event:
13065 case bp_longjmp_master:
13066 case bp_std_terminate_master:
13067 case bp_exception_master:
13068 delete_breakpoint (b);
13069 break;
13070
13071 /* This breakpoint is special, it's set up when the inferior
13072 starts and we really don't want to touch it. */
13073 case bp_shlib_event:
13074
13075 /* Like bp_shlib_event, this breakpoint type is special. Once
13076 it is set up, we do not want to touch it. */
13077 case bp_thread_event:
13078 break;
13079 }
13080}
13081
13082static void
13083internal_bkpt_check_status (bpstat bs)
13084{
a9b3a50f
PA
13085 if (bs->breakpoint_at->type == bp_shlib_event)
13086 {
13087 /* If requested, stop when the dynamic linker notifies GDB of
13088 events. This allows the user to get control and place
13089 breakpoints in initializer routines for dynamically loaded
13090 objects (among other things). */
13091 bs->stop = stop_on_solib_events;
13092 bs->print = stop_on_solib_events;
13093 }
13094 else
13095 bs->stop = 0;
06edf0c0
PA
13096}
13097
13098static enum print_stop_action
13099internal_bkpt_print_it (bpstat bs)
13100{
36dfb11c 13101 struct ui_out *uiout = current_uiout;
06edf0c0 13102 struct breakpoint *b;
06edf0c0 13103
06edf0c0
PA
13104 b = bs->breakpoint_at;
13105
06edf0c0
PA
13106 switch (b->type)
13107 {
348d480f
PA
13108 case bp_shlib_event:
13109 /* Did we stop because the user set the stop_on_solib_events
13110 variable? (If so, we report this as a generic, "Stopped due
13111 to shlib event" message.) */
edcc5120 13112 print_solib_event (0);
348d480f
PA
13113 break;
13114
13115 case bp_thread_event:
13116 /* Not sure how we will get here.
13117 GDB should not stop for these breakpoints. */
13118 printf_filtered (_("Thread Event Breakpoint: gdb should not stop!\n"));
348d480f
PA
13119 break;
13120
13121 case bp_overlay_event:
13122 /* By analogy with the thread event, GDB should not stop for these. */
13123 printf_filtered (_("Overlay Event Breakpoint: gdb should not stop!\n"));
348d480f
PA
13124 break;
13125
13126 case bp_longjmp_master:
13127 /* These should never be enabled. */
13128 printf_filtered (_("Longjmp Master Breakpoint: gdb should not stop!\n"));
348d480f
PA
13129 break;
13130
13131 case bp_std_terminate_master:
13132 /* These should never be enabled. */
13133 printf_filtered (_("std::terminate Master Breakpoint: "
13134 "gdb should not stop!\n"));
348d480f
PA
13135 break;
13136
13137 case bp_exception_master:
13138 /* These should never be enabled. */
13139 printf_filtered (_("Exception Master Breakpoint: "
13140 "gdb should not stop!\n"));
06edf0c0
PA
13141 break;
13142 }
13143
001c8c33 13144 return PRINT_NOTHING;
06edf0c0
PA
13145}
13146
13147static void
13148internal_bkpt_print_mention (struct breakpoint *b)
13149{
13150 /* Nothing to mention. These breakpoints are internal. */
13151}
13152
06edf0c0
PA
13153/* Virtual table for momentary breakpoints */
13154
13155static void
13156momentary_bkpt_re_set (struct breakpoint *b)
13157{
13158 /* Keep temporary breakpoints, which can be encountered when we step
13159 over a dlopen call and SOLIB_ADD is resetting the breakpoints.
13160 Otherwise these should have been blown away via the cleanup chain
13161 or by breakpoint_init_inferior when we rerun the executable. */
13162}
13163
13164static void
13165momentary_bkpt_check_status (bpstat bs)
13166{
13167 /* Nothing. The point of these breakpoints is causing a stop. */
13168}
13169
13170static enum print_stop_action
13171momentary_bkpt_print_it (bpstat bs)
13172{
79a45e25
PA
13173 struct ui_out *uiout = current_uiout;
13174
001c8c33 13175 if (ui_out_is_mi_like_p (uiout))
06edf0c0 13176 {
001c8c33 13177 struct breakpoint *b = bs->breakpoint_at;
348d480f 13178
001c8c33
PA
13179 switch (b->type)
13180 {
13181 case bp_finish:
13182 ui_out_field_string
13183 (uiout, "reason",
13184 async_reason_lookup (EXEC_ASYNC_FUNCTION_FINISHED));
13185 break;
348d480f 13186
001c8c33
PA
13187 case bp_until:
13188 ui_out_field_string
13189 (uiout, "reason",
13190 async_reason_lookup (EXEC_ASYNC_LOCATION_REACHED));
13191 break;
13192 }
348d480f
PA
13193 }
13194
001c8c33 13195 return PRINT_UNKNOWN;
348d480f
PA
13196}
13197
06edf0c0
PA
13198static void
13199momentary_bkpt_print_mention (struct breakpoint *b)
348d480f 13200{
06edf0c0 13201 /* Nothing to mention. These breakpoints are internal. */
348d480f
PA
13202}
13203
e2e4d78b
JK
13204/* Ensure INITIATING_FRAME is cleared when no such breakpoint exists.
13205
13206 It gets cleared already on the removal of the first one of such placed
13207 breakpoints. This is OK as they get all removed altogether. */
13208
13209static void
13210longjmp_bkpt_dtor (struct breakpoint *self)
13211{
13212 struct thread_info *tp = find_thread_id (self->thread);
13213
13214 if (tp)
13215 tp->initiating_frame = null_frame_id;
13216
13217 momentary_breakpoint_ops.dtor (self);
13218}
13219
55aa24fb
SDJ
13220/* Specific methods for probe breakpoints. */
13221
13222static int
13223bkpt_probe_insert_location (struct bp_location *bl)
13224{
13225 int v = bkpt_insert_location (bl);
13226
13227 if (v == 0)
13228 {
13229 /* The insertion was successful, now let's set the probe's semaphore
13230 if needed. */
13231 bl->probe->pops->set_semaphore (bl->probe, bl->gdbarch);
13232 }
13233
13234 return v;
13235}
13236
13237static int
13238bkpt_probe_remove_location (struct bp_location *bl)
13239{
13240 /* Let's clear the semaphore before removing the location. */
13241 bl->probe->pops->clear_semaphore (bl->probe, bl->gdbarch);
13242
13243 return bkpt_remove_location (bl);
13244}
13245
13246static void
13247bkpt_probe_create_sals_from_address (char **arg,
13248 struct linespec_result *canonical,
13249 enum bptype type_wanted,
13250 char *addr_start, char **copy_arg)
13251{
13252 struct linespec_sals lsal;
13253
13254 lsal.sals = parse_probes (arg, canonical);
13255
13256 *copy_arg = xstrdup (canonical->addr_string);
13257 lsal.canonical = xstrdup (*copy_arg);
13258
13259 VEC_safe_push (linespec_sals, canonical->sals, &lsal);
13260}
13261
13262static void
13263bkpt_probe_decode_linespec (struct breakpoint *b, char **s,
13264 struct symtabs_and_lines *sals)
13265{
13266 *sals = parse_probes (s, NULL);
13267 if (!sals->sals)
13268 error (_("probe not found"));
13269}
13270
348d480f 13271/* The breakpoint_ops structure to be used in tracepoints. */
876fa593 13272
348d480f
PA
13273static void
13274tracepoint_re_set (struct breakpoint *b)
13275{
13276 breakpoint_re_set_default (b);
13277}
876fa593 13278
348d480f
PA
13279static int
13280tracepoint_breakpoint_hit (const struct bp_location *bl,
09ac7c10
TT
13281 struct address_space *aspace, CORE_ADDR bp_addr,
13282 const struct target_waitstatus *ws)
348d480f
PA
13283{
13284 /* By definition, the inferior does not report stops at
13285 tracepoints. */
13286 return 0;
74960c60
VP
13287}
13288
13289static void
348d480f
PA
13290tracepoint_print_one_detail (const struct breakpoint *self,
13291 struct ui_out *uiout)
74960c60 13292{
d9b3f62e
PA
13293 struct tracepoint *tp = (struct tracepoint *) self;
13294 if (tp->static_trace_marker_id)
348d480f
PA
13295 {
13296 gdb_assert (self->type == bp_static_tracepoint);
cc59ec59 13297
348d480f
PA
13298 ui_out_text (uiout, "\tmarker id is ");
13299 ui_out_field_string (uiout, "static-tracepoint-marker-string-id",
d9b3f62e 13300 tp->static_trace_marker_id);
348d480f
PA
13301 ui_out_text (uiout, "\n");
13302 }
0d381245
VP
13303}
13304
a474d7c2 13305static void
348d480f 13306tracepoint_print_mention (struct breakpoint *b)
a474d7c2 13307{
79a45e25 13308 if (ui_out_is_mi_like_p (current_uiout))
348d480f 13309 return;
cc59ec59 13310
348d480f
PA
13311 switch (b->type)
13312 {
13313 case bp_tracepoint:
13314 printf_filtered (_("Tracepoint"));
13315 printf_filtered (_(" %d"), b->number);
13316 break;
13317 case bp_fast_tracepoint:
13318 printf_filtered (_("Fast tracepoint"));
13319 printf_filtered (_(" %d"), b->number);
13320 break;
13321 case bp_static_tracepoint:
13322 printf_filtered (_("Static tracepoint"));
13323 printf_filtered (_(" %d"), b->number);
13324 break;
13325 default:
13326 internal_error (__FILE__, __LINE__,
13327 _("unhandled tracepoint type %d"), (int) b->type);
13328 }
13329
13330 say_where (b);
a474d7c2
PA
13331}
13332
348d480f 13333static void
d9b3f62e 13334tracepoint_print_recreate (struct breakpoint *self, struct ui_file *fp)
a474d7c2 13335{
d9b3f62e
PA
13336 struct tracepoint *tp = (struct tracepoint *) self;
13337
13338 if (self->type == bp_fast_tracepoint)
348d480f 13339 fprintf_unfiltered (fp, "ftrace");
d9b3f62e 13340 if (self->type == bp_static_tracepoint)
348d480f 13341 fprintf_unfiltered (fp, "strace");
d9b3f62e 13342 else if (self->type == bp_tracepoint)
348d480f
PA
13343 fprintf_unfiltered (fp, "trace");
13344 else
13345 internal_error (__FILE__, __LINE__,
d9b3f62e 13346 _("unhandled tracepoint type %d"), (int) self->type);
cc59ec59 13347
d9b3f62e
PA
13348 fprintf_unfiltered (fp, " %s", self->addr_string);
13349 print_recreate_thread (self, fp);
13350
13351 if (tp->pass_count)
13352 fprintf_unfiltered (fp, " passcount %d\n", tp->pass_count);
a474d7c2
PA
13353}
13354
983af33b
SDJ
13355static void
13356tracepoint_create_sals_from_address (char **arg,
13357 struct linespec_result *canonical,
13358 enum bptype type_wanted,
13359 char *addr_start, char **copy_arg)
13360{
13361 create_sals_from_address_default (arg, canonical, type_wanted,
13362 addr_start, copy_arg);
13363}
13364
13365static void
13366tracepoint_create_breakpoints_sal (struct gdbarch *gdbarch,
13367 struct linespec_result *canonical,
13368 struct linespec_sals *lsal,
13369 char *cond_string,
e7e0cddf 13370 char *extra_string,
983af33b
SDJ
13371 enum bptype type_wanted,
13372 enum bpdisp disposition,
13373 int thread,
13374 int task, int ignore_count,
13375 const struct breakpoint_ops *ops,
13376 int from_tty, int enabled,
44f238bb 13377 int internal, unsigned flags)
983af33b
SDJ
13378{
13379 create_breakpoints_sal_default (gdbarch, canonical, lsal,
e7e0cddf
SS
13380 cond_string, extra_string,
13381 type_wanted,
983af33b
SDJ
13382 disposition, thread, task,
13383 ignore_count, ops, from_tty,
44f238bb 13384 enabled, internal, flags);
983af33b
SDJ
13385}
13386
13387static void
13388tracepoint_decode_linespec (struct breakpoint *b, char **s,
13389 struct symtabs_and_lines *sals)
13390{
13391 decode_linespec_default (b, s, sals);
13392}
13393
2060206e 13394struct breakpoint_ops tracepoint_breakpoint_ops;
348d480f 13395
55aa24fb
SDJ
13396/* The breakpoint_ops structure to be use on tracepoints placed in a
13397 static probe. */
13398
13399static void
13400tracepoint_probe_create_sals_from_address (char **arg,
13401 struct linespec_result *canonical,
13402 enum bptype type_wanted,
13403 char *addr_start, char **copy_arg)
13404{
13405 /* We use the same method for breakpoint on probes. */
13406 bkpt_probe_create_sals_from_address (arg, canonical, type_wanted,
13407 addr_start, copy_arg);
13408}
13409
13410static void
13411tracepoint_probe_decode_linespec (struct breakpoint *b, char **s,
13412 struct symtabs_and_lines *sals)
13413{
13414 /* We use the same method for breakpoint on probes. */
13415 bkpt_probe_decode_linespec (b, s, sals);
13416}
13417
13418static struct breakpoint_ops tracepoint_probe_breakpoint_ops;
13419
983af33b
SDJ
13420/* The breakpoint_ops structure to be used on static tracepoints with
13421 markers (`-m'). */
13422
13423static void
13424strace_marker_create_sals_from_address (char **arg,
13425 struct linespec_result *canonical,
13426 enum bptype type_wanted,
13427 char *addr_start, char **copy_arg)
13428{
13429 struct linespec_sals lsal;
13430
13431 lsal.sals = decode_static_tracepoint_spec (arg);
13432
13433 *copy_arg = savestring (addr_start, *arg - addr_start);
13434
13435 canonical->addr_string = xstrdup (*copy_arg);
13436 lsal.canonical = xstrdup (*copy_arg);
13437 VEC_safe_push (linespec_sals, canonical->sals, &lsal);
13438}
13439
13440static void
13441strace_marker_create_breakpoints_sal (struct gdbarch *gdbarch,
13442 struct linespec_result *canonical,
13443 struct linespec_sals *lsal,
13444 char *cond_string,
e7e0cddf 13445 char *extra_string,
983af33b
SDJ
13446 enum bptype type_wanted,
13447 enum bpdisp disposition,
13448 int thread,
13449 int task, int ignore_count,
13450 const struct breakpoint_ops *ops,
13451 int from_tty, int enabled,
44f238bb 13452 int internal, unsigned flags)
983af33b
SDJ
13453{
13454 int i;
13455
13456 /* If the user is creating a static tracepoint by marker id
13457 (strace -m MARKER_ID), then store the sals index, so that
13458 breakpoint_re_set can try to match up which of the newly
13459 found markers corresponds to this one, and, don't try to
13460 expand multiple locations for each sal, given than SALS
13461 already should contain all sals for MARKER_ID. */
13462
13463 for (i = 0; i < lsal->sals.nelts; ++i)
13464 {
13465 struct symtabs_and_lines expanded;
13466 struct tracepoint *tp;
13467 struct cleanup *old_chain;
13468 char *addr_string;
13469
13470 expanded.nelts = 1;
13471 expanded.sals = &lsal->sals.sals[i];
13472
13473 addr_string = xstrdup (canonical->addr_string);
13474 old_chain = make_cleanup (xfree, addr_string);
13475
13476 tp = XCNEW (struct tracepoint);
13477 init_breakpoint_sal (&tp->base, gdbarch, expanded,
13478 addr_string, NULL,
e7e0cddf
SS
13479 cond_string, extra_string,
13480 type_wanted, disposition,
983af33b 13481 thread, task, ignore_count, ops,
44f238bb 13482 from_tty, enabled, internal, flags,
983af33b
SDJ
13483 canonical->special_display);
13484 /* Given that its possible to have multiple markers with
13485 the same string id, if the user is creating a static
13486 tracepoint by marker id ("strace -m MARKER_ID"), then
13487 store the sals index, so that breakpoint_re_set can
13488 try to match up which of the newly found markers
13489 corresponds to this one */
13490 tp->static_trace_marker_id_idx = i;
13491
13492 install_breakpoint (internal, &tp->base, 0);
13493
13494 discard_cleanups (old_chain);
13495 }
13496}
13497
13498static void
13499strace_marker_decode_linespec (struct breakpoint *b, char **s,
13500 struct symtabs_and_lines *sals)
13501{
13502 struct tracepoint *tp = (struct tracepoint *) b;
13503
13504 *sals = decode_static_tracepoint_spec (s);
13505 if (sals->nelts > tp->static_trace_marker_id_idx)
13506 {
13507 sals->sals[0] = sals->sals[tp->static_trace_marker_id_idx];
13508 sals->nelts = 1;
13509 }
13510 else
13511 error (_("marker %s not found"), tp->static_trace_marker_id);
13512}
13513
13514static struct breakpoint_ops strace_marker_breakpoint_ops;
13515
13516static int
13517strace_marker_p (struct breakpoint *b)
13518{
13519 return b->ops == &strace_marker_breakpoint_ops;
13520}
13521
53a5351d 13522/* Delete a breakpoint and clean up all traces of it in the data
f431efe5 13523 structures. */
c906108c
SS
13524
13525void
fba45db2 13526delete_breakpoint (struct breakpoint *bpt)
c906108c 13527{
52f0bd74 13528 struct breakpoint *b;
c906108c 13529
8a3fe4f8 13530 gdb_assert (bpt != NULL);
c906108c 13531
4a64f543
MS
13532 /* Has this bp already been deleted? This can happen because
13533 multiple lists can hold pointers to bp's. bpstat lists are
13534 especial culprits.
13535
13536 One example of this happening is a watchpoint's scope bp. When
13537 the scope bp triggers, we notice that the watchpoint is out of
13538 scope, and delete it. We also delete its scope bp. But the
13539 scope bp is marked "auto-deleting", and is already on a bpstat.
13540 That bpstat is then checked for auto-deleting bp's, which are
13541 deleted.
13542
13543 A real solution to this problem might involve reference counts in
13544 bp's, and/or giving them pointers back to their referencing
13545 bpstat's, and teaching delete_breakpoint to only free a bp's
13546 storage when no more references were extent. A cheaper bandaid
13547 was chosen. */
c906108c
SS
13548 if (bpt->type == bp_none)
13549 return;
13550
4a64f543
MS
13551 /* At least avoid this stale reference until the reference counting
13552 of breakpoints gets resolved. */
d0fb5eae 13553 if (bpt->related_breakpoint != bpt)
e5a0a904 13554 {
d0fb5eae 13555 struct breakpoint *related;
3a5c3e22 13556 struct watchpoint *w;
d0fb5eae
JK
13557
13558 if (bpt->type == bp_watchpoint_scope)
3a5c3e22 13559 w = (struct watchpoint *) bpt->related_breakpoint;
d0fb5eae 13560 else if (bpt->related_breakpoint->type == bp_watchpoint_scope)
3a5c3e22
PA
13561 w = (struct watchpoint *) bpt;
13562 else
13563 w = NULL;
13564 if (w != NULL)
13565 watchpoint_del_at_next_stop (w);
d0fb5eae
JK
13566
13567 /* Unlink bpt from the bpt->related_breakpoint ring. */
13568 for (related = bpt; related->related_breakpoint != bpt;
13569 related = related->related_breakpoint);
13570 related->related_breakpoint = bpt->related_breakpoint;
13571 bpt->related_breakpoint = bpt;
e5a0a904
JK
13572 }
13573
a9634178
TJB
13574 /* watch_command_1 creates a watchpoint but only sets its number if
13575 update_watchpoint succeeds in creating its bp_locations. If there's
13576 a problem in that process, we'll be asked to delete the half-created
13577 watchpoint. In that case, don't announce the deletion. */
13578 if (bpt->number)
13579 observer_notify_breakpoint_deleted (bpt);
c906108c 13580
c906108c
SS
13581 if (breakpoint_chain == bpt)
13582 breakpoint_chain = bpt->next;
13583
c906108c
SS
13584 ALL_BREAKPOINTS (b)
13585 if (b->next == bpt)
c5aa993b
JM
13586 {
13587 b->next = bpt->next;
13588 break;
13589 }
c906108c 13590
f431efe5
PA
13591 /* Be sure no bpstat's are pointing at the breakpoint after it's
13592 been freed. */
13593 /* FIXME, how can we find all bpstat's? We just check stop_bpstat
e5dd4106 13594 in all threads for now. Note that we cannot just remove bpstats
f431efe5
PA
13595 pointing at bpt from the stop_bpstat list entirely, as breakpoint
13596 commands are associated with the bpstat; if we remove it here,
13597 then the later call to bpstat_do_actions (&stop_bpstat); in
13598 event-top.c won't do anything, and temporary breakpoints with
13599 commands won't work. */
13600
13601 iterate_over_threads (bpstat_remove_breakpoint_callback, bpt);
13602
4a64f543
MS
13603 /* Now that breakpoint is removed from breakpoint list, update the
13604 global location list. This will remove locations that used to
13605 belong to this breakpoint. Do this before freeing the breakpoint
13606 itself, since remove_breakpoint looks at location's owner. It
13607 might be better design to have location completely
13608 self-contained, but it's not the case now. */
b60e7edf 13609 update_global_location_list (0);
74960c60 13610
348d480f 13611 bpt->ops->dtor (bpt);
4a64f543
MS
13612 /* On the chance that someone will soon try again to delete this
13613 same bp, we mark it as deleted before freeing its storage. */
c906108c 13614 bpt->type = bp_none;
b8c9b27d 13615 xfree (bpt);
c906108c
SS
13616}
13617
4d6140d9
AC
13618static void
13619do_delete_breakpoint_cleanup (void *b)
13620{
13621 delete_breakpoint (b);
13622}
13623
13624struct cleanup *
13625make_cleanup_delete_breakpoint (struct breakpoint *b)
13626{
13627 return make_cleanup (do_delete_breakpoint_cleanup, b);
13628}
13629
51be5b68
PA
13630/* Iterator function to call a user-provided callback function once
13631 for each of B and its related breakpoints. */
13632
13633static void
13634iterate_over_related_breakpoints (struct breakpoint *b,
13635 void (*function) (struct breakpoint *,
13636 void *),
13637 void *data)
13638{
13639 struct breakpoint *related;
13640
13641 related = b;
13642 do
13643 {
13644 struct breakpoint *next;
13645
13646 /* FUNCTION may delete RELATED. */
13647 next = related->related_breakpoint;
13648
13649 if (next == related)
13650 {
13651 /* RELATED is the last ring entry. */
13652 function (related, data);
13653
13654 /* FUNCTION may have deleted it, so we'd never reach back to
13655 B. There's nothing left to do anyway, so just break
13656 out. */
13657 break;
13658 }
13659 else
13660 function (related, data);
13661
13662 related = next;
13663 }
13664 while (related != b);
13665}
95a42b64
TT
13666
13667static void
13668do_delete_breakpoint (struct breakpoint *b, void *ignore)
13669{
13670 delete_breakpoint (b);
13671}
13672
51be5b68
PA
13673/* A callback for map_breakpoint_numbers that calls
13674 delete_breakpoint. */
13675
13676static void
13677do_map_delete_breakpoint (struct breakpoint *b, void *ignore)
13678{
13679 iterate_over_related_breakpoints (b, do_delete_breakpoint, NULL);
13680}
13681
c906108c 13682void
fba45db2 13683delete_command (char *arg, int from_tty)
c906108c 13684{
35df4500 13685 struct breakpoint *b, *b_tmp;
c906108c 13686
ea9365bb
TT
13687 dont_repeat ();
13688
c906108c
SS
13689 if (arg == 0)
13690 {
13691 int breaks_to_delete = 0;
13692
46c6471b
PA
13693 /* Delete all breakpoints if no argument. Do not delete
13694 internal breakpoints, these have to be deleted with an
13695 explicit breakpoint number argument. */
c5aa993b 13696 ALL_BREAKPOINTS (b)
46c6471b 13697 if (user_breakpoint_p (b))
973d738b
DJ
13698 {
13699 breaks_to_delete = 1;
13700 break;
13701 }
c906108c
SS
13702
13703 /* Ask user only if there are some breakpoints to delete. */
13704 if (!from_tty
e2e0b3e5 13705 || (breaks_to_delete && query (_("Delete all breakpoints? "))))
c906108c 13706 {
35df4500 13707 ALL_BREAKPOINTS_SAFE (b, b_tmp)
46c6471b 13708 if (user_breakpoint_p (b))
c5aa993b 13709 delete_breakpoint (b);
c906108c
SS
13710 }
13711 }
13712 else
51be5b68 13713 map_breakpoint_numbers (arg, do_map_delete_breakpoint, NULL);
c906108c
SS
13714}
13715
0d381245
VP
13716static int
13717all_locations_are_pending (struct bp_location *loc)
fe3f5fa8 13718{
0d381245 13719 for (; loc; loc = loc->next)
8645ff69
UW
13720 if (!loc->shlib_disabled
13721 && !loc->pspace->executing_startup)
0d381245
VP
13722 return 0;
13723 return 1;
fe3f5fa8
VP
13724}
13725
776592bf
DE
13726/* Subroutine of update_breakpoint_locations to simplify it.
13727 Return non-zero if multiple fns in list LOC have the same name.
13728 Null names are ignored. */
13729
13730static int
13731ambiguous_names_p (struct bp_location *loc)
13732{
13733 struct bp_location *l;
13734 htab_t htab = htab_create_alloc (13, htab_hash_string,
cc59ec59
MS
13735 (int (*) (const void *,
13736 const void *)) streq,
776592bf
DE
13737 NULL, xcalloc, xfree);
13738
13739 for (l = loc; l != NULL; l = l->next)
13740 {
13741 const char **slot;
13742 const char *name = l->function_name;
13743
13744 /* Allow for some names to be NULL, ignore them. */
13745 if (name == NULL)
13746 continue;
13747
13748 slot = (const char **) htab_find_slot (htab, (const void *) name,
13749 INSERT);
4a64f543
MS
13750 /* NOTE: We can assume slot != NULL here because xcalloc never
13751 returns NULL. */
776592bf
DE
13752 if (*slot != NULL)
13753 {
13754 htab_delete (htab);
13755 return 1;
13756 }
13757 *slot = name;
13758 }
13759
13760 htab_delete (htab);
13761 return 0;
13762}
13763
0fb4aa4b
PA
13764/* When symbols change, it probably means the sources changed as well,
13765 and it might mean the static tracepoint markers are no longer at
13766 the same address or line numbers they used to be at last we
13767 checked. Losing your static tracepoints whenever you rebuild is
13768 undesirable. This function tries to resync/rematch gdb static
13769 tracepoints with the markers on the target, for static tracepoints
13770 that have not been set by marker id. Static tracepoint that have
13771 been set by marker id are reset by marker id in breakpoint_re_set.
13772 The heuristic is:
13773
13774 1) For a tracepoint set at a specific address, look for a marker at
13775 the old PC. If one is found there, assume to be the same marker.
13776 If the name / string id of the marker found is different from the
13777 previous known name, assume that means the user renamed the marker
13778 in the sources, and output a warning.
13779
13780 2) For a tracepoint set at a given line number, look for a marker
13781 at the new address of the old line number. If one is found there,
13782 assume to be the same marker. If the name / string id of the
13783 marker found is different from the previous known name, assume that
13784 means the user renamed the marker in the sources, and output a
13785 warning.
13786
13787 3) If a marker is no longer found at the same address or line, it
13788 may mean the marker no longer exists. But it may also just mean
13789 the code changed a bit. Maybe the user added a few lines of code
13790 that made the marker move up or down (in line number terms). Ask
13791 the target for info about the marker with the string id as we knew
13792 it. If found, update line number and address in the matching
13793 static tracepoint. This will get confused if there's more than one
13794 marker with the same ID (possible in UST, although unadvised
13795 precisely because it confuses tools). */
13796
13797static struct symtab_and_line
13798update_static_tracepoint (struct breakpoint *b, struct symtab_and_line sal)
13799{
d9b3f62e 13800 struct tracepoint *tp = (struct tracepoint *) b;
0fb4aa4b
PA
13801 struct static_tracepoint_marker marker;
13802 CORE_ADDR pc;
0fb4aa4b
PA
13803
13804 pc = sal.pc;
13805 if (sal.line)
13806 find_line_pc (sal.symtab, sal.line, &pc);
13807
13808 if (target_static_tracepoint_marker_at (pc, &marker))
13809 {
d9b3f62e 13810 if (strcmp (tp->static_trace_marker_id, marker.str_id) != 0)
0fb4aa4b
PA
13811 warning (_("static tracepoint %d changed probed marker from %s to %s"),
13812 b->number,
d9b3f62e 13813 tp->static_trace_marker_id, marker.str_id);
0fb4aa4b 13814
d9b3f62e
PA
13815 xfree (tp->static_trace_marker_id);
13816 tp->static_trace_marker_id = xstrdup (marker.str_id);
0fb4aa4b
PA
13817 release_static_tracepoint_marker (&marker);
13818
13819 return sal;
13820 }
13821
13822 /* Old marker wasn't found on target at lineno. Try looking it up
13823 by string ID. */
13824 if (!sal.explicit_pc
13825 && sal.line != 0
13826 && sal.symtab != NULL
d9b3f62e 13827 && tp->static_trace_marker_id != NULL)
0fb4aa4b
PA
13828 {
13829 VEC(static_tracepoint_marker_p) *markers;
13830
13831 markers
d9b3f62e 13832 = target_static_tracepoint_markers_by_strid (tp->static_trace_marker_id);
0fb4aa4b
PA
13833
13834 if (!VEC_empty(static_tracepoint_marker_p, markers))
13835 {
80e1d417 13836 struct symtab_and_line sal2;
0fb4aa4b 13837 struct symbol *sym;
80e1d417 13838 struct static_tracepoint_marker *tpmarker;
79a45e25 13839 struct ui_out *uiout = current_uiout;
0fb4aa4b 13840
80e1d417 13841 tpmarker = VEC_index (static_tracepoint_marker_p, markers, 0);
0fb4aa4b 13842
d9b3f62e 13843 xfree (tp->static_trace_marker_id);
80e1d417 13844 tp->static_trace_marker_id = xstrdup (tpmarker->str_id);
0fb4aa4b
PA
13845
13846 warning (_("marker for static tracepoint %d (%s) not "
13847 "found at previous line number"),
d9b3f62e 13848 b->number, tp->static_trace_marker_id);
0fb4aa4b 13849
80e1d417 13850 init_sal (&sal2);
0fb4aa4b 13851
80e1d417 13852 sal2.pc = tpmarker->address;
0fb4aa4b 13853
80e1d417
AS
13854 sal2 = find_pc_line (tpmarker->address, 0);
13855 sym = find_pc_sect_function (tpmarker->address, NULL);
0fb4aa4b
PA
13856 ui_out_text (uiout, "Now in ");
13857 if (sym)
13858 {
13859 ui_out_field_string (uiout, "func",
13860 SYMBOL_PRINT_NAME (sym));
13861 ui_out_text (uiout, " at ");
13862 }
80e1d417 13863 ui_out_field_string (uiout, "file", sal2.symtab->filename);
0fb4aa4b
PA
13864 ui_out_text (uiout, ":");
13865
13866 if (ui_out_is_mi_like_p (uiout))
13867 {
0b0865da 13868 const char *fullname = symtab_to_fullname (sal2.symtab);
0fb4aa4b 13869
f35a17b5 13870 ui_out_field_string (uiout, "fullname", fullname);
0fb4aa4b
PA
13871 }
13872
80e1d417 13873 ui_out_field_int (uiout, "line", sal2.line);
0fb4aa4b
PA
13874 ui_out_text (uiout, "\n");
13875
80e1d417 13876 b->loc->line_number = sal2.line;
0fb4aa4b 13877
f8eba3c6 13878 xfree (b->loc->source_file);
0fb4aa4b 13879 if (sym)
80e1d417 13880 b->loc->source_file = xstrdup (sal2.symtab->filename);
0fb4aa4b 13881 else
f8eba3c6 13882 b->loc->source_file = NULL;
0fb4aa4b
PA
13883
13884 xfree (b->addr_string);
13885 b->addr_string = xstrprintf ("%s:%d",
80e1d417 13886 sal2.symtab->filename,
f8eba3c6 13887 b->loc->line_number);
0fb4aa4b
PA
13888
13889 /* Might be nice to check if function changed, and warn if
13890 so. */
13891
80e1d417 13892 release_static_tracepoint_marker (tpmarker);
0fb4aa4b
PA
13893 }
13894 }
13895 return sal;
13896}
13897
8d3788bd
VP
13898/* Returns 1 iff locations A and B are sufficiently same that
13899 we don't need to report breakpoint as changed. */
13900
13901static int
13902locations_are_equal (struct bp_location *a, struct bp_location *b)
13903{
13904 while (a && b)
13905 {
13906 if (a->address != b->address)
13907 return 0;
13908
13909 if (a->shlib_disabled != b->shlib_disabled)
13910 return 0;
13911
13912 if (a->enabled != b->enabled)
13913 return 0;
13914
13915 a = a->next;
13916 b = b->next;
13917 }
13918
13919 if ((a == NULL) != (b == NULL))
13920 return 0;
13921
13922 return 1;
13923}
13924
f1310107
TJB
13925/* Create new breakpoint locations for B (a hardware or software breakpoint)
13926 based on SALS and SALS_END. If SALS_END.NELTS is not zero, then B is
13927 a ranged breakpoint. */
13928
0e30163f 13929void
0d381245 13930update_breakpoint_locations (struct breakpoint *b,
f1310107
TJB
13931 struct symtabs_and_lines sals,
13932 struct symtabs_and_lines sals_end)
fe3f5fa8
VP
13933{
13934 int i;
0d381245
VP
13935 struct bp_location *existing_locations = b->loc;
13936
f8eba3c6
TT
13937 if (sals_end.nelts != 0 && (sals.nelts != 1 || sals_end.nelts != 1))
13938 {
13939 /* Ranged breakpoints have only one start location and one end
13940 location. */
13941 b->enable_state = bp_disabled;
13942 update_global_location_list (1);
13943 printf_unfiltered (_("Could not reset ranged breakpoint %d: "
13944 "multiple locations found\n"),
13945 b->number);
13946 return;
13947 }
f1310107 13948
4a64f543
MS
13949 /* If there's no new locations, and all existing locations are
13950 pending, don't do anything. This optimizes the common case where
13951 all locations are in the same shared library, that was unloaded.
13952 We'd like to retain the location, so that when the library is
13953 loaded again, we don't loose the enabled/disabled status of the
13954 individual locations. */
0d381245 13955 if (all_locations_are_pending (existing_locations) && sals.nelts == 0)
fe3f5fa8
VP
13956 return;
13957
fe3f5fa8
VP
13958 b->loc = NULL;
13959
0d381245 13960 for (i = 0; i < sals.nelts; ++i)
fe3f5fa8 13961 {
f8eba3c6
TT
13962 struct bp_location *new_loc;
13963
13964 switch_to_program_space_and_thread (sals.sals[i].pspace);
13965
13966 new_loc = add_location_to_breakpoint (b, &(sals.sals[i]));
fe3f5fa8 13967
0d381245
VP
13968 /* Reparse conditions, they might contain references to the
13969 old symtab. */
13970 if (b->cond_string != NULL)
13971 {
f1310107 13972 char *s;
bfd189b1 13973 volatile struct gdb_exception e;
fe3f5fa8 13974
0d381245
VP
13975 s = b->cond_string;
13976 TRY_CATCH (e, RETURN_MASK_ERROR)
13977 {
1bb9788d
TT
13978 new_loc->cond = parse_exp_1 (&s, sals.sals[i].pc,
13979 block_for_pc (sals.sals[i].pc),
0d381245
VP
13980 0);
13981 }
13982 if (e.reason < 0)
13983 {
3e43a32a
MS
13984 warning (_("failed to reevaluate condition "
13985 "for breakpoint %d: %s"),
0d381245
VP
13986 b->number, e.message);
13987 new_loc->enabled = 0;
13988 }
13989 }
fe3f5fa8 13990
f1310107
TJB
13991 if (sals_end.nelts)
13992 {
13993 CORE_ADDR end = find_breakpoint_range_end (sals_end.sals[0]);
13994
13995 new_loc->length = end - sals.sals[0].pc + 1;
13996 }
0d381245 13997 }
fe3f5fa8 13998
514f746b
AR
13999 /* Update locations of permanent breakpoints. */
14000 if (b->enable_state == bp_permanent)
14001 make_breakpoint_permanent (b);
14002
4a64f543
MS
14003 /* If possible, carry over 'disable' status from existing
14004 breakpoints. */
0d381245
VP
14005 {
14006 struct bp_location *e = existing_locations;
776592bf
DE
14007 /* If there are multiple breakpoints with the same function name,
14008 e.g. for inline functions, comparing function names won't work.
14009 Instead compare pc addresses; this is just a heuristic as things
14010 may have moved, but in practice it gives the correct answer
14011 often enough until a better solution is found. */
14012 int have_ambiguous_names = ambiguous_names_p (b->loc);
14013
0d381245
VP
14014 for (; e; e = e->next)
14015 {
14016 if (!e->enabled && e->function_name)
14017 {
14018 struct bp_location *l = b->loc;
776592bf
DE
14019 if (have_ambiguous_names)
14020 {
14021 for (; l; l = l->next)
f1310107 14022 if (breakpoint_locations_match (e, l))
776592bf
DE
14023 {
14024 l->enabled = 0;
14025 break;
14026 }
14027 }
14028 else
14029 {
14030 for (; l; l = l->next)
14031 if (l->function_name
14032 && strcmp (e->function_name, l->function_name) == 0)
14033 {
14034 l->enabled = 0;
14035 break;
14036 }
14037 }
0d381245
VP
14038 }
14039 }
14040 }
fe3f5fa8 14041
8d3788bd
VP
14042 if (!locations_are_equal (existing_locations, b->loc))
14043 observer_notify_breakpoint_modified (b);
14044
b60e7edf 14045 update_global_location_list (1);
fe3f5fa8
VP
14046}
14047
ef23e705
TJB
14048/* Find the SaL locations corresponding to the given ADDR_STRING.
14049 On return, FOUND will be 1 if any SaL was found, zero otherwise. */
14050
14051static struct symtabs_and_lines
14052addr_string_to_sals (struct breakpoint *b, char *addr_string, int *found)
14053{
14054 char *s;
02d20e4a 14055 struct symtabs_and_lines sals = {0};
f8eba3c6 14056 volatile struct gdb_exception e;
ef23e705 14057
983af33b 14058 gdb_assert (b->ops != NULL);
ef23e705 14059 s = addr_string;
ef23e705
TJB
14060
14061 TRY_CATCH (e, RETURN_MASK_ERROR)
14062 {
983af33b 14063 b->ops->decode_linespec (b, &s, &sals);
ef23e705
TJB
14064 }
14065 if (e.reason < 0)
14066 {
14067 int not_found_and_ok = 0;
14068 /* For pending breakpoints, it's expected that parsing will
14069 fail until the right shared library is loaded. User has
14070 already told to create pending breakpoints and don't need
14071 extra messages. If breakpoint is in bp_shlib_disabled
14072 state, then user already saw the message about that
14073 breakpoint being disabled, and don't want to see more
14074 errors. */
58438ac1 14075 if (e.error == NOT_FOUND_ERROR
ef23e705
TJB
14076 && (b->condition_not_parsed
14077 || (b->loc && b->loc->shlib_disabled)
f8eba3c6 14078 || (b->loc && b->loc->pspace->executing_startup)
ef23e705
TJB
14079 || b->enable_state == bp_disabled))
14080 not_found_and_ok = 1;
14081
14082 if (!not_found_and_ok)
14083 {
14084 /* We surely don't want to warn about the same breakpoint
14085 10 times. One solution, implemented here, is disable
14086 the breakpoint on error. Another solution would be to
14087 have separate 'warning emitted' flag. Since this
14088 happens only when a binary has changed, I don't know
14089 which approach is better. */
14090 b->enable_state = bp_disabled;
14091 throw_exception (e);
14092 }
14093 }
14094
58438ac1 14095 if (e.reason == 0 || e.error != NOT_FOUND_ERROR)
ef23e705 14096 {
f8eba3c6 14097 int i;
ef23e705 14098
f8eba3c6
TT
14099 for (i = 0; i < sals.nelts; ++i)
14100 resolve_sal_pc (&sals.sals[i]);
ef23e705
TJB
14101 if (b->condition_not_parsed && s && s[0])
14102 {
ed1d1739
KS
14103 char *cond_string, *extra_string;
14104 int thread, task;
ef23e705
TJB
14105
14106 find_condition_and_thread (s, sals.sals[0].pc,
e7e0cddf
SS
14107 &cond_string, &thread, &task,
14108 &extra_string);
ef23e705
TJB
14109 if (cond_string)
14110 b->cond_string = cond_string;
14111 b->thread = thread;
14112 b->task = task;
e7e0cddf
SS
14113 if (extra_string)
14114 b->extra_string = extra_string;
ef23e705
TJB
14115 b->condition_not_parsed = 0;
14116 }
14117
983af33b 14118 if (b->type == bp_static_tracepoint && !strace_marker_p (b))
ef23e705 14119 sals.sals[0] = update_static_tracepoint (b, sals.sals[0]);
ef23e705 14120
58438ac1
TT
14121 *found = 1;
14122 }
14123 else
14124 *found = 0;
ef23e705
TJB
14125
14126 return sals;
14127}
14128
348d480f
PA
14129/* The default re_set method, for typical hardware or software
14130 breakpoints. Reevaluate the breakpoint and recreate its
14131 locations. */
14132
14133static void
28010a5d 14134breakpoint_re_set_default (struct breakpoint *b)
ef23e705
TJB
14135{
14136 int found;
f1310107 14137 struct symtabs_and_lines sals, sals_end;
ef23e705 14138 struct symtabs_and_lines expanded = {0};
f1310107 14139 struct symtabs_and_lines expanded_end = {0};
ef23e705
TJB
14140
14141 sals = addr_string_to_sals (b, b->addr_string, &found);
14142 if (found)
14143 {
14144 make_cleanup (xfree, sals.sals);
f8eba3c6 14145 expanded = sals;
ef23e705
TJB
14146 }
14147
f1310107
TJB
14148 if (b->addr_string_range_end)
14149 {
14150 sals_end = addr_string_to_sals (b, b->addr_string_range_end, &found);
14151 if (found)
14152 {
14153 make_cleanup (xfree, sals_end.sals);
f8eba3c6 14154 expanded_end = sals_end;
f1310107
TJB
14155 }
14156 }
14157
14158 update_breakpoint_locations (b, expanded, expanded_end);
28010a5d
PA
14159}
14160
983af33b
SDJ
14161/* Default method for creating SALs from an address string. It basically
14162 calls parse_breakpoint_sals. Return 1 for success, zero for failure. */
14163
14164static void
14165create_sals_from_address_default (char **arg,
14166 struct linespec_result *canonical,
14167 enum bptype type_wanted,
14168 char *addr_start, char **copy_arg)
14169{
14170 parse_breakpoint_sals (arg, canonical);
14171}
14172
14173/* Call create_breakpoints_sal for the given arguments. This is the default
14174 function for the `create_breakpoints_sal' method of
14175 breakpoint_ops. */
14176
14177static void
14178create_breakpoints_sal_default (struct gdbarch *gdbarch,
14179 struct linespec_result *canonical,
14180 struct linespec_sals *lsal,
14181 char *cond_string,
e7e0cddf 14182 char *extra_string,
983af33b
SDJ
14183 enum bptype type_wanted,
14184 enum bpdisp disposition,
14185 int thread,
14186 int task, int ignore_count,
14187 const struct breakpoint_ops *ops,
14188 int from_tty, int enabled,
44f238bb 14189 int internal, unsigned flags)
983af33b
SDJ
14190{
14191 create_breakpoints_sal (gdbarch, canonical, cond_string,
e7e0cddf 14192 extra_string,
983af33b
SDJ
14193 type_wanted, disposition,
14194 thread, task, ignore_count, ops, from_tty,
44f238bb 14195 enabled, internal, flags);
983af33b
SDJ
14196}
14197
14198/* Decode the line represented by S by calling decode_line_full. This is the
14199 default function for the `decode_linespec' method of breakpoint_ops. */
14200
14201static void
14202decode_linespec_default (struct breakpoint *b, char **s,
14203 struct symtabs_and_lines *sals)
14204{
14205 struct linespec_result canonical;
14206
14207 init_linespec_result (&canonical);
14208 decode_line_full (s, DECODE_LINE_FUNFIRSTLINE,
14209 (struct symtab *) NULL, 0,
14210 &canonical, multiple_symbols_all,
14211 b->filter);
14212
14213 /* We should get 0 or 1 resulting SALs. */
14214 gdb_assert (VEC_length (linespec_sals, canonical.sals) < 2);
14215
14216 if (VEC_length (linespec_sals, canonical.sals) > 0)
14217 {
14218 struct linespec_sals *lsal;
14219
14220 lsal = VEC_index (linespec_sals, canonical.sals, 0);
14221 *sals = lsal->sals;
14222 /* Arrange it so the destructor does not free the
14223 contents. */
14224 lsal->sals.sals = NULL;
14225 }
14226
14227 destroy_linespec_result (&canonical);
14228}
14229
28010a5d
PA
14230/* Prepare the global context for a re-set of breakpoint B. */
14231
14232static struct cleanup *
14233prepare_re_set_context (struct breakpoint *b)
14234{
14235 struct cleanup *cleanups;
14236
14237 input_radix = b->input_radix;
14238 cleanups = save_current_space_and_thread ();
f8eba3c6
TT
14239 if (b->pspace != NULL)
14240 switch_to_program_space_and_thread (b->pspace);
28010a5d
PA
14241 set_language (b->language);
14242
14243 return cleanups;
ef23e705
TJB
14244}
14245
c906108c
SS
14246/* Reset a breakpoint given it's struct breakpoint * BINT.
14247 The value we return ends up being the return value from catch_errors.
14248 Unused in this case. */
14249
14250static int
4efb68b1 14251breakpoint_re_set_one (void *bint)
c906108c 14252{
4a64f543 14253 /* Get past catch_errs. */
53a5351d 14254 struct breakpoint *b = (struct breakpoint *) bint;
348d480f 14255 struct cleanup *cleanups;
c906108c 14256
348d480f
PA
14257 cleanups = prepare_re_set_context (b);
14258 b->ops->re_set (b);
14259 do_cleanups (cleanups);
c906108c
SS
14260 return 0;
14261}
14262
69de3c6a 14263/* Re-set all breakpoints after symbols have been re-loaded. */
c906108c 14264void
69de3c6a 14265breakpoint_re_set (void)
c906108c 14266{
35df4500 14267 struct breakpoint *b, *b_tmp;
c906108c
SS
14268 enum language save_language;
14269 int save_input_radix;
6c95b8df 14270 struct cleanup *old_chain;
c5aa993b 14271
c906108c
SS
14272 save_language = current_language->la_language;
14273 save_input_radix = input_radix;
6c95b8df
PA
14274 old_chain = save_current_program_space ();
14275
35df4500 14276 ALL_BREAKPOINTS_SAFE (b, b_tmp)
c5aa993b 14277 {
4a64f543 14278 /* Format possible error msg. */
fe3f5fa8 14279 char *message = xstrprintf ("Error in re-setting breakpoint %d: ",
9ebf4acf
AC
14280 b->number);
14281 struct cleanup *cleanups = make_cleanup (xfree, message);
c5aa993b 14282 catch_errors (breakpoint_re_set_one, b, message, RETURN_MASK_ALL);
9ebf4acf 14283 do_cleanups (cleanups);
c5aa993b 14284 }
c906108c
SS
14285 set_language (save_language);
14286 input_radix = save_input_radix;
e62c965a 14287
0756c555 14288 jit_breakpoint_re_set ();
4efc6507 14289
6c95b8df
PA
14290 do_cleanups (old_chain);
14291
af02033e
PP
14292 create_overlay_event_breakpoint ();
14293 create_longjmp_master_breakpoint ();
14294 create_std_terminate_master_breakpoint ();
186c406b 14295 create_exception_master_breakpoint ();
c906108c
SS
14296}
14297\f
c906108c
SS
14298/* Reset the thread number of this breakpoint:
14299
14300 - If the breakpoint is for all threads, leave it as-is.
4a64f543 14301 - Else, reset it to the current thread for inferior_ptid. */
c906108c 14302void
fba45db2 14303breakpoint_re_set_thread (struct breakpoint *b)
c906108c
SS
14304{
14305 if (b->thread != -1)
14306 {
39f77062
KB
14307 if (in_thread_list (inferior_ptid))
14308 b->thread = pid_to_thread_id (inferior_ptid);
6c95b8df
PA
14309
14310 /* We're being called after following a fork. The new fork is
14311 selected as current, and unless this was a vfork will have a
14312 different program space from the original thread. Reset that
14313 as well. */
14314 b->loc->pspace = current_program_space;
c906108c
SS
14315 }
14316}
14317
03ac34d5
MS
14318/* Set ignore-count of breakpoint number BPTNUM to COUNT.
14319 If from_tty is nonzero, it prints a message to that effect,
14320 which ends with a period (no newline). */
14321
c906108c 14322void
fba45db2 14323set_ignore_count (int bptnum, int count, int from_tty)
c906108c 14324{
52f0bd74 14325 struct breakpoint *b;
c906108c
SS
14326
14327 if (count < 0)
14328 count = 0;
14329
14330 ALL_BREAKPOINTS (b)
14331 if (b->number == bptnum)
c5aa993b 14332 {
d77f58be
SS
14333 if (is_tracepoint (b))
14334 {
14335 if (from_tty && count != 0)
14336 printf_filtered (_("Ignore count ignored for tracepoint %d."),
14337 bptnum);
14338 return;
14339 }
14340
c5aa993b 14341 b->ignore_count = count;
221ea385
KS
14342 if (from_tty)
14343 {
14344 if (count == 0)
3e43a32a
MS
14345 printf_filtered (_("Will stop next time "
14346 "breakpoint %d is reached."),
221ea385
KS
14347 bptnum);
14348 else if (count == 1)
a3f17187 14349 printf_filtered (_("Will ignore next crossing of breakpoint %d."),
221ea385
KS
14350 bptnum);
14351 else
3e43a32a
MS
14352 printf_filtered (_("Will ignore next %d "
14353 "crossings of breakpoint %d."),
221ea385
KS
14354 count, bptnum);
14355 }
ef37bb07 14356 annotate_breakpoints_changed ();
8d3788bd 14357 observer_notify_breakpoint_modified (b);
c5aa993b
JM
14358 return;
14359 }
c906108c 14360
8a3fe4f8 14361 error (_("No breakpoint number %d."), bptnum);
c906108c
SS
14362}
14363
c906108c
SS
14364/* Command to set ignore-count of breakpoint N to COUNT. */
14365
14366static void
fba45db2 14367ignore_command (char *args, int from_tty)
c906108c
SS
14368{
14369 char *p = args;
52f0bd74 14370 int num;
c906108c
SS
14371
14372 if (p == 0)
e2e0b3e5 14373 error_no_arg (_("a breakpoint number"));
c5aa993b 14374
c906108c 14375 num = get_number (&p);
5c44784c 14376 if (num == 0)
8a3fe4f8 14377 error (_("bad breakpoint number: '%s'"), args);
c906108c 14378 if (*p == 0)
8a3fe4f8 14379 error (_("Second argument (specified ignore-count) is missing."));
c906108c
SS
14380
14381 set_ignore_count (num,
14382 longest_to_int (value_as_long (parse_and_eval (p))),
14383 from_tty);
221ea385
KS
14384 if (from_tty)
14385 printf_filtered ("\n");
c906108c
SS
14386}
14387\f
14388/* Call FUNCTION on each of the breakpoints
14389 whose numbers are given in ARGS. */
14390
14391static void
95a42b64
TT
14392map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *,
14393 void *),
14394 void *data)
c906108c 14395{
52f0bd74
AC
14396 int num;
14397 struct breakpoint *b, *tmp;
11cf8741 14398 int match;
197f0a60 14399 struct get_number_or_range_state state;
c906108c 14400
197f0a60 14401 if (args == 0)
e2e0b3e5 14402 error_no_arg (_("one or more breakpoint numbers"));
c906108c 14403
197f0a60
TT
14404 init_number_or_range (&state, args);
14405
14406 while (!state.finished)
c906108c 14407 {
197f0a60
TT
14408 char *p = state.string;
14409
11cf8741 14410 match = 0;
c5aa993b 14411
197f0a60 14412 num = get_number_or_range (&state);
5c44784c 14413 if (num == 0)
c5aa993b 14414 {
8a3fe4f8 14415 warning (_("bad breakpoint number at or near '%s'"), p);
5c44784c
JM
14416 }
14417 else
14418 {
14419 ALL_BREAKPOINTS_SAFE (b, tmp)
14420 if (b->number == num)
14421 {
11cf8741 14422 match = 1;
cdac0397 14423 function (b, data);
11cf8741 14424 break;
5c44784c 14425 }
11cf8741 14426 if (match == 0)
a3f17187 14427 printf_unfiltered (_("No breakpoint number %d.\n"), num);
c5aa993b 14428 }
c906108c
SS
14429 }
14430}
14431
0d381245
VP
14432static struct bp_location *
14433find_location_by_number (char *number)
14434{
14435 char *dot = strchr (number, '.');
14436 char *p1;
14437 int bp_num;
14438 int loc_num;
14439 struct breakpoint *b;
14440 struct bp_location *loc;
14441
14442 *dot = '\0';
14443
14444 p1 = number;
197f0a60 14445 bp_num = get_number (&p1);
0d381245
VP
14446 if (bp_num == 0)
14447 error (_("Bad breakpoint number '%s'"), number);
14448
14449 ALL_BREAKPOINTS (b)
14450 if (b->number == bp_num)
14451 {
14452 break;
14453 }
14454
14455 if (!b || b->number != bp_num)
14456 error (_("Bad breakpoint number '%s'"), number);
14457
14458 p1 = dot+1;
197f0a60 14459 loc_num = get_number (&p1);
0d381245
VP
14460 if (loc_num == 0)
14461 error (_("Bad breakpoint location number '%s'"), number);
14462
14463 --loc_num;
14464 loc = b->loc;
14465 for (;loc_num && loc; --loc_num, loc = loc->next)
14466 ;
14467 if (!loc)
14468 error (_("Bad breakpoint location number '%s'"), dot+1);
14469
14470 return loc;
14471}
14472
14473
1900040c
MS
14474/* Set ignore-count of breakpoint number BPTNUM to COUNT.
14475 If from_tty is nonzero, it prints a message to that effect,
14476 which ends with a period (no newline). */
14477
c906108c 14478void
fba45db2 14479disable_breakpoint (struct breakpoint *bpt)
c906108c
SS
14480{
14481 /* Never disable a watchpoint scope breakpoint; we want to
14482 hit them when we leave scope so we can delete both the
14483 watchpoint and its scope breakpoint at that time. */
14484 if (bpt->type == bp_watchpoint_scope)
14485 return;
14486
c2c6d25f 14487 /* You can't disable permanent breakpoints. */
b5de0fa7 14488 if (bpt->enable_state == bp_permanent)
c2c6d25f
JM
14489 return;
14490
b5de0fa7 14491 bpt->enable_state = bp_disabled;
c906108c 14492
b775012e
LM
14493 /* Mark breakpoint locations modified. */
14494 mark_breakpoint_modified (bpt);
14495
d248b706
KY
14496 if (target_supports_enable_disable_tracepoint ()
14497 && current_trace_status ()->running && is_tracepoint (bpt))
14498 {
14499 struct bp_location *location;
14500
14501 for (location = bpt->loc; location; location = location->next)
14502 target_disable_tracepoint (location);
14503 }
14504
b60e7edf 14505 update_global_location_list (0);
c906108c 14506
8d3788bd 14507 observer_notify_breakpoint_modified (bpt);
c906108c
SS
14508}
14509
51be5b68
PA
14510/* A callback for iterate_over_related_breakpoints. */
14511
14512static void
14513do_disable_breakpoint (struct breakpoint *b, void *ignore)
14514{
14515 disable_breakpoint (b);
14516}
14517
95a42b64
TT
14518/* A callback for map_breakpoint_numbers that calls
14519 disable_breakpoint. */
14520
14521static void
14522do_map_disable_breakpoint (struct breakpoint *b, void *ignore)
14523{
51be5b68 14524 iterate_over_related_breakpoints (b, do_disable_breakpoint, NULL);
95a42b64
TT
14525}
14526
c906108c 14527static void
fba45db2 14528disable_command (char *args, int from_tty)
c906108c 14529{
c906108c 14530 if (args == 0)
46c6471b
PA
14531 {
14532 struct breakpoint *bpt;
14533
14534 ALL_BREAKPOINTS (bpt)
14535 if (user_breakpoint_p (bpt))
14536 disable_breakpoint (bpt);
14537 }
0d381245
VP
14538 else if (strchr (args, '.'))
14539 {
14540 struct bp_location *loc = find_location_by_number (args);
14541 if (loc)
d248b706 14542 {
b775012e
LM
14543 if (loc->enabled)
14544 {
14545 loc->enabled = 0;
14546 mark_breakpoint_location_modified (loc);
14547 }
d248b706
KY
14548 if (target_supports_enable_disable_tracepoint ()
14549 && current_trace_status ()->running && loc->owner
14550 && is_tracepoint (loc->owner))
14551 target_disable_tracepoint (loc);
14552 }
b60e7edf 14553 update_global_location_list (0);
0d381245 14554 }
c906108c 14555 else
95a42b64 14556 map_breakpoint_numbers (args, do_map_disable_breakpoint, NULL);
c906108c
SS
14557}
14558
14559static void
816338b5
SS
14560enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition,
14561 int count)
c906108c 14562{
afe38095 14563 int target_resources_ok;
c906108c
SS
14564
14565 if (bpt->type == bp_hardware_breakpoint)
14566 {
14567 int i;
c5aa993b 14568 i = hw_breakpoint_used_count ();
53a5351d 14569 target_resources_ok =
d92524f1 14570 target_can_use_hardware_watchpoint (bp_hardware_breakpoint,
53a5351d 14571 i + 1, 0);
c906108c 14572 if (target_resources_ok == 0)
8a3fe4f8 14573 error (_("No hardware breakpoint support in the target."));
c906108c 14574 else if (target_resources_ok < 0)
8a3fe4f8 14575 error (_("Hardware breakpoints used exceeds limit."));
c906108c
SS
14576 }
14577
cc60f2e3 14578 if (is_watchpoint (bpt))
c906108c 14579 {
d07205c2
JK
14580 /* Initialize it just to avoid a GCC false warning. */
14581 enum enable_state orig_enable_state = 0;
bfd189b1 14582 volatile struct gdb_exception e;
dde02812
ES
14583
14584 TRY_CATCH (e, RETURN_MASK_ALL)
c906108c 14585 {
3a5c3e22
PA
14586 struct watchpoint *w = (struct watchpoint *) bpt;
14587
1e718ff1
TJB
14588 orig_enable_state = bpt->enable_state;
14589 bpt->enable_state = bp_enabled;
3a5c3e22 14590 update_watchpoint (w, 1 /* reparse */);
c906108c 14591 }
dde02812 14592 if (e.reason < 0)
c5aa993b 14593 {
1e718ff1 14594 bpt->enable_state = orig_enable_state;
dde02812
ES
14595 exception_fprintf (gdb_stderr, e, _("Cannot enable watchpoint %d: "),
14596 bpt->number);
14597 return;
c5aa993b 14598 }
c906108c 14599 }
0101ce28 14600
b4c291bb
KH
14601 if (bpt->enable_state != bp_permanent)
14602 bpt->enable_state = bp_enabled;
d248b706 14603
b775012e
LM
14604 bpt->enable_state = bp_enabled;
14605
14606 /* Mark breakpoint locations modified. */
14607 mark_breakpoint_modified (bpt);
14608
d248b706
KY
14609 if (target_supports_enable_disable_tracepoint ()
14610 && current_trace_status ()->running && is_tracepoint (bpt))
14611 {
14612 struct bp_location *location;
14613
14614 for (location = bpt->loc; location; location = location->next)
14615 target_enable_tracepoint (location);
14616 }
14617
b4c291bb 14618 bpt->disposition = disposition;
816338b5 14619 bpt->enable_count = count;
b60e7edf 14620 update_global_location_list (1);
ef37bb07 14621 annotate_breakpoints_changed ();
b4c291bb 14622
8d3788bd 14623 observer_notify_breakpoint_modified (bpt);
c906108c
SS
14624}
14625
fe3f5fa8 14626
c906108c 14627void
fba45db2 14628enable_breakpoint (struct breakpoint *bpt)
c906108c 14629{
816338b5 14630 enable_breakpoint_disp (bpt, bpt->disposition, 0);
51be5b68
PA
14631}
14632
14633static void
14634do_enable_breakpoint (struct breakpoint *bpt, void *arg)
14635{
14636 enable_breakpoint (bpt);
c906108c
SS
14637}
14638
95a42b64
TT
14639/* A callback for map_breakpoint_numbers that calls
14640 enable_breakpoint. */
14641
14642static void
14643do_map_enable_breakpoint (struct breakpoint *b, void *ignore)
14644{
51be5b68 14645 iterate_over_related_breakpoints (b, do_enable_breakpoint, NULL);
95a42b64
TT
14646}
14647
c906108c
SS
14648/* The enable command enables the specified breakpoints (or all defined
14649 breakpoints) so they once again become (or continue to be) effective
1272ad14 14650 in stopping the inferior. */
c906108c 14651
c906108c 14652static void
fba45db2 14653enable_command (char *args, int from_tty)
c906108c 14654{
c906108c 14655 if (args == 0)
46c6471b
PA
14656 {
14657 struct breakpoint *bpt;
14658
14659 ALL_BREAKPOINTS (bpt)
14660 if (user_breakpoint_p (bpt))
14661 enable_breakpoint (bpt);
14662 }
0d381245
VP
14663 else if (strchr (args, '.'))
14664 {
14665 struct bp_location *loc = find_location_by_number (args);
14666 if (loc)
d248b706 14667 {
b775012e
LM
14668 if (!loc->enabled)
14669 {
14670 loc->enabled = 1;
14671 mark_breakpoint_location_modified (loc);
14672 }
d248b706
KY
14673 if (target_supports_enable_disable_tracepoint ()
14674 && current_trace_status ()->running && loc->owner
14675 && is_tracepoint (loc->owner))
14676 target_enable_tracepoint (loc);
14677 }
b60e7edf 14678 update_global_location_list (1);
0d381245 14679 }
c906108c 14680 else
95a42b64 14681 map_breakpoint_numbers (args, do_map_enable_breakpoint, NULL);
c906108c
SS
14682}
14683
816338b5
SS
14684/* This struct packages up disposition data for application to multiple
14685 breakpoints. */
14686
14687struct disp_data
14688{
14689 enum bpdisp disp;
14690 int count;
14691};
14692
c906108c 14693static void
51be5b68
PA
14694do_enable_breakpoint_disp (struct breakpoint *bpt, void *arg)
14695{
816338b5 14696 struct disp_data disp_data = *(struct disp_data *) arg;
51be5b68 14697
816338b5 14698 enable_breakpoint_disp (bpt, disp_data.disp, disp_data.count);
51be5b68
PA
14699}
14700
14701static void
14702do_map_enable_once_breakpoint (struct breakpoint *bpt, void *ignore)
c906108c 14703{
816338b5 14704 struct disp_data disp = { disp_disable, 1 };
51be5b68
PA
14705
14706 iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
c906108c
SS
14707}
14708
c906108c 14709static void
fba45db2 14710enable_once_command (char *args, int from_tty)
c906108c 14711{
51be5b68 14712 map_breakpoint_numbers (args, do_map_enable_once_breakpoint, NULL);
c906108c
SS
14713}
14714
816338b5
SS
14715static void
14716do_map_enable_count_breakpoint (struct breakpoint *bpt, void *countptr)
14717{
14718 struct disp_data disp = { disp_disable, *(int *) countptr };
14719
14720 iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
14721}
14722
14723static void
14724enable_count_command (char *args, int from_tty)
14725{
14726 int count = get_number (&args);
14727
14728 map_breakpoint_numbers (args, do_map_enable_count_breakpoint, &count);
14729}
14730
c906108c 14731static void
51be5b68 14732do_map_enable_delete_breakpoint (struct breakpoint *bpt, void *ignore)
c906108c 14733{
816338b5 14734 struct disp_data disp = { disp_del, 1 };
51be5b68
PA
14735
14736 iterate_over_related_breakpoints (bpt, do_enable_breakpoint_disp, &disp);
c906108c
SS
14737}
14738
c906108c 14739static void
fba45db2 14740enable_delete_command (char *args, int from_tty)
c906108c 14741{
51be5b68 14742 map_breakpoint_numbers (args, do_map_enable_delete_breakpoint, NULL);
c906108c
SS
14743}
14744\f
fa8d40ab
JJ
14745static void
14746set_breakpoint_cmd (char *args, int from_tty)
14747{
14748}
14749
14750static void
14751show_breakpoint_cmd (char *args, int from_tty)
14752{
14753}
14754
1f3b5d1b
PP
14755/* Invalidate last known value of any hardware watchpoint if
14756 the memory which that value represents has been written to by
14757 GDB itself. */
14758
14759static void
8de0566d
YQ
14760invalidate_bp_value_on_memory_change (struct inferior *inferior,
14761 CORE_ADDR addr, ssize_t len,
1f3b5d1b
PP
14762 const bfd_byte *data)
14763{
14764 struct breakpoint *bp;
14765
14766 ALL_BREAKPOINTS (bp)
14767 if (bp->enable_state == bp_enabled
3a5c3e22 14768 && bp->type == bp_hardware_watchpoint)
1f3b5d1b 14769 {
3a5c3e22 14770 struct watchpoint *wp = (struct watchpoint *) bp;
1f3b5d1b 14771
3a5c3e22
PA
14772 if (wp->val_valid && wp->val)
14773 {
14774 struct bp_location *loc;
14775
14776 for (loc = bp->loc; loc != NULL; loc = loc->next)
14777 if (loc->loc_type == bp_loc_hardware_watchpoint
14778 && loc->address + loc->length > addr
14779 && addr + len > loc->address)
14780 {
14781 value_free (wp->val);
14782 wp->val = NULL;
14783 wp->val_valid = 0;
14784 }
14785 }
1f3b5d1b
PP
14786 }
14787}
14788
8181d85f
DJ
14789/* Create and insert a raw software breakpoint at PC. Return an
14790 identifier, which should be used to remove the breakpoint later.
14791 In general, places which call this should be using something on the
14792 breakpoint chain instead; this function should be eliminated
14793 someday. */
14794
14795void *
6c95b8df
PA
14796deprecated_insert_raw_breakpoint (struct gdbarch *gdbarch,
14797 struct address_space *aspace, CORE_ADDR pc)
8181d85f
DJ
14798{
14799 struct bp_target_info *bp_tgt;
14800
6c95b8df 14801 bp_tgt = XZALLOC (struct bp_target_info);
8181d85f 14802
6c95b8df 14803 bp_tgt->placed_address_space = aspace;
8181d85f 14804 bp_tgt->placed_address = pc;
6c95b8df 14805
a6d9a66e 14806 if (target_insert_breakpoint (gdbarch, bp_tgt) != 0)
8181d85f
DJ
14807 {
14808 /* Could not insert the breakpoint. */
14809 xfree (bp_tgt);
14810 return NULL;
14811 }
14812
14813 return bp_tgt;
14814}
14815
4a64f543
MS
14816/* Remove a breakpoint BP inserted by
14817 deprecated_insert_raw_breakpoint. */
8181d85f
DJ
14818
14819int
a6d9a66e 14820deprecated_remove_raw_breakpoint (struct gdbarch *gdbarch, void *bp)
8181d85f
DJ
14821{
14822 struct bp_target_info *bp_tgt = bp;
14823 int ret;
14824
a6d9a66e 14825 ret = target_remove_breakpoint (gdbarch, bp_tgt);
8181d85f
DJ
14826 xfree (bp_tgt);
14827
14828 return ret;
14829}
14830
4a64f543
MS
14831/* One (or perhaps two) breakpoints used for software single
14832 stepping. */
8181d85f
DJ
14833
14834static void *single_step_breakpoints[2];
a6d9a66e 14835static struct gdbarch *single_step_gdbarch[2];
8181d85f
DJ
14836
14837/* Create and insert a breakpoint for software single step. */
14838
14839void
6c95b8df 14840insert_single_step_breakpoint (struct gdbarch *gdbarch,
4a64f543
MS
14841 struct address_space *aspace,
14842 CORE_ADDR next_pc)
8181d85f
DJ
14843{
14844 void **bpt_p;
14845
14846 if (single_step_breakpoints[0] == NULL)
a6d9a66e
UW
14847 {
14848 bpt_p = &single_step_breakpoints[0];
14849 single_step_gdbarch[0] = gdbarch;
14850 }
8181d85f
DJ
14851 else
14852 {
14853 gdb_assert (single_step_breakpoints[1] == NULL);
14854 bpt_p = &single_step_breakpoints[1];
a6d9a66e 14855 single_step_gdbarch[1] = gdbarch;
8181d85f
DJ
14856 }
14857
4a64f543
MS
14858 /* NOTE drow/2006-04-11: A future improvement to this function would
14859 be to only create the breakpoints once, and actually put them on
14860 the breakpoint chain. That would let us use set_raw_breakpoint.
14861 We could adjust the addresses each time they were needed. Doing
14862 this requires corresponding changes elsewhere where single step
14863 breakpoints are handled, however. So, for now, we use this. */
8181d85f 14864
6c95b8df 14865 *bpt_p = deprecated_insert_raw_breakpoint (gdbarch, aspace, next_pc);
8181d85f 14866 if (*bpt_p == NULL)
5af949e3
UW
14867 error (_("Could not insert single-step breakpoint at %s"),
14868 paddress (gdbarch, next_pc));
8181d85f
DJ
14869}
14870
f02253f1
HZ
14871/* Check if the breakpoints used for software single stepping
14872 were inserted or not. */
14873
14874int
14875single_step_breakpoints_inserted (void)
14876{
14877 return (single_step_breakpoints[0] != NULL
14878 || single_step_breakpoints[1] != NULL);
14879}
14880
8181d85f
DJ
14881/* Remove and delete any breakpoints used for software single step. */
14882
14883void
14884remove_single_step_breakpoints (void)
14885{
14886 gdb_assert (single_step_breakpoints[0] != NULL);
14887
14888 /* See insert_single_step_breakpoint for more about this deprecated
14889 call. */
a6d9a66e
UW
14890 deprecated_remove_raw_breakpoint (single_step_gdbarch[0],
14891 single_step_breakpoints[0]);
14892 single_step_gdbarch[0] = NULL;
8181d85f
DJ
14893 single_step_breakpoints[0] = NULL;
14894
14895 if (single_step_breakpoints[1] != NULL)
14896 {
a6d9a66e
UW
14897 deprecated_remove_raw_breakpoint (single_step_gdbarch[1],
14898 single_step_breakpoints[1]);
14899 single_step_gdbarch[1] = NULL;
8181d85f
DJ
14900 single_step_breakpoints[1] = NULL;
14901 }
14902}
14903
d03285ec
UW
14904/* Delete software single step breakpoints without removing them from
14905 the inferior. This is intended to be used if the inferior's address
14906 space where they were inserted is already gone, e.g. after exit or
14907 exec. */
14908
14909void
14910cancel_single_step_breakpoints (void)
14911{
14912 int i;
14913
14914 for (i = 0; i < 2; i++)
14915 if (single_step_breakpoints[i])
14916 {
14917 xfree (single_step_breakpoints[i]);
14918 single_step_breakpoints[i] = NULL;
14919 single_step_gdbarch[i] = NULL;
14920 }
14921}
14922
14923/* Detach software single-step breakpoints from INFERIOR_PTID without
14924 removing them. */
14925
14926static void
14927detach_single_step_breakpoints (void)
14928{
14929 int i;
14930
14931 for (i = 0; i < 2; i++)
14932 if (single_step_breakpoints[i])
14933 target_remove_breakpoint (single_step_gdbarch[i],
14934 single_step_breakpoints[i]);
14935}
14936
4a64f543
MS
14937/* Check whether a software single-step breakpoint is inserted at
14938 PC. */
1aafd4da
UW
14939
14940static int
cc59ec59
MS
14941single_step_breakpoint_inserted_here_p (struct address_space *aspace,
14942 CORE_ADDR pc)
1aafd4da
UW
14943{
14944 int i;
14945
14946 for (i = 0; i < 2; i++)
14947 {
14948 struct bp_target_info *bp_tgt = single_step_breakpoints[i];
6c95b8df
PA
14949 if (bp_tgt
14950 && breakpoint_address_match (bp_tgt->placed_address_space,
14951 bp_tgt->placed_address,
14952 aspace, pc))
1aafd4da
UW
14953 return 1;
14954 }
14955
14956 return 0;
14957}
14958
a96d9b2e
SDJ
14959/* Returns 0 if 'bp' is NOT a syscall catchpoint,
14960 non-zero otherwise. */
14961static int
14962is_syscall_catchpoint_enabled (struct breakpoint *bp)
14963{
14964 if (syscall_catchpoint_p (bp)
14965 && bp->enable_state != bp_disabled
14966 && bp->enable_state != bp_call_disabled)
14967 return 1;
14968 else
14969 return 0;
14970}
14971
14972int
14973catch_syscall_enabled (void)
14974{
fa3064dd
YQ
14975 struct catch_syscall_inferior_data *inf_data
14976 = get_catch_syscall_inferior_data (current_inferior ());
a96d9b2e 14977
fa3064dd 14978 return inf_data->total_syscalls_count != 0;
a96d9b2e
SDJ
14979}
14980
14981int
14982catching_syscall_number (int syscall_number)
14983{
14984 struct breakpoint *bp;
14985
14986 ALL_BREAKPOINTS (bp)
14987 if (is_syscall_catchpoint_enabled (bp))
14988 {
be5c67c1
PA
14989 struct syscall_catchpoint *c = (struct syscall_catchpoint *) bp;
14990
14991 if (c->syscalls_to_be_caught)
a96d9b2e
SDJ
14992 {
14993 int i, iter;
14994 for (i = 0;
be5c67c1 14995 VEC_iterate (int, c->syscalls_to_be_caught, i, iter);
a96d9b2e
SDJ
14996 i++)
14997 if (syscall_number == iter)
14998 return 1;
14999 }
15000 else
15001 return 1;
15002 }
15003
15004 return 0;
15005}
15006
15007/* Complete syscall names. Used by "catch syscall". */
49c4e619 15008static VEC (char_ptr) *
a96d9b2e
SDJ
15009catch_syscall_completer (struct cmd_list_element *cmd,
15010 char *text, char *word)
15011{
15012 const char **list = get_syscall_names ();
49c4e619 15013 VEC (char_ptr) *retlist
b45627a0 15014 = (list == NULL) ? NULL : complete_on_enum (list, word, word);
cc59ec59 15015
c38eea1a
MS
15016 xfree (list);
15017 return retlist;
a96d9b2e
SDJ
15018}
15019
1042e4c0
SS
15020/* Tracepoint-specific operations. */
15021
15022/* Set tracepoint count to NUM. */
15023static void
15024set_tracepoint_count (int num)
15025{
15026 tracepoint_count = num;
4fa62494 15027 set_internalvar_integer (lookup_internalvar ("tpnum"), num);
1042e4c0
SS
15028}
15029
70221824 15030static void
1042e4c0
SS
15031trace_command (char *arg, int from_tty)
15032{
55aa24fb
SDJ
15033 struct breakpoint_ops *ops;
15034 const char *arg_cp = arg;
15035
15036 if (arg && probe_linespec_to_ops (&arg_cp))
15037 ops = &tracepoint_probe_breakpoint_ops;
15038 else
15039 ops = &tracepoint_breakpoint_ops;
15040
558a9d82
YQ
15041 create_breakpoint (get_current_arch (),
15042 arg,
15043 NULL, 0, NULL, 1 /* parse arg */,
15044 0 /* tempflag */,
15045 bp_tracepoint /* type_wanted */,
15046 0 /* Ignore count */,
15047 pending_break_support,
15048 ops,
15049 from_tty,
15050 1 /* enabled */,
15051 0 /* internal */, 0);
1042e4c0
SS
15052}
15053
70221824 15054static void
7a697b8d
SS
15055ftrace_command (char *arg, int from_tty)
15056{
558a9d82
YQ
15057 create_breakpoint (get_current_arch (),
15058 arg,
15059 NULL, 0, NULL, 1 /* parse arg */,
15060 0 /* tempflag */,
15061 bp_fast_tracepoint /* type_wanted */,
15062 0 /* Ignore count */,
15063 pending_break_support,
15064 &tracepoint_breakpoint_ops,
15065 from_tty,
15066 1 /* enabled */,
15067 0 /* internal */, 0);
0fb4aa4b
PA
15068}
15069
15070/* strace command implementation. Creates a static tracepoint. */
15071
70221824 15072static void
0fb4aa4b
PA
15073strace_command (char *arg, int from_tty)
15074{
983af33b
SDJ
15075 struct breakpoint_ops *ops;
15076
15077 /* Decide if we are dealing with a static tracepoint marker (`-m'),
15078 or with a normal static tracepoint. */
15079 if (arg && strncmp (arg, "-m", 2) == 0 && isspace (arg[2]))
15080 ops = &strace_marker_breakpoint_ops;
15081 else
15082 ops = &tracepoint_breakpoint_ops;
15083
558a9d82
YQ
15084 create_breakpoint (get_current_arch (),
15085 arg,
15086 NULL, 0, NULL, 1 /* parse arg */,
15087 0 /* tempflag */,
15088 bp_static_tracepoint /* type_wanted */,
15089 0 /* Ignore count */,
15090 pending_break_support,
15091 ops,
15092 from_tty,
15093 1 /* enabled */,
15094 0 /* internal */, 0);
7a697b8d
SS
15095}
15096
409873ef
SS
15097/* Set up a fake reader function that gets command lines from a linked
15098 list that was acquired during tracepoint uploading. */
15099
15100static struct uploaded_tp *this_utp;
3149d8c1 15101static int next_cmd;
409873ef
SS
15102
15103static char *
15104read_uploaded_action (void)
15105{
15106 char *rslt;
15107
3149d8c1 15108 VEC_iterate (char_ptr, this_utp->cmd_strings, next_cmd, rslt);
409873ef 15109
3149d8c1 15110 next_cmd++;
409873ef
SS
15111
15112 return rslt;
15113}
15114
00bf0b85
SS
15115/* Given information about a tracepoint as recorded on a target (which
15116 can be either a live system or a trace file), attempt to create an
15117 equivalent GDB tracepoint. This is not a reliable process, since
15118 the target does not necessarily have all the information used when
15119 the tracepoint was originally defined. */
15120
d9b3f62e 15121struct tracepoint *
00bf0b85 15122create_tracepoint_from_upload (struct uploaded_tp *utp)
d5551862 15123{
409873ef 15124 char *addr_str, small_buf[100];
d9b3f62e 15125 struct tracepoint *tp;
fd9b8c24 15126
409873ef
SS
15127 if (utp->at_string)
15128 addr_str = utp->at_string;
15129 else
15130 {
15131 /* In the absence of a source location, fall back to raw
15132 address. Since there is no way to confirm that the address
15133 means the same thing as when the trace was started, warn the
15134 user. */
3e43a32a
MS
15135 warning (_("Uploaded tracepoint %d has no "
15136 "source location, using raw address"),
409873ef 15137 utp->number);
8c042590 15138 xsnprintf (small_buf, sizeof (small_buf), "*%s", hex_string (utp->addr));
409873ef
SS
15139 addr_str = small_buf;
15140 }
15141
15142 /* There's not much we can do with a sequence of bytecodes. */
15143 if (utp->cond && !utp->cond_string)
3e43a32a
MS
15144 warning (_("Uploaded tracepoint %d condition "
15145 "has no source form, ignoring it"),
409873ef 15146 utp->number);
d5551862 15147
8cdf0e15 15148 if (!create_breakpoint (get_current_arch (),
409873ef 15149 addr_str,
e7e0cddf
SS
15150 utp->cond_string, -1, NULL,
15151 0 /* parse cond/thread */,
8cdf0e15 15152 0 /* tempflag */,
0fb4aa4b 15153 utp->type /* type_wanted */,
8cdf0e15
VP
15154 0 /* Ignore count */,
15155 pending_break_support,
348d480f 15156 &tracepoint_breakpoint_ops,
8cdf0e15 15157 0 /* from_tty */,
84f4c1fe 15158 utp->enabled /* enabled */,
44f238bb
PA
15159 0 /* internal */,
15160 CREATE_BREAKPOINT_FLAGS_INSERTED))
fd9b8c24
PA
15161 return NULL;
15162
409873ef 15163 /* Get the tracepoint we just created. */
fd9b8c24
PA
15164 tp = get_tracepoint (tracepoint_count);
15165 gdb_assert (tp != NULL);
d5551862 15166
00bf0b85
SS
15167 if (utp->pass > 0)
15168 {
8c042590
PM
15169 xsnprintf (small_buf, sizeof (small_buf), "%d %d", utp->pass,
15170 tp->base.number);
00bf0b85 15171
409873ef 15172 trace_pass_command (small_buf, 0);
00bf0b85
SS
15173 }
15174
409873ef
SS
15175 /* If we have uploaded versions of the original commands, set up a
15176 special-purpose "reader" function and call the usual command line
15177 reader, then pass the result to the breakpoint command-setting
15178 function. */
3149d8c1 15179 if (!VEC_empty (char_ptr, utp->cmd_strings))
00bf0b85 15180 {
409873ef 15181 struct command_line *cmd_list;
00bf0b85 15182
409873ef 15183 this_utp = utp;
3149d8c1 15184 next_cmd = 0;
d5551862 15185
409873ef
SS
15186 cmd_list = read_command_lines_1 (read_uploaded_action, 1, NULL, NULL);
15187
d9b3f62e 15188 breakpoint_set_commands (&tp->base, cmd_list);
00bf0b85 15189 }
3149d8c1
SS
15190 else if (!VEC_empty (char_ptr, utp->actions)
15191 || !VEC_empty (char_ptr, utp->step_actions))
3e43a32a
MS
15192 warning (_("Uploaded tracepoint %d actions "
15193 "have no source form, ignoring them"),
409873ef 15194 utp->number);
00bf0b85 15195
f196051f
SS
15196 /* Copy any status information that might be available. */
15197 tp->base.hit_count = utp->hit_count;
15198 tp->traceframe_usage = utp->traceframe_usage;
15199
00bf0b85 15200 return tp;
d9b3f62e 15201}
00bf0b85 15202
1042e4c0
SS
15203/* Print information on tracepoint number TPNUM_EXP, or all if
15204 omitted. */
15205
15206static void
e5a67952 15207tracepoints_info (char *args, int from_tty)
1042e4c0 15208{
79a45e25 15209 struct ui_out *uiout = current_uiout;
e5a67952 15210 int num_printed;
1042e4c0 15211
e5a67952 15212 num_printed = breakpoint_1 (args, 0, is_tracepoint);
d77f58be
SS
15213
15214 if (num_printed == 0)
1042e4c0 15215 {
e5a67952 15216 if (args == NULL || *args == '\0')
d77f58be
SS
15217 ui_out_message (uiout, 0, "No tracepoints.\n");
15218 else
e5a67952 15219 ui_out_message (uiout, 0, "No tracepoint matching '%s'.\n", args);
1042e4c0 15220 }
ad443146
SS
15221
15222 default_collect_info ();
1042e4c0
SS
15223}
15224
4a64f543 15225/* The 'enable trace' command enables tracepoints.
1042e4c0
SS
15226 Not supported by all targets. */
15227static void
15228enable_trace_command (char *args, int from_tty)
15229{
15230 enable_command (args, from_tty);
15231}
15232
4a64f543 15233/* The 'disable trace' command disables tracepoints.
1042e4c0
SS
15234 Not supported by all targets. */
15235static void
15236disable_trace_command (char *args, int from_tty)
15237{
15238 disable_command (args, from_tty);
15239}
15240
4a64f543 15241/* Remove a tracepoint (or all if no argument). */
1042e4c0
SS
15242static void
15243delete_trace_command (char *arg, int from_tty)
15244{
35df4500 15245 struct breakpoint *b, *b_tmp;
1042e4c0
SS
15246
15247 dont_repeat ();
15248
15249 if (arg == 0)
15250 {
15251 int breaks_to_delete = 0;
15252
15253 /* Delete all breakpoints if no argument.
15254 Do not delete internal or call-dummy breakpoints, these
4a64f543
MS
15255 have to be deleted with an explicit breakpoint number
15256 argument. */
1042e4c0 15257 ALL_TRACEPOINTS (b)
46c6471b 15258 if (is_tracepoint (b) && user_breakpoint_p (b))
1042e4c0
SS
15259 {
15260 breaks_to_delete = 1;
15261 break;
15262 }
1042e4c0
SS
15263
15264 /* Ask user only if there are some breakpoints to delete. */
15265 if (!from_tty
15266 || (breaks_to_delete && query (_("Delete all tracepoints? "))))
15267 {
35df4500 15268 ALL_BREAKPOINTS_SAFE (b, b_tmp)
46c6471b 15269 if (is_tracepoint (b) && user_breakpoint_p (b))
1042e4c0 15270 delete_breakpoint (b);
1042e4c0
SS
15271 }
15272 }
15273 else
51be5b68 15274 map_breakpoint_numbers (arg, do_map_delete_breakpoint, NULL);
1042e4c0
SS
15275}
15276
197f0a60
TT
15277/* Helper function for trace_pass_command. */
15278
15279static void
d9b3f62e 15280trace_pass_set_count (struct tracepoint *tp, int count, int from_tty)
197f0a60 15281{
d9b3f62e 15282 tp->pass_count = count;
6f6484cd 15283 observer_notify_breakpoint_modified (&tp->base);
197f0a60
TT
15284 if (from_tty)
15285 printf_filtered (_("Setting tracepoint %d's passcount to %d\n"),
d9b3f62e 15286 tp->base.number, count);
197f0a60
TT
15287}
15288
1042e4c0
SS
15289/* Set passcount for tracepoint.
15290
15291 First command argument is passcount, second is tracepoint number.
15292 If tracepoint number omitted, apply to most recently defined.
15293 Also accepts special argument "all". */
15294
15295static void
15296trace_pass_command (char *args, int from_tty)
15297{
d9b3f62e 15298 struct tracepoint *t1;
1042e4c0 15299 unsigned int count;
1042e4c0
SS
15300
15301 if (args == 0 || *args == 0)
3e43a32a
MS
15302 error (_("passcount command requires an "
15303 "argument (count + optional TP num)"));
1042e4c0 15304
4a64f543 15305 count = strtoul (args, &args, 10); /* Count comes first, then TP num. */
1042e4c0
SS
15306
15307 while (*args && isspace ((int) *args))
15308 args++;
15309
15310 if (*args && strncasecmp (args, "all", 3) == 0)
15311 {
d9b3f62e
PA
15312 struct breakpoint *b;
15313
1042e4c0 15314 args += 3; /* Skip special argument "all". */
1042e4c0
SS
15315 if (*args)
15316 error (_("Junk at end of arguments."));
1042e4c0 15317
d9b3f62e 15318 ALL_TRACEPOINTS (b)
197f0a60 15319 {
d9b3f62e 15320 t1 = (struct tracepoint *) b;
197f0a60
TT
15321 trace_pass_set_count (t1, count, from_tty);
15322 }
15323 }
15324 else if (*args == '\0')
1042e4c0 15325 {
197f0a60 15326 t1 = get_tracepoint_by_number (&args, NULL, 1);
1042e4c0 15327 if (t1)
197f0a60
TT
15328 trace_pass_set_count (t1, count, from_tty);
15329 }
15330 else
15331 {
15332 struct get_number_or_range_state state;
15333
15334 init_number_or_range (&state, args);
15335 while (!state.finished)
1042e4c0 15336 {
197f0a60
TT
15337 t1 = get_tracepoint_by_number (&args, &state, 1);
15338 if (t1)
15339 trace_pass_set_count (t1, count, from_tty);
1042e4c0
SS
15340 }
15341 }
1042e4c0
SS
15342}
15343
d9b3f62e 15344struct tracepoint *
1042e4c0
SS
15345get_tracepoint (int num)
15346{
15347 struct breakpoint *t;
15348
15349 ALL_TRACEPOINTS (t)
15350 if (t->number == num)
d9b3f62e 15351 return (struct tracepoint *) t;
1042e4c0
SS
15352
15353 return NULL;
15354}
15355
d5551862
SS
15356/* Find the tracepoint with the given target-side number (which may be
15357 different from the tracepoint number after disconnecting and
15358 reconnecting). */
15359
d9b3f62e 15360struct tracepoint *
d5551862
SS
15361get_tracepoint_by_number_on_target (int num)
15362{
d9b3f62e 15363 struct breakpoint *b;
d5551862 15364
d9b3f62e
PA
15365 ALL_TRACEPOINTS (b)
15366 {
15367 struct tracepoint *t = (struct tracepoint *) b;
15368
15369 if (t->number_on_target == num)
15370 return t;
15371 }
d5551862
SS
15372
15373 return NULL;
15374}
15375
1042e4c0 15376/* Utility: parse a tracepoint number and look it up in the list.
197f0a60
TT
15377 If STATE is not NULL, use, get_number_or_range_state and ignore ARG.
15378 If OPTIONAL_P is true, then if the argument is missing, the most
1042e4c0 15379 recent tracepoint (tracepoint_count) is returned. */
d9b3f62e 15380struct tracepoint *
197f0a60
TT
15381get_tracepoint_by_number (char **arg,
15382 struct get_number_or_range_state *state,
15383 int optional_p)
1042e4c0 15384{
1042e4c0
SS
15385 struct breakpoint *t;
15386 int tpnum;
15387 char *instring = arg == NULL ? NULL : *arg;
15388
197f0a60
TT
15389 if (state)
15390 {
15391 gdb_assert (!state->finished);
15392 tpnum = get_number_or_range (state);
15393 }
15394 else if (arg == NULL || *arg == NULL || ! **arg)
1042e4c0
SS
15395 {
15396 if (optional_p)
15397 tpnum = tracepoint_count;
15398 else
15399 error_no_arg (_("tracepoint number"));
15400 }
15401 else
197f0a60 15402 tpnum = get_number (arg);
1042e4c0
SS
15403
15404 if (tpnum <= 0)
15405 {
15406 if (instring && *instring)
15407 printf_filtered (_("bad tracepoint number at or near '%s'\n"),
15408 instring);
15409 else
3e43a32a
MS
15410 printf_filtered (_("Tracepoint argument missing "
15411 "and no previous tracepoint\n"));
1042e4c0
SS
15412 return NULL;
15413 }
15414
15415 ALL_TRACEPOINTS (t)
15416 if (t->number == tpnum)
15417 {
d9b3f62e 15418 return (struct tracepoint *) t;
1042e4c0
SS
15419 }
15420
1042e4c0
SS
15421 printf_unfiltered ("No tracepoint number %d.\n", tpnum);
15422 return NULL;
15423}
15424
d9b3f62e
PA
15425void
15426print_recreate_thread (struct breakpoint *b, struct ui_file *fp)
15427{
15428 if (b->thread != -1)
15429 fprintf_unfiltered (fp, " thread %d", b->thread);
15430
15431 if (b->task != 0)
15432 fprintf_unfiltered (fp, " task %d", b->task);
15433
15434 fprintf_unfiltered (fp, "\n");
15435}
15436
6149aea9
PA
15437/* Save information on user settable breakpoints (watchpoints, etc) to
15438 a new script file named FILENAME. If FILTER is non-NULL, call it
15439 on each breakpoint and only include the ones for which it returns
15440 non-zero. */
15441
1042e4c0 15442static void
6149aea9
PA
15443save_breakpoints (char *filename, int from_tty,
15444 int (*filter) (const struct breakpoint *))
1042e4c0
SS
15445{
15446 struct breakpoint *tp;
6149aea9 15447 int any = 0;
a7bdde9e 15448 char *pathname;
1042e4c0 15449 struct cleanup *cleanup;
a7bdde9e 15450 struct ui_file *fp;
6149aea9 15451 int extra_trace_bits = 0;
1042e4c0 15452
6149aea9
PA
15453 if (filename == 0 || *filename == 0)
15454 error (_("Argument required (file name in which to save)"));
1042e4c0
SS
15455
15456 /* See if we have anything to save. */
6149aea9 15457 ALL_BREAKPOINTS (tp)
1042e4c0 15458 {
6149aea9 15459 /* Skip internal and momentary breakpoints. */
09d682a4 15460 if (!user_breakpoint_p (tp))
6149aea9
PA
15461 continue;
15462
15463 /* If we have a filter, only save the breakpoints it accepts. */
15464 if (filter && !filter (tp))
15465 continue;
15466
15467 any = 1;
15468
15469 if (is_tracepoint (tp))
15470 {
15471 extra_trace_bits = 1;
15472
15473 /* We can stop searching. */
15474 break;
15475 }
1042e4c0 15476 }
6149aea9
PA
15477
15478 if (!any)
1042e4c0 15479 {
6149aea9 15480 warning (_("Nothing to save."));
1042e4c0
SS
15481 return;
15482 }
15483
6149aea9 15484 pathname = tilde_expand (filename);
1042e4c0 15485 cleanup = make_cleanup (xfree, pathname);
a7bdde9e 15486 fp = gdb_fopen (pathname, "w");
059fb39f 15487 if (!fp)
6149aea9
PA
15488 error (_("Unable to open file '%s' for saving (%s)"),
15489 filename, safe_strerror (errno));
a7bdde9e 15490 make_cleanup_ui_file_delete (fp);
8bf6485c 15491
6149aea9
PA
15492 if (extra_trace_bits)
15493 save_trace_state_variables (fp);
8bf6485c 15494
6149aea9 15495 ALL_BREAKPOINTS (tp)
1042e4c0 15496 {
6149aea9 15497 /* Skip internal and momentary breakpoints. */
09d682a4 15498 if (!user_breakpoint_p (tp))
6149aea9 15499 continue;
8bf6485c 15500
6149aea9
PA
15501 /* If we have a filter, only save the breakpoints it accepts. */
15502 if (filter && !filter (tp))
15503 continue;
15504
348d480f 15505 tp->ops->print_recreate (tp, fp);
1042e4c0 15506
6149aea9
PA
15507 /* Note, we can't rely on tp->number for anything, as we can't
15508 assume the recreated breakpoint numbers will match. Use $bpnum
15509 instead. */
15510
15511 if (tp->cond_string)
15512 fprintf_unfiltered (fp, " condition $bpnum %s\n", tp->cond_string);
15513
15514 if (tp->ignore_count)
15515 fprintf_unfiltered (fp, " ignore $bpnum %d\n", tp->ignore_count);
15516
a7bdde9e 15517 if (tp->commands)
1042e4c0 15518 {
a7bdde9e
VP
15519 volatile struct gdb_exception ex;
15520
6149aea9 15521 fprintf_unfiltered (fp, " commands\n");
a7bdde9e 15522
79a45e25 15523 ui_out_redirect (current_uiout, fp);
14dba4b4 15524 TRY_CATCH (ex, RETURN_MASK_ALL)
1042e4c0 15525 {
79a45e25 15526 print_command_lines (current_uiout, tp->commands->commands, 2);
a7bdde9e 15527 }
79a45e25 15528 ui_out_redirect (current_uiout, NULL);
1042e4c0 15529
a7bdde9e
VP
15530 if (ex.reason < 0)
15531 throw_exception (ex);
1042e4c0 15532
a7bdde9e 15533 fprintf_unfiltered (fp, " end\n");
1042e4c0 15534 }
6149aea9
PA
15535
15536 if (tp->enable_state == bp_disabled)
15537 fprintf_unfiltered (fp, "disable\n");
15538
15539 /* If this is a multi-location breakpoint, check if the locations
15540 should be individually disabled. Watchpoint locations are
15541 special, and not user visible. */
15542 if (!is_watchpoint (tp) && tp->loc && tp->loc->next)
15543 {
15544 struct bp_location *loc;
15545 int n = 1;
15546
15547 for (loc = tp->loc; loc != NULL; loc = loc->next, n++)
15548 if (!loc->enabled)
15549 fprintf_unfiltered (fp, "disable $bpnum.%d\n", n);
15550 }
1042e4c0 15551 }
8bf6485c 15552
6149aea9 15553 if (extra_trace_bits && *default_collect)
8bf6485c
SS
15554 fprintf_unfiltered (fp, "set default-collect %s\n", default_collect);
15555
1042e4c0
SS
15556 do_cleanups (cleanup);
15557 if (from_tty)
6149aea9
PA
15558 printf_filtered (_("Saved to file '%s'.\n"), filename);
15559}
15560
15561/* The `save breakpoints' command. */
15562
15563static void
15564save_breakpoints_command (char *args, int from_tty)
15565{
15566 save_breakpoints (args, from_tty, NULL);
15567}
15568
15569/* The `save tracepoints' command. */
15570
15571static void
15572save_tracepoints_command (char *args, int from_tty)
15573{
15574 save_breakpoints (args, from_tty, is_tracepoint);
1042e4c0
SS
15575}
15576
15577/* Create a vector of all tracepoints. */
15578
15579VEC(breakpoint_p) *
eeae04df 15580all_tracepoints (void)
1042e4c0
SS
15581{
15582 VEC(breakpoint_p) *tp_vec = 0;
15583 struct breakpoint *tp;
15584
15585 ALL_TRACEPOINTS (tp)
15586 {
15587 VEC_safe_push (breakpoint_p, tp_vec, tp);
15588 }
15589
15590 return tp_vec;
15591}
15592
c906108c 15593\f
4a64f543
MS
15594/* This help string is used for the break, hbreak, tbreak and thbreak
15595 commands. It is defined as a macro to prevent duplication.
15596 COMMAND should be a string constant containing the name of the
15597 command. */
31e2b00f 15598#define BREAK_ARGS_HELP(command) \
fb7b5af4
SDJ
15599command" [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] [if CONDITION]\n\
15600PROBE_MODIFIER shall be present if the command is to be placed in a\n\
15601probe point. Accepted values are `-probe' (for a generic, automatically\n\
15602guessed probe type) or `-probe-stap' (for a SystemTap probe).\n\
31e2b00f
AS
15603LOCATION may be a line number, function name, or \"*\" and an address.\n\
15604If a line number is specified, break at start of code for that line.\n\
15605If a function is specified, break at start of code for that function.\n\
15606If an address is specified, break at that exact address.\n\
dc10affe
PA
15607With no LOCATION, uses current execution address of the selected\n\
15608stack frame. This is useful for breaking on return to a stack frame.\n\
31e2b00f
AS
15609\n\
15610THREADNUM is the number from \"info threads\".\n\
15611CONDITION is a boolean expression.\n\
15612\n\
d41c0fc8
PA
15613Multiple breakpoints at one place are permitted, and useful if their\n\
15614conditions are different.\n\
31e2b00f
AS
15615\n\
15616Do \"help breakpoints\" for info on other commands dealing with breakpoints."
15617
44feb3ce
TT
15618/* List of subcommands for "catch". */
15619static struct cmd_list_element *catch_cmdlist;
15620
15621/* List of subcommands for "tcatch". */
15622static struct cmd_list_element *tcatch_cmdlist;
15623
9ac4176b 15624void
44feb3ce
TT
15625add_catch_command (char *name, char *docstring,
15626 void (*sfunc) (char *args, int from_tty,
15627 struct cmd_list_element *command),
625e8578 15628 completer_ftype *completer,
44feb3ce
TT
15629 void *user_data_catch,
15630 void *user_data_tcatch)
15631{
15632 struct cmd_list_element *command;
15633
15634 command = add_cmd (name, class_breakpoint, NULL, docstring,
15635 &catch_cmdlist);
15636 set_cmd_sfunc (command, sfunc);
15637 set_cmd_context (command, user_data_catch);
a96d9b2e 15638 set_cmd_completer (command, completer);
44feb3ce
TT
15639
15640 command = add_cmd (name, class_breakpoint, NULL, docstring,
15641 &tcatch_cmdlist);
15642 set_cmd_sfunc (command, sfunc);
15643 set_cmd_context (command, user_data_tcatch);
a96d9b2e 15644 set_cmd_completer (command, completer);
44feb3ce
TT
15645}
15646
6c95b8df 15647static void
a79b8f6e 15648clear_syscall_counts (struct inferior *inf)
6c95b8df 15649{
fa3064dd
YQ
15650 struct catch_syscall_inferior_data *inf_data
15651 = get_catch_syscall_inferior_data (inf);
15652
15653 inf_data->total_syscalls_count = 0;
15654 inf_data->any_syscall_count = 0;
15655 VEC_free (int, inf_data->syscalls_counts);
6c95b8df
PA
15656}
15657
6149aea9
PA
15658static void
15659save_command (char *arg, int from_tty)
15660{
3e43a32a
MS
15661 printf_unfiltered (_("\"save\" must be followed by "
15662 "the name of a save subcommand.\n"));
6149aea9
PA
15663 help_list (save_cmdlist, "save ", -1, gdb_stdout);
15664}
15665
84f4c1fe
PM
15666struct breakpoint *
15667iterate_over_breakpoints (int (*callback) (struct breakpoint *, void *),
15668 void *data)
15669{
35df4500 15670 struct breakpoint *b, *b_tmp;
84f4c1fe 15671
35df4500 15672 ALL_BREAKPOINTS_SAFE (b, b_tmp)
84f4c1fe
PM
15673 {
15674 if ((*callback) (b, data))
15675 return b;
15676 }
15677
15678 return NULL;
15679}
15680
0574c78f
GB
15681/* Zero if any of the breakpoint's locations could be a location where
15682 functions have been inlined, nonzero otherwise. */
15683
15684static int
15685is_non_inline_function (struct breakpoint *b)
15686{
15687 /* The shared library event breakpoint is set on the address of a
15688 non-inline function. */
15689 if (b->type == bp_shlib_event)
15690 return 1;
15691
15692 return 0;
15693}
15694
15695/* Nonzero if the specified PC cannot be a location where functions
15696 have been inlined. */
15697
15698int
09ac7c10
TT
15699pc_at_non_inline_function (struct address_space *aspace, CORE_ADDR pc,
15700 const struct target_waitstatus *ws)
0574c78f
GB
15701{
15702 struct breakpoint *b;
15703 struct bp_location *bl;
15704
15705 ALL_BREAKPOINTS (b)
15706 {
15707 if (!is_non_inline_function (b))
15708 continue;
15709
15710 for (bl = b->loc; bl != NULL; bl = bl->next)
15711 {
15712 if (!bl->shlib_disabled
09ac7c10 15713 && bpstat_check_location (bl, aspace, pc, ws))
0574c78f
GB
15714 return 1;
15715 }
15716 }
15717
15718 return 0;
15719}
15720
2060206e
PA
15721void
15722initialize_breakpoint_ops (void)
15723{
15724 static int initialized = 0;
15725
15726 struct breakpoint_ops *ops;
15727
15728 if (initialized)
15729 return;
15730 initialized = 1;
15731
15732 /* The breakpoint_ops structure to be inherit by all kinds of
15733 breakpoints (real breakpoints, i.e., user "break" breakpoints,
15734 internal and momentary breakpoints, etc.). */
15735 ops = &bkpt_base_breakpoint_ops;
15736 *ops = base_breakpoint_ops;
15737 ops->re_set = bkpt_re_set;
15738 ops->insert_location = bkpt_insert_location;
15739 ops->remove_location = bkpt_remove_location;
15740 ops->breakpoint_hit = bkpt_breakpoint_hit;
983af33b
SDJ
15741 ops->create_sals_from_address = bkpt_create_sals_from_address;
15742 ops->create_breakpoints_sal = bkpt_create_breakpoints_sal;
15743 ops->decode_linespec = bkpt_decode_linespec;
2060206e
PA
15744
15745 /* The breakpoint_ops structure to be used in regular breakpoints. */
15746 ops = &bkpt_breakpoint_ops;
15747 *ops = bkpt_base_breakpoint_ops;
15748 ops->re_set = bkpt_re_set;
15749 ops->resources_needed = bkpt_resources_needed;
15750 ops->print_it = bkpt_print_it;
15751 ops->print_mention = bkpt_print_mention;
15752 ops->print_recreate = bkpt_print_recreate;
15753
15754 /* Ranged breakpoints. */
15755 ops = &ranged_breakpoint_ops;
15756 *ops = bkpt_breakpoint_ops;
15757 ops->breakpoint_hit = breakpoint_hit_ranged_breakpoint;
15758 ops->resources_needed = resources_needed_ranged_breakpoint;
15759 ops->print_it = print_it_ranged_breakpoint;
15760 ops->print_one = print_one_ranged_breakpoint;
15761 ops->print_one_detail = print_one_detail_ranged_breakpoint;
15762 ops->print_mention = print_mention_ranged_breakpoint;
15763 ops->print_recreate = print_recreate_ranged_breakpoint;
15764
15765 /* Internal breakpoints. */
15766 ops = &internal_breakpoint_ops;
15767 *ops = bkpt_base_breakpoint_ops;
15768 ops->re_set = internal_bkpt_re_set;
15769 ops->check_status = internal_bkpt_check_status;
15770 ops->print_it = internal_bkpt_print_it;
15771 ops->print_mention = internal_bkpt_print_mention;
15772
15773 /* Momentary breakpoints. */
15774 ops = &momentary_breakpoint_ops;
15775 *ops = bkpt_base_breakpoint_ops;
15776 ops->re_set = momentary_bkpt_re_set;
15777 ops->check_status = momentary_bkpt_check_status;
15778 ops->print_it = momentary_bkpt_print_it;
15779 ops->print_mention = momentary_bkpt_print_mention;
15780
e2e4d78b
JK
15781 /* Momentary breakpoints for bp_longjmp and bp_exception. */
15782 ops = &longjmp_breakpoint_ops;
15783 *ops = momentary_breakpoint_ops;
15784 ops->dtor = longjmp_bkpt_dtor;
15785
55aa24fb
SDJ
15786 /* Probe breakpoints. */
15787 ops = &bkpt_probe_breakpoint_ops;
15788 *ops = bkpt_breakpoint_ops;
15789 ops->insert_location = bkpt_probe_insert_location;
15790 ops->remove_location = bkpt_probe_remove_location;
15791 ops->create_sals_from_address = bkpt_probe_create_sals_from_address;
15792 ops->decode_linespec = bkpt_probe_decode_linespec;
15793
2060206e
PA
15794 /* GNU v3 exception catchpoints. */
15795 ops = &gnu_v3_exception_catchpoint_ops;
15796 *ops = bkpt_breakpoint_ops;
15797 ops->print_it = print_it_exception_catchpoint;
15798 ops->print_one = print_one_exception_catchpoint;
15799 ops->print_mention = print_mention_exception_catchpoint;
15800 ops->print_recreate = print_recreate_exception_catchpoint;
15801
15802 /* Watchpoints. */
15803 ops = &watchpoint_breakpoint_ops;
15804 *ops = base_breakpoint_ops;
3a5c3e22 15805 ops->dtor = dtor_watchpoint;
2060206e
PA
15806 ops->re_set = re_set_watchpoint;
15807 ops->insert_location = insert_watchpoint;
15808 ops->remove_location = remove_watchpoint;
15809 ops->breakpoint_hit = breakpoint_hit_watchpoint;
15810 ops->check_status = check_status_watchpoint;
15811 ops->resources_needed = resources_needed_watchpoint;
15812 ops->works_in_software_mode = works_in_software_mode_watchpoint;
15813 ops->print_it = print_it_watchpoint;
15814 ops->print_mention = print_mention_watchpoint;
15815 ops->print_recreate = print_recreate_watchpoint;
15816
15817 /* Masked watchpoints. */
15818 ops = &masked_watchpoint_breakpoint_ops;
15819 *ops = watchpoint_breakpoint_ops;
15820 ops->insert_location = insert_masked_watchpoint;
15821 ops->remove_location = remove_masked_watchpoint;
15822 ops->resources_needed = resources_needed_masked_watchpoint;
15823 ops->works_in_software_mode = works_in_software_mode_masked_watchpoint;
15824 ops->print_it = print_it_masked_watchpoint;
15825 ops->print_one_detail = print_one_detail_masked_watchpoint;
15826 ops->print_mention = print_mention_masked_watchpoint;
15827 ops->print_recreate = print_recreate_masked_watchpoint;
15828
15829 /* Tracepoints. */
15830 ops = &tracepoint_breakpoint_ops;
15831 *ops = base_breakpoint_ops;
15832 ops->re_set = tracepoint_re_set;
15833 ops->breakpoint_hit = tracepoint_breakpoint_hit;
15834 ops->print_one_detail = tracepoint_print_one_detail;
15835 ops->print_mention = tracepoint_print_mention;
15836 ops->print_recreate = tracepoint_print_recreate;
983af33b
SDJ
15837 ops->create_sals_from_address = tracepoint_create_sals_from_address;
15838 ops->create_breakpoints_sal = tracepoint_create_breakpoints_sal;
15839 ops->decode_linespec = tracepoint_decode_linespec;
15840
55aa24fb
SDJ
15841 /* Probe tracepoints. */
15842 ops = &tracepoint_probe_breakpoint_ops;
15843 *ops = tracepoint_breakpoint_ops;
15844 ops->create_sals_from_address = tracepoint_probe_create_sals_from_address;
15845 ops->decode_linespec = tracepoint_probe_decode_linespec;
15846
983af33b
SDJ
15847 /* Static tracepoints with marker (`-m'). */
15848 ops = &strace_marker_breakpoint_ops;
15849 *ops = tracepoint_breakpoint_ops;
15850 ops->create_sals_from_address = strace_marker_create_sals_from_address;
15851 ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
15852 ops->decode_linespec = strace_marker_decode_linespec;
2060206e
PA
15853
15854 /* Fork catchpoints. */
15855 ops = &catch_fork_breakpoint_ops;
15856 *ops = base_breakpoint_ops;
15857 ops->insert_location = insert_catch_fork;
15858 ops->remove_location = remove_catch_fork;
15859 ops->breakpoint_hit = breakpoint_hit_catch_fork;
15860 ops->print_it = print_it_catch_fork;
15861 ops->print_one = print_one_catch_fork;
15862 ops->print_mention = print_mention_catch_fork;
15863 ops->print_recreate = print_recreate_catch_fork;
15864
15865 /* Vfork catchpoints. */
15866 ops = &catch_vfork_breakpoint_ops;
15867 *ops = base_breakpoint_ops;
15868 ops->insert_location = insert_catch_vfork;
15869 ops->remove_location = remove_catch_vfork;
15870 ops->breakpoint_hit = breakpoint_hit_catch_vfork;
15871 ops->print_it = print_it_catch_vfork;
15872 ops->print_one = print_one_catch_vfork;
15873 ops->print_mention = print_mention_catch_vfork;
15874 ops->print_recreate = print_recreate_catch_vfork;
15875
15876 /* Exec catchpoints. */
15877 ops = &catch_exec_breakpoint_ops;
15878 *ops = base_breakpoint_ops;
15879 ops->dtor = dtor_catch_exec;
15880 ops->insert_location = insert_catch_exec;
15881 ops->remove_location = remove_catch_exec;
15882 ops->breakpoint_hit = breakpoint_hit_catch_exec;
15883 ops->print_it = print_it_catch_exec;
15884 ops->print_one = print_one_catch_exec;
15885 ops->print_mention = print_mention_catch_exec;
15886 ops->print_recreate = print_recreate_catch_exec;
15887
15888 /* Syscall catchpoints. */
15889 ops = &catch_syscall_breakpoint_ops;
15890 *ops = base_breakpoint_ops;
15891 ops->dtor = dtor_catch_syscall;
15892 ops->insert_location = insert_catch_syscall;
15893 ops->remove_location = remove_catch_syscall;
15894 ops->breakpoint_hit = breakpoint_hit_catch_syscall;
15895 ops->print_it = print_it_catch_syscall;
15896 ops->print_one = print_one_catch_syscall;
15897 ops->print_mention = print_mention_catch_syscall;
15898 ops->print_recreate = print_recreate_catch_syscall;
edcc5120
TT
15899
15900 /* Solib-related catchpoints. */
15901 ops = &catch_solib_breakpoint_ops;
15902 *ops = base_breakpoint_ops;
15903 ops->dtor = dtor_catch_solib;
15904 ops->insert_location = insert_catch_solib;
15905 ops->remove_location = remove_catch_solib;
15906 ops->breakpoint_hit = breakpoint_hit_catch_solib;
15907 ops->check_status = check_status_catch_solib;
15908 ops->print_it = print_it_catch_solib;
15909 ops->print_one = print_one_catch_solib;
15910 ops->print_mention = print_mention_catch_solib;
15911 ops->print_recreate = print_recreate_catch_solib;
e7e0cddf
SS
15912
15913 ops = &dprintf_breakpoint_ops;
15914 *ops = bkpt_base_breakpoint_ops;
15915 ops->re_set = bkpt_re_set;
15916 ops->resources_needed = bkpt_resources_needed;
15917 ops->print_it = bkpt_print_it;
15918 ops->print_mention = bkpt_print_mention;
15919 ops->print_recreate = bkpt_print_recreate;
2060206e
PA
15920}
15921
8bfd80db
YQ
15922/* Chain containing all defined "enable breakpoint" subcommands. */
15923
15924static struct cmd_list_element *enablebreaklist = NULL;
15925
c906108c 15926void
fba45db2 15927_initialize_breakpoint (void)
c906108c
SS
15928{
15929 struct cmd_list_element *c;
15930
2060206e
PA
15931 initialize_breakpoint_ops ();
15932
84acb35a 15933 observer_attach_solib_unloaded (disable_breakpoints_in_unloaded_shlib);
6c95b8df 15934 observer_attach_inferior_exit (clear_syscall_counts);
1f3b5d1b 15935 observer_attach_memory_changed (invalidate_bp_value_on_memory_change);
84acb35a 15936
55aa24fb
SDJ
15937 breakpoint_objfile_key
15938 = register_objfile_data_with_cleanup (NULL, free_breakpoint_probes);
17450429 15939
fa3064dd 15940 catch_syscall_inferior_data
8e260fc0
TT
15941 = register_inferior_data_with_cleanup (NULL,
15942 catch_syscall_inferior_data_cleanup);
fa3064dd 15943
c906108c
SS
15944 breakpoint_chain = 0;
15945 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
15946 before a breakpoint is set. */
15947 breakpoint_count = 0;
15948
1042e4c0
SS
15949 tracepoint_count = 0;
15950
1bedd215
AC
15951 add_com ("ignore", class_breakpoint, ignore_command, _("\
15952Set ignore-count of breakpoint number N to COUNT.\n\
15953Usage is `ignore N COUNT'."));
c906108c 15954 if (xdb_commands)
c5aa993b 15955 add_com_alias ("bc", "ignore", class_breakpoint, 1);
c906108c 15956
1bedd215
AC
15957 add_com ("commands", class_breakpoint, commands_command, _("\
15958Set commands to be executed when a breakpoint is hit.\n\
c906108c
SS
15959Give breakpoint number as argument after \"commands\".\n\
15960With no argument, the targeted breakpoint is the last one set.\n\
15961The commands themselves follow starting on the next line.\n\
15962Type a line containing \"end\" to indicate the end of them.\n\
15963Give \"silent\" as the first line to make the breakpoint silent;\n\
1bedd215 15964then no output is printed when it is hit, except what the commands print."));
c906108c 15965
d55637df 15966 c = add_com ("condition", class_breakpoint, condition_command, _("\
1bedd215 15967Specify breakpoint number N to break only if COND is true.\n\
c906108c 15968Usage is `condition N COND', where N is an integer and COND is an\n\
1bedd215 15969expression to be evaluated whenever breakpoint N is reached."));
d55637df 15970 set_cmd_completer (c, condition_completer);
c906108c 15971
1bedd215 15972 c = add_com ("tbreak", class_breakpoint, tbreak_command, _("\
31e2b00f 15973Set a temporary breakpoint.\n\
c906108c
SS
15974Like \"break\" except the breakpoint is only temporary,\n\
15975so it will be deleted when hit. Equivalent to \"break\" followed\n\
31e2b00f
AS
15976by using \"enable delete\" on the breakpoint number.\n\
15977\n"
15978BREAK_ARGS_HELP ("tbreak")));
5ba2abeb 15979 set_cmd_completer (c, location_completer);
c94fdfd0 15980
1bedd215 15981 c = add_com ("hbreak", class_breakpoint, hbreak_command, _("\
a3be7890 15982Set a hardware assisted breakpoint.\n\
c906108c 15983Like \"break\" except the breakpoint requires hardware support,\n\
31e2b00f
AS
15984some target hardware may not have this support.\n\
15985\n"
15986BREAK_ARGS_HELP ("hbreak")));
5ba2abeb 15987 set_cmd_completer (c, location_completer);
c906108c 15988
1bedd215 15989 c = add_com ("thbreak", class_breakpoint, thbreak_command, _("\
31e2b00f 15990Set a temporary hardware assisted breakpoint.\n\
c906108c 15991Like \"hbreak\" except the breakpoint is only temporary,\n\
31e2b00f
AS
15992so it will be deleted when hit.\n\
15993\n"
15994BREAK_ARGS_HELP ("thbreak")));
5ba2abeb 15995 set_cmd_completer (c, location_completer);
c906108c 15996
1bedd215
AC
15997 add_prefix_cmd ("enable", class_breakpoint, enable_command, _("\
15998Enable some breakpoints.\n\
c906108c
SS
15999Give breakpoint numbers (separated by spaces) as arguments.\n\
16000With no subcommand, breakpoints are enabled until you command otherwise.\n\
16001This is used to cancel the effect of the \"disable\" command.\n\
1bedd215 16002With a subcommand you can enable temporarily."),
c906108c
SS
16003 &enablelist, "enable ", 1, &cmdlist);
16004 if (xdb_commands)
1bedd215
AC
16005 add_com ("ab", class_breakpoint, enable_command, _("\
16006Enable some breakpoints.\n\
c906108c
SS
16007Give breakpoint numbers (separated by spaces) as arguments.\n\
16008With no subcommand, breakpoints are enabled until you command otherwise.\n\
16009This is used to cancel the effect of the \"disable\" command.\n\
1bedd215 16010With a subcommand you can enable temporarily."));
c906108c
SS
16011
16012 add_com_alias ("en", "enable", class_breakpoint, 1);
16013
84951ab5 16014 add_prefix_cmd ("breakpoints", class_breakpoint, enable_command, _("\
1bedd215 16015Enable some breakpoints.\n\
c906108c
SS
16016Give breakpoint numbers (separated by spaces) as arguments.\n\
16017This is used to cancel the effect of the \"disable\" command.\n\
1bedd215 16018May be abbreviated to simply \"enable\".\n"),
c5aa993b 16019 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
c906108c 16020
1a966eab
AC
16021 add_cmd ("once", no_class, enable_once_command, _("\
16022Enable breakpoints for one hit. Give breakpoint numbers.\n\
16023If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
c906108c
SS
16024 &enablebreaklist);
16025
1a966eab
AC
16026 add_cmd ("delete", no_class, enable_delete_command, _("\
16027Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
16028If a breakpoint is hit while enabled in this fashion, it is deleted."),
c906108c
SS
16029 &enablebreaklist);
16030
816338b5
SS
16031 add_cmd ("count", no_class, enable_count_command, _("\
16032Enable breakpoints for COUNT hits. Give count and then breakpoint numbers.\n\
16033If a breakpoint is hit while enabled in this fashion,\n\
16034the count is decremented; when it reaches zero, the breakpoint is disabled."),
16035 &enablebreaklist);
16036
1a966eab
AC
16037 add_cmd ("delete", no_class, enable_delete_command, _("\
16038Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
16039If a breakpoint is hit while enabled in this fashion, it is deleted."),
c906108c
SS
16040 &enablelist);
16041
1a966eab
AC
16042 add_cmd ("once", no_class, enable_once_command, _("\
16043Enable breakpoints for one hit. Give breakpoint numbers.\n\
16044If a breakpoint is hit while enabled in this fashion, it becomes disabled."),
816338b5
SS
16045 &enablelist);
16046
16047 add_cmd ("count", no_class, enable_count_command, _("\
16048Enable breakpoints for COUNT hits. Give count and then breakpoint numbers.\n\
16049If a breakpoint is hit while enabled in this fashion,\n\
16050the count is decremented; when it reaches zero, the breakpoint is disabled."),
c906108c
SS
16051 &enablelist);
16052
1bedd215
AC
16053 add_prefix_cmd ("disable", class_breakpoint, disable_command, _("\
16054Disable some breakpoints.\n\
c906108c
SS
16055Arguments are breakpoint numbers with spaces in between.\n\
16056To disable all breakpoints, give no argument.\n\
64b9b334 16057A disabled breakpoint is not forgotten, but has no effect until re-enabled."),
c906108c
SS
16058 &disablelist, "disable ", 1, &cmdlist);
16059 add_com_alias ("dis", "disable", class_breakpoint, 1);
16060 add_com_alias ("disa", "disable", class_breakpoint, 1);
16061 if (xdb_commands)
1bedd215
AC
16062 add_com ("sb", class_breakpoint, disable_command, _("\
16063Disable some breakpoints.\n\
c906108c
SS
16064Arguments are breakpoint numbers with spaces in between.\n\
16065To disable all breakpoints, give no argument.\n\
64b9b334 16066A disabled breakpoint is not forgotten, but has no effect until re-enabled."));
c906108c 16067
1a966eab
AC
16068 add_cmd ("breakpoints", class_alias, disable_command, _("\
16069Disable some breakpoints.\n\
c906108c
SS
16070Arguments are breakpoint numbers with spaces in between.\n\
16071To disable all breakpoints, give no argument.\n\
64b9b334 16072A disabled breakpoint is not forgotten, but has no effect until re-enabled.\n\
1a966eab 16073This command may be abbreviated \"disable\"."),
c906108c
SS
16074 &disablelist);
16075
1bedd215
AC
16076 add_prefix_cmd ("delete", class_breakpoint, delete_command, _("\
16077Delete some breakpoints or auto-display expressions.\n\
c906108c
SS
16078Arguments are breakpoint numbers with spaces in between.\n\
16079To delete all breakpoints, give no argument.\n\
16080\n\
16081Also a prefix command for deletion of other GDB objects.\n\
1bedd215 16082The \"unset\" command is also an alias for \"delete\"."),
c906108c
SS
16083 &deletelist, "delete ", 1, &cmdlist);
16084 add_com_alias ("d", "delete", class_breakpoint, 1);
7f198e01 16085 add_com_alias ("del", "delete", class_breakpoint, 1);
c906108c 16086 if (xdb_commands)
1bedd215
AC
16087 add_com ("db", class_breakpoint, delete_command, _("\
16088Delete some breakpoints.\n\
c906108c 16089Arguments are breakpoint numbers with spaces in between.\n\
1bedd215 16090To delete all breakpoints, give no argument.\n"));
c906108c 16091
1a966eab
AC
16092 add_cmd ("breakpoints", class_alias, delete_command, _("\
16093Delete some breakpoints or auto-display expressions.\n\
c906108c
SS
16094Arguments are breakpoint numbers with spaces in between.\n\
16095To delete all breakpoints, give no argument.\n\
1a966eab 16096This command may be abbreviated \"delete\"."),
c906108c
SS
16097 &deletelist);
16098
1bedd215
AC
16099 add_com ("clear", class_breakpoint, clear_command, _("\
16100Clear breakpoint at specified line or function.\n\
c906108c
SS
16101Argument may be line number, function name, or \"*\" and an address.\n\
16102If line number is specified, all breakpoints in that line are cleared.\n\
16103If function is specified, breakpoints at beginning of function are cleared.\n\
1bedd215
AC
16104If an address is specified, breakpoints at that address are cleared.\n\
16105\n\
16106With no argument, clears all breakpoints in the line that the selected frame\n\
c906108c
SS
16107is executing in.\n\
16108\n\
1bedd215 16109See also the \"delete\" command which clears breakpoints by number."));
a6cc4789 16110 add_com_alias ("cl", "clear", class_breakpoint, 1);
c906108c 16111
1bedd215 16112 c = add_com ("break", class_breakpoint, break_command, _("\
31e2b00f
AS
16113Set breakpoint at specified line or function.\n"
16114BREAK_ARGS_HELP ("break")));
5ba2abeb 16115 set_cmd_completer (c, location_completer);
c94fdfd0 16116
c906108c
SS
16117 add_com_alias ("b", "break", class_run, 1);
16118 add_com_alias ("br", "break", class_run, 1);
16119 add_com_alias ("bre", "break", class_run, 1);
16120 add_com_alias ("brea", "break", class_run, 1);
16121
7681d515
PM
16122 if (xdb_commands)
16123 add_com_alias ("ba", "break", class_breakpoint, 1);
c906108c
SS
16124
16125 if (dbx_commands)
16126 {
1bedd215
AC
16127 add_abbrev_prefix_cmd ("stop", class_breakpoint, stop_command, _("\
16128Break in function/address or break at a line in the current file."),
c5aa993b
JM
16129 &stoplist, "stop ", 1, &cmdlist);
16130 add_cmd ("in", class_breakpoint, stopin_command,
1a966eab 16131 _("Break in function or address."), &stoplist);
c5aa993b 16132 add_cmd ("at", class_breakpoint, stopat_command,
1a966eab 16133 _("Break at a line in the current file."), &stoplist);
1bedd215
AC
16134 add_com ("status", class_info, breakpoints_info, _("\
16135Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
16136The \"Type\" column indicates one of:\n\
16137\tbreakpoint - normal breakpoint\n\
16138\twatchpoint - watchpoint\n\
16139The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
16140the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
16141breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1bedd215
AC
16142address and file/line number respectively.\n\
16143\n\
16144Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
16145are set to the address of the last breakpoint listed unless the command\n\
16146is prefixed with \"server \".\n\n\
c906108c 16147Convenience variable \"$bpnum\" contains the number of the last\n\
1bedd215 16148breakpoint set."));
c906108c
SS
16149 }
16150
1bedd215 16151 add_info ("breakpoints", breakpoints_info, _("\
e5a67952 16152Status of specified breakpoints (all user-settable breakpoints if no argument).\n\
c906108c
SS
16153The \"Type\" column indicates one of:\n\
16154\tbreakpoint - normal breakpoint\n\
16155\twatchpoint - watchpoint\n\
16156The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
16157the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
16158breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1bedd215
AC
16159address and file/line number respectively.\n\
16160\n\
16161Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
16162are set to the address of the last breakpoint listed unless the command\n\
16163is prefixed with \"server \".\n\n\
c906108c 16164Convenience variable \"$bpnum\" contains the number of the last\n\
1bedd215 16165breakpoint set."));
c906108c 16166
6b04bdb7
MS
16167 add_info_alias ("b", "breakpoints", 1);
16168
c906108c 16169 if (xdb_commands)
1bedd215
AC
16170 add_com ("lb", class_breakpoint, breakpoints_info, _("\
16171Status of user-settable breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
16172The \"Type\" column indicates one of:\n\
16173\tbreakpoint - normal breakpoint\n\
16174\twatchpoint - watchpoint\n\
16175The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
16176the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
16177breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1bedd215
AC
16178address and file/line number respectively.\n\
16179\n\
16180Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
16181are set to the address of the last breakpoint listed unless the command\n\
16182is prefixed with \"server \".\n\n\
c906108c 16183Convenience variable \"$bpnum\" contains the number of the last\n\
1bedd215 16184breakpoint set."));
c906108c 16185
1a966eab
AC
16186 add_cmd ("breakpoints", class_maintenance, maintenance_info_breakpoints, _("\
16187Status of all breakpoints, or breakpoint number NUMBER.\n\
c906108c
SS
16188The \"Type\" column indicates one of:\n\
16189\tbreakpoint - normal breakpoint\n\
16190\twatchpoint - watchpoint\n\
16191\tlongjmp - internal breakpoint used to step through longjmp()\n\
16192\tlongjmp resume - internal breakpoint at the target of longjmp()\n\
16193\tuntil - internal breakpoint used by the \"until\" command\n\
1a966eab
AC
16194\tfinish - internal breakpoint used by the \"finish\" command\n\
16195The \"Disp\" column contains one of \"keep\", \"del\", or \"dis\" to indicate\n\
c906108c
SS
16196the disposition of the breakpoint after it gets hit. \"dis\" means that the\n\
16197breakpoint will be disabled. The \"Address\" and \"What\" columns indicate the\n\
1a966eab
AC
16198address and file/line number respectively.\n\
16199\n\
16200Convenience variable \"$_\" and default examine address for \"x\"\n\
d1aa2f50
NR
16201are set to the address of the last breakpoint listed unless the command\n\
16202is prefixed with \"server \".\n\n\
c906108c 16203Convenience variable \"$bpnum\" contains the number of the last\n\
1a966eab 16204breakpoint set."),
c906108c
SS
16205 &maintenanceinfolist);
16206
44feb3ce
TT
16207 add_prefix_cmd ("catch", class_breakpoint, catch_command, _("\
16208Set catchpoints to catch events."),
16209 &catch_cmdlist, "catch ",
16210 0/*allow-unknown*/, &cmdlist);
16211
16212 add_prefix_cmd ("tcatch", class_breakpoint, tcatch_command, _("\
16213Set temporary catchpoints to catch events."),
16214 &tcatch_cmdlist, "tcatch ",
16215 0/*allow-unknown*/, &cmdlist);
16216
16217 /* Add catch and tcatch sub-commands. */
16218 add_catch_command ("catch", _("\
88e7d25d 16219Catch an exception, when caught."),
44feb3ce 16220 catch_catch_command,
a96d9b2e 16221 NULL,
44feb3ce
TT
16222 CATCH_PERMANENT,
16223 CATCH_TEMPORARY);
16224 add_catch_command ("throw", _("\
88e7d25d 16225Catch an exception, when thrown."),
44feb3ce 16226 catch_throw_command,
a96d9b2e 16227 NULL,
44feb3ce
TT
16228 CATCH_PERMANENT,
16229 CATCH_TEMPORARY);
16230 add_catch_command ("fork", _("Catch calls to fork."),
16231 catch_fork_command_1,
a96d9b2e 16232 NULL,
44feb3ce
TT
16233 (void *) (uintptr_t) catch_fork_permanent,
16234 (void *) (uintptr_t) catch_fork_temporary);
16235 add_catch_command ("vfork", _("Catch calls to vfork."),
16236 catch_fork_command_1,
a96d9b2e 16237 NULL,
44feb3ce
TT
16238 (void *) (uintptr_t) catch_vfork_permanent,
16239 (void *) (uintptr_t) catch_vfork_temporary);
16240 add_catch_command ("exec", _("Catch calls to exec."),
16241 catch_exec_command_1,
a96d9b2e
SDJ
16242 NULL,
16243 CATCH_PERMANENT,
16244 CATCH_TEMPORARY);
edcc5120
TT
16245 add_catch_command ("load", _("Catch loads of shared libraries.\n\
16246Usage: catch load [REGEX]\n\
16247If REGEX is given, only stop for libraries matching the regular expression."),
16248 catch_load_command_1,
16249 NULL,
16250 CATCH_PERMANENT,
16251 CATCH_TEMPORARY);
16252 add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
16253Usage: catch unload [REGEX]\n\
16254If REGEX is given, only stop for libraries matching the regular expression."),
16255 catch_unload_command_1,
16256 NULL,
16257 CATCH_PERMANENT,
16258 CATCH_TEMPORARY);
a96d9b2e
SDJ
16259 add_catch_command ("syscall", _("\
16260Catch system calls by their names and/or numbers.\n\
16261Arguments say which system calls to catch. If no arguments\n\
16262are given, every system call will be caught.\n\
16263Arguments, if given, should be one or more system call names\n\
16264(if your system supports that), or system call numbers."),
16265 catch_syscall_command_1,
16266 catch_syscall_completer,
44feb3ce
TT
16267 CATCH_PERMANENT,
16268 CATCH_TEMPORARY);
c5aa993b 16269
1bedd215
AC
16270 c = add_com ("watch", class_breakpoint, watch_command, _("\
16271Set a watchpoint for an expression.\n\
06a64a0b 16272Usage: watch [-l|-location] EXPRESSION\n\
c906108c 16273A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
16274an expression changes.\n\
16275If -l or -location is given, this evaluates EXPRESSION and watches\n\
16276the memory to which it refers."));
65d12d83 16277 set_cmd_completer (c, expression_completer);
c906108c 16278
1bedd215
AC
16279 c = add_com ("rwatch", class_breakpoint, rwatch_command, _("\
16280Set a read watchpoint for an expression.\n\
06a64a0b 16281Usage: rwatch [-l|-location] EXPRESSION\n\
c906108c 16282A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
16283an expression is read.\n\
16284If -l or -location is given, this evaluates EXPRESSION and watches\n\
16285the memory to which it refers."));
65d12d83 16286 set_cmd_completer (c, expression_completer);
c906108c 16287
1bedd215
AC
16288 c = add_com ("awatch", class_breakpoint, awatch_command, _("\
16289Set a watchpoint for an expression.\n\
06a64a0b 16290Usage: awatch [-l|-location] EXPRESSION\n\
c906108c 16291A watchpoint stops execution of your program whenever the value of\n\
06a64a0b
TT
16292an expression is either read or written.\n\
16293If -l or -location is given, this evaluates EXPRESSION and watches\n\
16294the memory to which it refers."));
65d12d83 16295 set_cmd_completer (c, expression_completer);
c906108c 16296
d77f58be 16297 add_info ("watchpoints", watchpoints_info, _("\
e5a67952 16298Status of specified watchpoints (all watchpoints if no argument)."));
c906108c 16299
920d2a44
AC
16300 /* XXX: cagney/2005-02-23: This should be a boolean, and should
16301 respond to changes - contrary to the description. */
85c07804
AC
16302 add_setshow_zinteger_cmd ("can-use-hw-watchpoints", class_support,
16303 &can_use_hw_watchpoints, _("\
16304Set debugger's willingness to use watchpoint hardware."), _("\
16305Show debugger's willingness to use watchpoint hardware."), _("\
c906108c
SS
16306If zero, gdb will not use hardware for new watchpoints, even if\n\
16307such is available. (However, any hardware watchpoints that were\n\
16308created before setting this to nonzero, will continue to use watchpoint\n\
85c07804
AC
16309hardware.)"),
16310 NULL,
920d2a44 16311 show_can_use_hw_watchpoints,
85c07804 16312 &setlist, &showlist);
c906108c
SS
16313
16314 can_use_hw_watchpoints = 1;
fa8d40ab 16315
1042e4c0
SS
16316 /* Tracepoint manipulation commands. */
16317
16318 c = add_com ("trace", class_breakpoint, trace_command, _("\
16319Set a tracepoint at specified line or function.\n\
16320\n"
16321BREAK_ARGS_HELP ("trace") "\n\
16322Do \"help tracepoints\" for info on other tracepoint commands."));
16323 set_cmd_completer (c, location_completer);
16324
16325 add_com_alias ("tp", "trace", class_alias, 0);
16326 add_com_alias ("tr", "trace", class_alias, 1);
16327 add_com_alias ("tra", "trace", class_alias, 1);
16328 add_com_alias ("trac", "trace", class_alias, 1);
16329
7a697b8d
SS
16330 c = add_com ("ftrace", class_breakpoint, ftrace_command, _("\
16331Set a fast tracepoint at specified line or function.\n\
16332\n"
16333BREAK_ARGS_HELP ("ftrace") "\n\
16334Do \"help tracepoints\" for info on other tracepoint commands."));
16335 set_cmd_completer (c, location_completer);
16336
0fb4aa4b
PA
16337 c = add_com ("strace", class_breakpoint, strace_command, _("\
16338Set a static tracepoint at specified line, function or marker.\n\
16339\n\
16340strace [LOCATION] [if CONDITION]\n\
16341LOCATION may be a line number, function name, \"*\" and an address,\n\
16342or -m MARKER_ID.\n\
16343If a line number is specified, probe the marker at start of code\n\
16344for that line. If a function is specified, probe the marker at start\n\
16345of code for that function. If an address is specified, probe the marker\n\
16346at that exact address. If a marker id is specified, probe the marker\n\
16347with that name. With no LOCATION, uses current execution address of\n\
16348the selected stack frame.\n\
16349Static tracepoints accept an extra collect action -- ``collect $_sdata''.\n\
16350This collects arbitrary user data passed in the probe point call to the\n\
16351tracing library. You can inspect it when analyzing the trace buffer,\n\
16352by printing the $_sdata variable like any other convenience variable.\n\
16353\n\
16354CONDITION is a boolean expression.\n\
16355\n\
d41c0fc8
PA
16356Multiple tracepoints at one place are permitted, and useful if their\n\
16357conditions are different.\n\
0fb4aa4b
PA
16358\n\
16359Do \"help breakpoints\" for info on other commands dealing with breakpoints.\n\
16360Do \"help tracepoints\" for info on other tracepoint commands."));
16361 set_cmd_completer (c, location_completer);
16362
1042e4c0 16363 add_info ("tracepoints", tracepoints_info, _("\
e5a67952 16364Status of specified tracepoints (all tracepoints if no argument).\n\
1042e4c0
SS
16365Convenience variable \"$tpnum\" contains the number of the\n\
16366last tracepoint set."));
16367
16368 add_info_alias ("tp", "tracepoints", 1);
16369
16370 add_cmd ("tracepoints", class_trace, delete_trace_command, _("\
16371Delete specified tracepoints.\n\
16372Arguments are tracepoint numbers, separated by spaces.\n\
16373No argument means delete all tracepoints."),
16374 &deletelist);
7e20dfcd 16375 add_alias_cmd ("tr", "tracepoints", class_trace, 1, &deletelist);
1042e4c0
SS
16376
16377 c = add_cmd ("tracepoints", class_trace, disable_trace_command, _("\
16378Disable specified tracepoints.\n\
16379Arguments are tracepoint numbers, separated by spaces.\n\
16380No argument means disable all tracepoints."),
16381 &disablelist);
16382 deprecate_cmd (c, "disable");
16383
16384 c = add_cmd ("tracepoints", class_trace, enable_trace_command, _("\
16385Enable specified tracepoints.\n\
16386Arguments are tracepoint numbers, separated by spaces.\n\
16387No argument means enable all tracepoints."),
16388 &enablelist);
16389 deprecate_cmd (c, "enable");
16390
16391 add_com ("passcount", class_trace, trace_pass_command, _("\
16392Set the passcount for a tracepoint.\n\
16393The trace will end when the tracepoint has been passed 'count' times.\n\
16394Usage: passcount COUNT TPNUM, where TPNUM may also be \"all\";\n\
16395if TPNUM is omitted, passcount refers to the last tracepoint defined."));
16396
6149aea9
PA
16397 add_prefix_cmd ("save", class_breakpoint, save_command,
16398 _("Save breakpoint definitions as a script."),
16399 &save_cmdlist, "save ",
16400 0/*allow-unknown*/, &cmdlist);
16401
16402 c = add_cmd ("breakpoints", class_breakpoint, save_breakpoints_command, _("\
16403Save current breakpoint definitions as a script.\n\
cce7e648 16404This includes all types of breakpoints (breakpoints, watchpoints,\n\
6149aea9
PA
16405catchpoints, tracepoints). Use the 'source' command in another debug\n\
16406session to restore them."),
16407 &save_cmdlist);
16408 set_cmd_completer (c, filename_completer);
16409
16410 c = add_cmd ("tracepoints", class_trace, save_tracepoints_command, _("\
1042e4c0 16411Save current tracepoint definitions as a script.\n\
6149aea9
PA
16412Use the 'source' command in another debug session to restore them."),
16413 &save_cmdlist);
1042e4c0
SS
16414 set_cmd_completer (c, filename_completer);
16415
6149aea9
PA
16416 c = add_com_alias ("save-tracepoints", "save tracepoints", class_trace, 0);
16417 deprecate_cmd (c, "save tracepoints");
16418
1bedd215 16419 add_prefix_cmd ("breakpoint", class_maintenance, set_breakpoint_cmd, _("\
fa8d40ab
JJ
16420Breakpoint specific settings\n\
16421Configure various breakpoint-specific variables such as\n\
1bedd215 16422pending breakpoint behavior"),
fa8d40ab
JJ
16423 &breakpoint_set_cmdlist, "set breakpoint ",
16424 0/*allow-unknown*/, &setlist);
1bedd215 16425 add_prefix_cmd ("breakpoint", class_maintenance, show_breakpoint_cmd, _("\
fa8d40ab
JJ
16426Breakpoint specific settings\n\
16427Configure various breakpoint-specific variables such as\n\
1bedd215 16428pending breakpoint behavior"),
fa8d40ab
JJ
16429 &breakpoint_show_cmdlist, "show breakpoint ",
16430 0/*allow-unknown*/, &showlist);
16431
7915a72c
AC
16432 add_setshow_auto_boolean_cmd ("pending", no_class,
16433 &pending_break_support, _("\
16434Set debugger's behavior regarding pending breakpoints."), _("\
16435Show debugger's behavior regarding pending breakpoints."), _("\
6e1d7d6c
AC
16436If on, an unrecognized breakpoint location will cause gdb to create a\n\
16437pending breakpoint. If off, an unrecognized breakpoint location results in\n\
16438an error. If auto, an unrecognized breakpoint location results in a\n\
7915a72c 16439user-query to see if a pending breakpoint should be created."),
2c5b56ce 16440 NULL,
920d2a44 16441 show_pending_break_support,
6e1d7d6c
AC
16442 &breakpoint_set_cmdlist,
16443 &breakpoint_show_cmdlist);
fa8d40ab
JJ
16444
16445 pending_break_support = AUTO_BOOLEAN_AUTO;
765dc015
VP
16446
16447 add_setshow_boolean_cmd ("auto-hw", no_class,
16448 &automatic_hardware_breakpoints, _("\
16449Set automatic usage of hardware breakpoints."), _("\
16450Show automatic usage of hardware breakpoints."), _("\
16451If set, the debugger will automatically use hardware breakpoints for\n\
16452breakpoints set with \"break\" but falling in read-only memory. If not set,\n\
16453a warning will be emitted for such breakpoints."),
16454 NULL,
16455 show_automatic_hardware_breakpoints,
16456 &breakpoint_set_cmdlist,
16457 &breakpoint_show_cmdlist);
74960c60 16458
72d0e2c5
YQ
16459 add_setshow_auto_boolean_cmd ("always-inserted", class_support,
16460 &always_inserted_mode, _("\
74960c60
VP
16461Set mode for inserting breakpoints."), _("\
16462Show mode for inserting breakpoints."), _("\
33e5cbd6
PA
16463When this mode is off, breakpoints are inserted in inferior when it is\n\
16464resumed, and removed when execution stops. When this mode is on,\n\
16465breakpoints are inserted immediately and removed only when the user\n\
16466deletes the breakpoint. When this mode is auto (which is the default),\n\
16467the behaviour depends on the non-stop setting (see help set non-stop).\n\
16468In this case, if gdb is controlling the inferior in non-stop mode, gdb\n\
16469behaves as if always-inserted mode is on; if gdb is controlling the\n\
16470inferior in all-stop mode, gdb behaves as if always-inserted mode is off."),
72d0e2c5
YQ
16471 NULL,
16472 &show_always_inserted_mode,
16473 &breakpoint_set_cmdlist,
16474 &breakpoint_show_cmdlist);
f1310107 16475
b775012e
LM
16476 add_setshow_enum_cmd ("condition-evaluation", class_breakpoint,
16477 condition_evaluation_enums,
16478 &condition_evaluation_mode_1, _("\
16479Set mode of breakpoint condition evaluation."), _("\
16480Show mode of breakpoint condition evaluation."), _("\
d1cda5d9 16481When this is set to \"host\", breakpoint conditions will be\n\
b775012e
LM
16482evaluated on the host's side by GDB. When it is set to \"target\",\n\
16483breakpoint conditions will be downloaded to the target (if the target\n\
16484supports such feature) and conditions will be evaluated on the target's side.\n\
16485If this is set to \"auto\" (default), this will be automatically set to\n\
16486\"target\" if it supports condition evaluation, otherwise it will\n\
16487be set to \"gdb\""),
16488 &set_condition_evaluation_mode,
16489 &show_condition_evaluation_mode,
16490 &breakpoint_set_cmdlist,
16491 &breakpoint_show_cmdlist);
16492
f1310107
TJB
16493 add_com ("break-range", class_breakpoint, break_range_command, _("\
16494Set a breakpoint for an address range.\n\
16495break-range START-LOCATION, END-LOCATION\n\
16496where START-LOCATION and END-LOCATION can be one of the following:\n\
16497 LINENUM, for that line in the current file,\n\
16498 FILE:LINENUM, for that line in that file,\n\
16499 +OFFSET, for that number of lines after the current line\n\
16500 or the start of the range\n\
16501 FUNCTION, for the first line in that function,\n\
16502 FILE:FUNCTION, to distinguish among like-named static functions.\n\
16503 *ADDRESS, for the instruction at that address.\n\
16504\n\
16505The breakpoint will stop execution of the inferior whenever it executes\n\
16506an instruction at any address within the [START-LOCATION, END-LOCATION]\n\
16507range (including START-LOCATION and END-LOCATION)."));
16508
e7e0cddf
SS
16509 c = add_com ("dprintf", class_breakpoint, dprintf_command, _("\
16510Set a dynamic printf at specified line or function.\n\
16511dprintf location,format string,arg1,arg2,...\n\
16512location may be a line number, function name, or \"*\" and an address.\n\
16513If a line number is specified, break at start of code for that line.\n\
16514If a function is specified, break at start of code for that function.\n\
16515"));
16516 set_cmd_completer (c, location_completer);
16517
16518 add_setshow_enum_cmd ("dprintf-style", class_support,
16519 dprintf_style_enums, &dprintf_style, _("\
16520Set the style of usage for dynamic printf."), _("\
16521Show the style of usage for dynamic printf."), _("\
16522This setting chooses how GDB will do a dynamic printf.\n\
16523If the value is \"gdb\", then the printing is done by GDB to its own\n\
16524console, as with the \"printf\" command.\n\
16525If the value is \"call\", the print is done by calling a function in your\n\
16526program; by default printf(), but you can choose a different function or\n\
16527output stream by setting dprintf-function and dprintf-channel."),
16528 update_dprintf_commands, NULL,
16529 &setlist, &showlist);
16530
16531 dprintf_function = xstrdup ("printf");
16532 add_setshow_string_cmd ("dprintf-function", class_support,
16533 &dprintf_function, _("\
16534Set the function to use for dynamic printf"), _("\
16535Show the function to use for dynamic printf"), NULL,
16536 update_dprintf_commands, NULL,
16537 &setlist, &showlist);
16538
16539 dprintf_channel = xstrdup ("");
16540 add_setshow_string_cmd ("dprintf-channel", class_support,
16541 &dprintf_channel, _("\
16542Set the channel to use for dynamic printf"), _("\
16543Show the channel to use for dynamic printf"), NULL,
16544 update_dprintf_commands, NULL,
16545 &setlist, &showlist);
16546
d3ce09f5
SS
16547 add_setshow_boolean_cmd ("disconnected-dprintf", no_class,
16548 &disconnected_dprintf, _("\
16549Set whether dprintf continues after GDB disconnects."), _("\
16550Show whether dprintf continues after GDB disconnects."), _("\
16551Use this to let dprintf commands continue to hit and produce output\n\
16552even if GDB disconnects or detaches from the target."),
16553 NULL,
16554 NULL,
16555 &setlist, &showlist);
16556
16557 add_com ("agent-printf", class_vars, agent_printf_command, _("\
16558agent-printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
16559(target agent only) This is useful for formatted output in user-defined commands."));
16560
765dc015 16561 automatic_hardware_breakpoints = 1;
f3b1572e
PA
16562
16563 observer_attach_about_to_proceed (breakpoint_about_to_proceed);
c906108c 16564}
This page took 2.360605 seconds and 4 git commands to generate.