[PATCH 30/57][Arm][GAS] Add support for MVE instructions: vqmovnt, vqmovnb, vqmovunt...
[binutils-gdb.git] / gdb / probe.c
blob7bc75d8e879bd8cd0932827716cec46c1d13f6d1
1 /* Generic static probe support for GDB.
3 Copyright (C) 2012-2019 Free Software Foundation, Inc.
5 This file is part of GDB.
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
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
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.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "defs.h"
21 #include "probe.h"
22 #include "command.h"
23 #include "cli/cli-cmds.h"
24 #include "cli/cli-utils.h"
25 #include "objfiles.h"
26 #include "symtab.h"
27 #include "progspace.h"
28 #include "filenames.h"
29 #include "linespec.h"
30 #include "gdb_regex.h"
31 #include "frame.h"
32 #include "arch-utils.h"
33 #include "value.h"
34 #include "ax.h"
35 #include "ax-gdb.h"
36 #include "location.h"
37 #include <ctype.h>
38 #include <algorithm>
39 #include "common/gdb_optional.h"
41 /* Class that implements the static probe methods for "any" probe. */
43 class any_static_probe_ops : public static_probe_ops
45 public:
46 /* See probe.h. */
47 bool is_linespec (const char **linespecp) const override;
49 /* See probe.h. */
50 void get_probes (std::vector<std::unique_ptr<probe>> *probesp,
51 struct objfile *objfile) const override;
53 /* See probe.h. */
54 const char *type_name () const override;
56 /* See probe.h. */
57 std::vector<struct info_probe_column> gen_info_probes_table_header
58 () const override;
61 /* Static operations associated with a generic probe. */
63 const any_static_probe_ops any_static_probe_ops {};
65 /* A helper for parse_probes that decodes a probe specification in
66 SEARCH_PSPACE. It appends matching SALs to RESULT. */
68 static void
69 parse_probes_in_pspace (const static_probe_ops *spops,
70 struct program_space *search_pspace,
71 const char *objfile_namestr,
72 const char *provider,
73 const char *name,
74 std::vector<symtab_and_line> *result)
76 for (objfile *objfile : search_pspace->objfiles ())
78 if (!objfile->sf || !objfile->sf->sym_probe_fns)
79 continue;
81 if (objfile_namestr
82 && FILENAME_CMP (objfile_name (objfile), objfile_namestr) != 0
83 && FILENAME_CMP (lbasename (objfile_name (objfile)),
84 objfile_namestr) != 0)
85 continue;
87 const std::vector<std::unique_ptr<probe>> &probes
88 = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
90 for (auto &p : probes)
92 if (spops != &any_static_probe_ops && p->get_static_ops () != spops)
93 continue;
95 if (provider != NULL && p->get_provider () != provider)
96 continue;
98 if (p->get_name () != name)
99 continue;
101 symtab_and_line sal;
102 sal.pc = p->get_relocated_address (objfile);
103 sal.explicit_pc = 1;
104 sal.section = find_pc_overlay (sal.pc);
105 sal.pspace = search_pspace;
106 sal.prob = p.get ();
107 sal.objfile = objfile;
109 result->push_back (std::move (sal));
114 /* See definition in probe.h. */
116 std::vector<symtab_and_line>
117 parse_probes (const struct event_location *location,
118 struct program_space *search_pspace,
119 struct linespec_result *canonical)
121 char *arg_end, *arg;
122 char *objfile_namestr = NULL, *provider = NULL, *name, *p;
123 const char *arg_start, *cs;
125 gdb_assert (event_location_type (location) == PROBE_LOCATION);
126 arg_start = get_probe_location (location);
128 cs = arg_start;
129 const static_probe_ops *spops = probe_linespec_to_static_ops (&cs);
130 if (spops == NULL)
131 error (_("'%s' is not a probe linespec"), arg_start);
133 arg = (char *) cs;
134 arg = skip_spaces (arg);
135 if (!*arg)
136 error (_("argument to `%s' missing"), arg_start);
138 arg_end = skip_to_space (arg);
140 /* We make a copy here so we can write over parts with impunity. */
141 std::string copy (arg, arg_end - arg);
142 arg = &copy[0];
144 /* Extract each word from the argument, separated by ":"s. */
145 p = strchr (arg, ':');
146 if (p == NULL)
148 /* This is `-p name'. */
149 name = arg;
151 else
153 char *hold = p + 1;
155 *p = '\0';
156 p = strchr (hold, ':');
157 if (p == NULL)
159 /* This is `-p provider:name'. */
160 provider = arg;
161 name = hold;
163 else
165 /* This is `-p objfile:provider:name'. */
166 *p = '\0';
167 objfile_namestr = arg;
168 provider = hold;
169 name = p + 1;
173 if (*name == '\0')
174 error (_("no probe name specified"));
175 if (provider && *provider == '\0')
176 error (_("invalid provider name"));
177 if (objfile_namestr && *objfile_namestr == '\0')
178 error (_("invalid objfile name"));
180 std::vector<symtab_and_line> result;
181 if (search_pspace != NULL)
183 parse_probes_in_pspace (spops, search_pspace, objfile_namestr,
184 provider, name, &result);
186 else
188 struct program_space *pspace;
190 ALL_PSPACES (pspace)
191 parse_probes_in_pspace (spops, pspace, objfile_namestr,
192 provider, name, &result);
195 if (result.empty ())
197 throw_error (NOT_FOUND_ERROR,
198 _("No probe matching objfile=`%s', provider=`%s', name=`%s'"),
199 objfile_namestr ? objfile_namestr : _("<any>"),
200 provider ? provider : _("<any>"),
201 name);
204 if (canonical)
206 std::string canon (arg_start, arg_end - arg_start);
207 canonical->special_display = 1;
208 canonical->pre_expanded = 1;
209 canonical->location = new_probe_location (canon.c_str ());
212 return result;
215 /* See definition in probe.h. */
217 std::vector<probe *>
218 find_probes_in_objfile (struct objfile *objfile, const char *provider,
219 const char *name)
221 std::vector<probe *> result;
223 if (!objfile->sf || !objfile->sf->sym_probe_fns)
224 return result;
226 const std::vector<std::unique_ptr<probe>> &probes
227 = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
228 for (auto &p : probes)
230 if (p->get_provider () != provider)
231 continue;
233 if (p->get_name () != name)
234 continue;
236 result.push_back (p.get ());
239 return result;
242 /* See definition in probe.h. */
244 struct bound_probe
245 find_probe_by_pc (CORE_ADDR pc)
247 struct bound_probe result;
249 result.objfile = NULL;
250 result.prob = NULL;
252 for (objfile *objfile : current_program_space->objfiles ())
254 if (!objfile->sf || !objfile->sf->sym_probe_fns
255 || objfile->sect_index_text == -1)
256 continue;
258 /* If this proves too inefficient, we can replace with a hash. */
259 const std::vector<std::unique_ptr<probe>> &probes
260 = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
261 for (auto &p : probes)
262 if (p->get_relocated_address (objfile) == pc)
264 result.objfile = objfile;
265 result.prob = p.get ();
266 return result;
270 return result;
275 /* Make a vector of probes matching OBJNAME, PROVIDER, and PROBE_NAME.
276 If SPOPS is not &any_static_probe_ops, only probes related to this
277 specific static probe ops will match. Each argument is a regexp,
278 or NULL, which matches anything. */
280 static std::vector<bound_probe>
281 collect_probes (const std::string &objname, const std::string &provider,
282 const std::string &probe_name, const static_probe_ops *spops)
284 std::vector<bound_probe> result;
285 gdb::optional<compiled_regex> obj_pat, prov_pat, probe_pat;
287 if (!provider.empty ())
288 prov_pat.emplace (provider.c_str (), REG_NOSUB,
289 _("Invalid provider regexp"));
290 if (!probe_name.empty ())
291 probe_pat.emplace (probe_name.c_str (), REG_NOSUB,
292 _("Invalid probe regexp"));
293 if (!objname.empty ())
294 obj_pat.emplace (objname.c_str (), REG_NOSUB,
295 _("Invalid object file regexp"));
297 for (objfile *objfile : current_program_space->objfiles ())
299 if (! objfile->sf || ! objfile->sf->sym_probe_fns)
300 continue;
302 if (obj_pat)
304 if (obj_pat->exec (objfile_name (objfile), 0, NULL, 0) != 0)
305 continue;
308 const std::vector<std::unique_ptr<probe>> &probes
309 = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
311 for (auto &p : probes)
313 if (spops != &any_static_probe_ops && p->get_static_ops () != spops)
314 continue;
316 if (prov_pat
317 && prov_pat->exec (p->get_provider ().c_str (), 0, NULL, 0) != 0)
318 continue;
320 if (probe_pat
321 && probe_pat->exec (p->get_name ().c_str (), 0, NULL, 0) != 0)
322 continue;
324 result.emplace_back (p.get (), objfile);
328 return result;
331 /* A qsort comparison function for bound_probe_s objects. */
333 static bool
334 compare_probes (const bound_probe &a, const bound_probe &b)
336 int v;
338 v = a.prob->get_provider ().compare (b.prob->get_provider ());
339 if (v != 0)
340 return v < 0;
342 v = a.prob->get_name ().compare (b.prob->get_name ());
343 if (v != 0)
344 return v < 0;
346 if (a.prob->get_address () != b.prob->get_address ())
347 return a.prob->get_address () < b.prob->get_address ();
349 return strcmp (objfile_name (a.objfile), objfile_name (b.objfile)) < 0;
352 /* Helper function that generate entries in the ui_out table being
353 crafted by `info_probes_for_ops'. */
355 static void
356 gen_ui_out_table_header_info (const std::vector<bound_probe> &probes,
357 const static_probe_ops *spops)
359 /* `headings' refers to the names of the columns when printing `info
360 probes'. */
361 gdb_assert (spops != NULL);
363 std::vector<struct info_probe_column> headings
364 = spops->gen_info_probes_table_header ();
366 for (const info_probe_column &column : headings)
368 size_t size_max = strlen (column.print_name);
370 for (const bound_probe &probe : probes)
372 /* `probe_fields' refers to the values of each new field that this
373 probe will display. */
375 if (probe.prob->get_static_ops () != spops)
376 continue;
378 std::vector<const char *> probe_fields
379 = probe.prob->gen_info_probes_table_values ();
381 gdb_assert (probe_fields.size () == headings.size ());
383 for (const char *val : probe_fields)
385 /* It is valid to have a NULL value here, which means that the
386 backend does not have something to write and this particular
387 field should be skipped. */
388 if (val == NULL)
389 continue;
391 size_max = std::max (strlen (val), size_max);
395 current_uiout->table_header (size_max, ui_left,
396 column.field_name, column.print_name);
400 /* Helper function to print not-applicable strings for all the extra
401 columns defined in a static_probe_ops. */
403 static void
404 print_ui_out_not_applicables (const static_probe_ops *spops)
406 std::vector<struct info_probe_column> headings
407 = spops->gen_info_probes_table_header ();
409 for (const info_probe_column &column : headings)
410 current_uiout->field_string (column.field_name, _("n/a"));
413 /* Helper function to print extra information about a probe and an objfile
414 represented by PROBE. */
416 static void
417 print_ui_out_info (probe *probe)
419 /* `values' refers to the actual values of each new field in the output
420 of `info probe'. `headings' refers to the names of each new field. */
421 gdb_assert (probe != NULL);
422 std::vector<struct info_probe_column> headings
423 = probe->get_static_ops ()->gen_info_probes_table_header ();
424 std::vector<const char *> values
425 = probe->gen_info_probes_table_values ();
427 gdb_assert (headings.size () == values.size ());
429 for (int ix = 0; ix < headings.size (); ++ix)
431 struct info_probe_column column = headings[ix];
432 const char *val = values[ix];
434 if (val == NULL)
435 current_uiout->field_skip (column.field_name);
436 else
437 current_uiout->field_string (column.field_name, val);
441 /* Helper function that returns the number of extra fields which POPS will
442 need. */
444 static int
445 get_number_extra_fields (const static_probe_ops *spops)
447 return spops->gen_info_probes_table_header ().size ();
450 /* Helper function that returns true if there is a probe in PROBES
451 featuring the given SPOPS. It returns false otherwise. */
453 static bool
454 exists_probe_with_spops (const std::vector<bound_probe> &probes,
455 const static_probe_ops *spops)
457 for (const bound_probe &probe : probes)
458 if (probe.prob->get_static_ops () == spops)
459 return true;
461 return false;
464 /* Helper function that parses a probe linespec of the form [PROVIDER
465 [PROBE [OBJNAME]]] from the provided string STR. */
467 static void
468 parse_probe_linespec (const char *str, std::string *provider,
469 std::string *probe_name, std::string *objname)
471 *probe_name = *objname = "";
473 *provider = extract_arg (&str);
474 if (!provider->empty ())
476 *probe_name = extract_arg (&str);
477 if (!probe_name->empty ())
478 *objname = extract_arg (&str);
482 /* See comment in probe.h. */
484 void
485 info_probes_for_spops (const char *arg, int from_tty,
486 const static_probe_ops *spops)
488 std::string provider, probe_name, objname;
489 int any_found;
490 int ui_out_extra_fields = 0;
491 size_t size_addr;
492 size_t size_name = strlen ("Name");
493 size_t size_objname = strlen ("Object");
494 size_t size_provider = strlen ("Provider");
495 size_t size_type = strlen ("Type");
496 struct gdbarch *gdbarch = get_current_arch ();
498 parse_probe_linespec (arg, &provider, &probe_name, &objname);
500 std::vector<bound_probe> probes
501 = collect_probes (objname, provider, probe_name, spops);
503 if (spops == &any_static_probe_ops)
505 /* If SPOPS is &any_static_probe_ops, it means the user has
506 requested a "simple" `info probes', i.e., she wants to print
507 all information about all probes. For that, we have to
508 identify how many extra fields we will need to add in the
509 ui_out table.
511 To do that, we iterate over all static_probe_ops, querying
512 each one about its extra fields, and incrementing
513 `ui_out_extra_fields' to reflect that number. But note that
514 we ignore the static_probe_ops for which no probes are
515 defined with the given search criteria. */
517 for (const static_probe_ops *po : all_static_probe_ops)
518 if (exists_probe_with_spops (probes, po))
519 ui_out_extra_fields += get_number_extra_fields (po);
521 else
522 ui_out_extra_fields = get_number_extra_fields (spops);
525 ui_out_emit_table table_emitter (current_uiout,
526 5 + ui_out_extra_fields,
527 probes.size (), "StaticProbes");
529 std::sort (probes.begin (), probes.end (), compare_probes);
531 /* What's the size of an address in our architecture? */
532 size_addr = gdbarch_addr_bit (gdbarch) == 64 ? 18 : 10;
534 /* Determining the maximum size of each field (`type', `provider',
535 `name' and `objname'). */
536 for (const bound_probe &probe : probes)
538 const char *probe_type = probe.prob->get_static_ops ()->type_name ();
540 size_type = std::max (strlen (probe_type), size_type);
541 size_name = std::max (probe.prob->get_name ().size (), size_name);
542 size_provider = std::max (probe.prob->get_provider ().size (),
543 size_provider);
544 size_objname = std::max (strlen (objfile_name (probe.objfile)),
545 size_objname);
548 current_uiout->table_header (size_type, ui_left, "type", _("Type"));
549 current_uiout->table_header (size_provider, ui_left, "provider",
550 _("Provider"));
551 current_uiout->table_header (size_name, ui_left, "name", _("Name"));
552 current_uiout->table_header (size_addr, ui_left, "addr", _("Where"));
554 if (spops == &any_static_probe_ops)
556 /* We have to generate the table header for each new probe type
557 that we will print. Note that this excludes probe types not
558 having any defined probe with the search criteria. */
559 for (const static_probe_ops *po : all_static_probe_ops)
560 if (exists_probe_with_spops (probes, po))
561 gen_ui_out_table_header_info (probes, po);
563 else
564 gen_ui_out_table_header_info (probes, spops);
566 current_uiout->table_header (size_objname, ui_left, "object", _("Object"));
567 current_uiout->table_body ();
569 for (const bound_probe &probe : probes)
571 const char *probe_type = probe.prob->get_static_ops ()->type_name ();
573 ui_out_emit_tuple tuple_emitter (current_uiout, "probe");
575 current_uiout->field_string ("type", probe_type);
576 current_uiout->field_string ("provider",
577 probe.prob->get_provider ().c_str ());
578 current_uiout->field_string ("name", probe.prob->get_name ().c_str ());
579 current_uiout->field_core_addr ("addr", probe.prob->get_gdbarch (),
580 probe.prob->get_relocated_address
581 (probe.objfile));
583 if (spops == &any_static_probe_ops)
585 for (const static_probe_ops *po : all_static_probe_ops)
587 if (probe.prob->get_static_ops () == po)
588 print_ui_out_info (probe.prob);
589 else if (exists_probe_with_spops (probes, po))
590 print_ui_out_not_applicables (po);
593 else
594 print_ui_out_info (probe.prob);
596 current_uiout->field_string ("object",
597 objfile_name (probe.objfile));
598 current_uiout->text ("\n");
601 any_found = !probes.empty ();
604 if (!any_found)
605 current_uiout->message (_("No probes matched.\n"));
608 /* Implementation of the `info probes' command. */
610 static void
611 info_probes_command (const char *arg, int from_tty)
613 info_probes_for_spops (arg, from_tty, &any_static_probe_ops);
616 /* Implementation of the `enable probes' command. */
618 static void
619 enable_probes_command (const char *arg, int from_tty)
621 std::string provider, probe_name, objname;
623 parse_probe_linespec ((const char *) arg, &provider, &probe_name, &objname);
625 std::vector<bound_probe> probes
626 = collect_probes (objname, provider, probe_name, &any_static_probe_ops);
627 if (probes.empty ())
629 current_uiout->message (_("No probes matched.\n"));
630 return;
633 /* Enable the selected probes, provided their backends support the
634 notion of enabling a probe. */
635 for (const bound_probe &probe: probes)
637 if (probe.prob->get_static_ops ()->can_enable ())
639 probe.prob->enable ();
640 current_uiout->message (_("Probe %s:%s enabled.\n"),
641 probe.prob->get_provider ().c_str (),
642 probe.prob->get_name ().c_str ());
644 else
645 current_uiout->message (_("Probe %s:%s cannot be enabled.\n"),
646 probe.prob->get_provider ().c_str (),
647 probe.prob->get_name ().c_str ());
651 /* Implementation of the `disable probes' command. */
653 static void
654 disable_probes_command (const char *arg, int from_tty)
656 std::string provider, probe_name, objname;
658 parse_probe_linespec ((const char *) arg, &provider, &probe_name, &objname);
660 std::vector<bound_probe> probes
661 = collect_probes (objname, provider, probe_name, &any_static_probe_ops);
662 if (probes.empty ())
664 current_uiout->message (_("No probes matched.\n"));
665 return;
668 /* Disable the selected probes, provided their backends support the
669 notion of enabling a probe. */
670 for (const bound_probe &probe : probes)
672 if (probe.prob->get_static_ops ()->can_enable ())
674 probe.prob->disable ();
675 current_uiout->message (_("Probe %s:%s disabled.\n"),
676 probe.prob->get_provider ().c_str (),
677 probe.prob->get_name ().c_str ());
679 else
680 current_uiout->message (_("Probe %s:%s cannot be disabled.\n"),
681 probe.prob->get_provider ().c_str (),
682 probe.prob->get_name ().c_str ());
686 /* See comments in probe.h. */
688 struct value *
689 probe_safe_evaluate_at_pc (struct frame_info *frame, unsigned n)
691 struct bound_probe probe;
692 unsigned n_args;
694 probe = find_probe_by_pc (get_frame_pc (frame));
695 if (!probe.prob)
696 return NULL;
698 n_args = probe.prob->get_argument_count (frame);
699 if (n >= n_args)
700 return NULL;
702 return probe.prob->evaluate_argument (n, frame);
705 /* See comment in probe.h. */
707 const struct static_probe_ops *
708 probe_linespec_to_static_ops (const char **linespecp)
710 for (const static_probe_ops *ops : all_static_probe_ops)
711 if (ops->is_linespec (linespecp))
712 return ops;
714 return NULL;
717 /* See comment in probe.h. */
720 probe_is_linespec_by_keyword (const char **linespecp, const char *const *keywords)
722 const char *s = *linespecp;
723 const char *const *csp;
725 for (csp = keywords; *csp; csp++)
727 const char *keyword = *csp;
728 size_t len = strlen (keyword);
730 if (strncmp (s, keyword, len) == 0 && isspace (s[len]))
732 *linespecp += len + 1;
733 return 1;
737 return 0;
740 /* Implementation of `is_linespec' method. */
742 bool
743 any_static_probe_ops::is_linespec (const char **linespecp) const
745 static const char *const keywords[] = { "-p", "-probe", NULL };
747 return probe_is_linespec_by_keyword (linespecp, keywords);
750 /* Implementation of 'get_probes' method. */
752 void
753 any_static_probe_ops::get_probes (std::vector<std::unique_ptr<probe>> *probesp,
754 struct objfile *objfile) const
756 /* No probes can be provided by this dummy backend. */
759 /* Implementation of the 'type_name' method. */
761 const char *
762 any_static_probe_ops::type_name () const
764 return NULL;
767 /* Implementation of the 'gen_info_probes_table_header' method. */
769 std::vector<struct info_probe_column>
770 any_static_probe_ops::gen_info_probes_table_header () const
772 return std::vector<struct info_probe_column> ();
775 /* See comments in probe.h. */
777 struct cmd_list_element **
778 info_probes_cmdlist_get (void)
780 static struct cmd_list_element *info_probes_cmdlist;
782 if (info_probes_cmdlist == NULL)
783 add_prefix_cmd ("probes", class_info, info_probes_command,
784 _("\
785 Show available static probes.\n\
786 Usage: info probes [all|TYPE [ARGS]]\n\
787 TYPE specifies the type of the probe, and can be one of the following:\n\
788 - stap\n\
789 If you specify TYPE, there may be additional arguments needed by the\n\
790 subcommand.\n\
791 If you do not specify any argument, or specify `all', then the command\n\
792 will show information about all types of probes."),
793 &info_probes_cmdlist, "info probes ",
794 0/*allow-unknown*/, &infolist);
796 return &info_probes_cmdlist;
801 /* This is called to compute the value of one of the $_probe_arg*
802 convenience variables. */
804 static struct value *
805 compute_probe_arg (struct gdbarch *arch, struct internalvar *ivar,
806 void *data)
808 struct frame_info *frame = get_selected_frame (_("No frame selected"));
809 CORE_ADDR pc = get_frame_pc (frame);
810 int sel = (int) (uintptr_t) data;
811 struct bound_probe pc_probe;
812 unsigned n_args;
814 /* SEL == -1 means "_probe_argc". */
815 gdb_assert (sel >= -1);
817 pc_probe = find_probe_by_pc (pc);
818 if (pc_probe.prob == NULL)
819 error (_("No probe at PC %s"), core_addr_to_string (pc));
821 n_args = pc_probe.prob->get_argument_count (frame);
822 if (sel == -1)
823 return value_from_longest (builtin_type (arch)->builtin_int, n_args);
825 if (sel >= n_args)
826 error (_("Invalid probe argument %d -- probe has %u arguments available"),
827 sel, n_args);
829 return pc_probe.prob->evaluate_argument (sel, frame);
832 /* This is called to compile one of the $_probe_arg* convenience
833 variables into an agent expression. */
835 static void
836 compile_probe_arg (struct internalvar *ivar, struct agent_expr *expr,
837 struct axs_value *value, void *data)
839 CORE_ADDR pc = expr->scope;
840 int sel = (int) (uintptr_t) data;
841 struct bound_probe pc_probe;
842 int n_args;
843 struct frame_info *frame = get_selected_frame (NULL);
845 /* SEL == -1 means "_probe_argc". */
846 gdb_assert (sel >= -1);
848 pc_probe = find_probe_by_pc (pc);
849 if (pc_probe.prob == NULL)
850 error (_("No probe at PC %s"), core_addr_to_string (pc));
852 n_args = pc_probe.prob->get_argument_count (frame);
854 if (sel == -1)
856 value->kind = axs_rvalue;
857 value->type = builtin_type (expr->gdbarch)->builtin_int;
858 ax_const_l (expr, n_args);
859 return;
862 gdb_assert (sel >= 0);
863 if (sel >= n_args)
864 error (_("Invalid probe argument %d -- probe has %d arguments available"),
865 sel, n_args);
867 pc_probe.prob->compile_to_ax (expr, value, sel);
870 static const struct internalvar_funcs probe_funcs =
872 compute_probe_arg,
873 compile_probe_arg,
874 NULL
878 std::vector<const static_probe_ops *> all_static_probe_ops;
880 void
881 _initialize_probe (void)
883 all_static_probe_ops.push_back (&any_static_probe_ops);
885 create_internalvar_type_lazy ("_probe_argc", &probe_funcs,
886 (void *) (uintptr_t) -1);
887 create_internalvar_type_lazy ("_probe_arg0", &probe_funcs,
888 (void *) (uintptr_t) 0);
889 create_internalvar_type_lazy ("_probe_arg1", &probe_funcs,
890 (void *) (uintptr_t) 1);
891 create_internalvar_type_lazy ("_probe_arg2", &probe_funcs,
892 (void *) (uintptr_t) 2);
893 create_internalvar_type_lazy ("_probe_arg3", &probe_funcs,
894 (void *) (uintptr_t) 3);
895 create_internalvar_type_lazy ("_probe_arg4", &probe_funcs,
896 (void *) (uintptr_t) 4);
897 create_internalvar_type_lazy ("_probe_arg5", &probe_funcs,
898 (void *) (uintptr_t) 5);
899 create_internalvar_type_lazy ("_probe_arg6", &probe_funcs,
900 (void *) (uintptr_t) 6);
901 create_internalvar_type_lazy ("_probe_arg7", &probe_funcs,
902 (void *) (uintptr_t) 7);
903 create_internalvar_type_lazy ("_probe_arg8", &probe_funcs,
904 (void *) (uintptr_t) 8);
905 create_internalvar_type_lazy ("_probe_arg9", &probe_funcs,
906 (void *) (uintptr_t) 9);
907 create_internalvar_type_lazy ("_probe_arg10", &probe_funcs,
908 (void *) (uintptr_t) 10);
909 create_internalvar_type_lazy ("_probe_arg11", &probe_funcs,
910 (void *) (uintptr_t) 11);
912 add_cmd ("all", class_info, info_probes_command,
913 _("\
914 Show information about all type of probes."),
915 info_probes_cmdlist_get ());
917 add_cmd ("probes", class_breakpoint, enable_probes_command, _("\
918 Enable probes.\n\
919 Usage: enable probes [PROVIDER [NAME [OBJECT]]]\n\
920 Each argument is a regular expression, used to select probes.\n\
921 PROVIDER matches probe provider names.\n\
922 NAME matches the probe names.\n\
923 OBJECT matches the executable or shared library name.\n\
924 If you do not specify any argument then the command will enable\n\
925 all defined probes."),
926 &enablelist);
928 add_cmd ("probes", class_breakpoint, disable_probes_command, _("\
929 Disable probes.\n\
930 Usage: disable probes [PROVIDER [NAME [OBJECT]]]\n\
931 Each argument is a regular expression, used to select probes.\n\
932 PROVIDER matches probe provider names.\n\
933 NAME matches the probe names.\n\
934 OBJECT matches the executable or shared library name.\n\
935 If you do not specify any argument then the command will disable\n\
936 all defined probes."),
937 &disablelist);