1 /* Generic static probe support for GDB.
3 Copyright (C) 2012-2017 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/>. */
23 #include "cli/cli-cmds.h"
24 #include "cli/cli-utils.h"
27 #include "progspace.h"
28 #include "filenames.h"
30 #include "gdb_regex.h"
32 #include "arch-utils.h"
39 #include "common/gdb_optional.h"
41 typedef struct bound_probe bound_probe_s;
42 DEF_VEC_O (bound_probe_s);
46 /* A helper for parse_probes that decodes a probe specification in
47 SEARCH_PSPACE. It appends matching SALs to RESULT. */
50 parse_probes_in_pspace (const struct probe_ops *probe_ops,
51 struct program_space *search_pspace,
52 const char *objfile_namestr,
55 std::vector<symtab_and_line> *result)
57 struct objfile *objfile;
59 ALL_PSPACE_OBJFILES (search_pspace, objfile)
61 VEC (probe_p) *probes;
65 if (!objfile->sf || !objfile->sf->sym_probe_fns)
69 && FILENAME_CMP (objfile_name (objfile), objfile_namestr) != 0
70 && FILENAME_CMP (lbasename (objfile_name (objfile)),
71 objfile_namestr) != 0)
74 probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
76 for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
78 if (probe_ops != &probe_ops_any && probe->pops != probe_ops)
81 if (provider && strcmp (probe->provider, provider) != 0)
84 if (strcmp (probe->name, name) != 0)
88 sal.pc = get_probe_address (probe, objfile);
90 sal.section = find_pc_overlay (sal.pc);
91 sal.pspace = search_pspace;
93 sal.objfile = objfile;
95 result->push_back (std::move (sal));
100 /* See definition in probe.h. */
102 std::vector<symtab_and_line>
103 parse_probes (const struct event_location *location,
104 struct program_space *search_pspace,
105 struct linespec_result *canonical)
108 char *objfile_namestr = NULL, *provider = NULL, *name, *p;
109 struct cleanup *cleanup;
110 const struct probe_ops *probe_ops;
111 const char *arg_start, *cs;
113 gdb_assert (event_location_type (location) == PROBE_LOCATION);
114 arg_start = get_probe_location (location);
117 probe_ops = probe_linespec_to_ops (&cs);
118 if (probe_ops == NULL)
119 error (_("'%s' is not a probe linespec"), arg_start);
122 arg = skip_spaces (arg);
124 error (_("argument to `%s' missing"), arg_start);
126 arg_end = skip_to_space (arg);
128 /* We make a copy here so we can write over parts with impunity. */
129 arg = savestring (arg, arg_end - arg);
130 cleanup = make_cleanup (xfree, arg);
132 /* Extract each word from the argument, separated by ":"s. */
133 p = strchr (arg, ':');
136 /* This is `-p name'. */
144 p = strchr (hold, ':');
147 /* This is `-p provider:name'. */
153 /* This is `-p objfile:provider:name'. */
155 objfile_namestr = arg;
162 error (_("no probe name specified"));
163 if (provider && *provider == '\0')
164 error (_("invalid provider name"));
165 if (objfile_namestr && *objfile_namestr == '\0')
166 error (_("invalid objfile name"));
168 std::vector<symtab_and_line> result;
169 if (search_pspace != NULL)
171 parse_probes_in_pspace (probe_ops, search_pspace, objfile_namestr,
172 provider, name, &result);
176 struct program_space *pspace;
179 parse_probes_in_pspace (probe_ops, pspace, objfile_namestr,
180 provider, name, &result);
185 throw_error (NOT_FOUND_ERROR,
186 _("No probe matching objfile=`%s', provider=`%s', name=`%s'"),
187 objfile_namestr ? objfile_namestr : _("<any>"),
188 provider ? provider : _("<any>"),
196 canon = savestring (arg_start, arg_end - arg_start);
197 make_cleanup (xfree, canon);
198 canonical->special_display = 1;
199 canonical->pre_expanded = 1;
200 canonical->location = new_probe_location (canon);
203 do_cleanups (cleanup);
208 /* See definition in probe.h. */
211 find_probes_in_objfile (struct objfile *objfile, const char *provider,
214 VEC (probe_p) *probes, *result = NULL;
218 if (!objfile->sf || !objfile->sf->sym_probe_fns)
221 probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
222 for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
224 if (strcmp (probe->provider, provider) != 0)
227 if (strcmp (probe->name, name) != 0)
230 VEC_safe_push (probe_p, result, probe);
236 /* See definition in probe.h. */
239 find_probe_by_pc (CORE_ADDR pc)
241 struct objfile *objfile;
242 struct bound_probe result;
244 result.objfile = NULL;
247 ALL_OBJFILES (objfile)
249 VEC (probe_p) *probes;
253 if (!objfile->sf || !objfile->sf->sym_probe_fns
254 || objfile->sect_index_text == -1)
257 /* If this proves too inefficient, we can replace with a hash. */
258 probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
259 for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
260 if (get_probe_address (probe, objfile) == pc)
262 result.objfile = objfile;
263 result.probe = probe;
273 /* Make a vector of probes matching OBJNAME, PROVIDER, and PROBE_NAME.
274 If POPS is not NULL, only probes of this certain probe_ops will match.
275 Each argument is a regexp, or NULL, which matches anything. */
277 static VEC (bound_probe_s) *
278 collect_probes (const std::string &objname, const std::string &provider,
279 const std::string &probe_name, const struct probe_ops *pops)
281 struct objfile *objfile;
282 VEC (bound_probe_s) *result = NULL;
283 struct cleanup *cleanup;
284 gdb::optional<compiled_regex> obj_pat, prov_pat, probe_pat;
286 cleanup = make_cleanup (VEC_cleanup (bound_probe_s), &result);
288 if (!provider.empty ())
289 prov_pat.emplace (provider.c_str (), REG_NOSUB,
290 _("Invalid provider regexp"));
291 if (!probe_name.empty ())
292 probe_pat.emplace (probe_name.c_str (), REG_NOSUB,
293 _("Invalid probe regexp"));
294 if (!objname.empty ())
295 obj_pat.emplace (objname.c_str (), REG_NOSUB,
296 _("Invalid object file regexp"));
298 ALL_OBJFILES (objfile)
300 VEC (probe_p) *probes;
304 if (! objfile->sf || ! objfile->sf->sym_probe_fns)
309 if (obj_pat->exec (objfile_name (objfile), 0, NULL, 0) != 0)
313 probes = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
315 for (ix = 0; VEC_iterate (probe_p, probes, ix, probe); ix++)
317 struct bound_probe bound;
319 if (pops != NULL && probe->pops != pops)
323 && prov_pat->exec (probe->provider, 0, NULL, 0) != 0)
327 && probe_pat->exec (probe->name, 0, NULL, 0) != 0)
330 bound.objfile = objfile;
332 VEC_safe_push (bound_probe_s, result, &bound);
336 discard_cleanups (cleanup);
340 /* A qsort comparison function for bound_probe_s objects. */
343 compare_probes (const void *a, const void *b)
345 const struct bound_probe *pa = (const struct bound_probe *) a;
346 const struct bound_probe *pb = (const struct bound_probe *) b;
349 v = strcmp (pa->probe->provider, pb->probe->provider);
353 v = strcmp (pa->probe->name, pb->probe->name);
357 if (pa->probe->address < pb->probe->address)
359 if (pa->probe->address > pb->probe->address)
362 return strcmp (objfile_name (pa->objfile), objfile_name (pb->objfile));
365 /* Helper function that generate entries in the ui_out table being
366 crafted by `info_probes_for_ops'. */
369 gen_ui_out_table_header_info (VEC (bound_probe_s) *probes,
370 const struct probe_ops *p)
372 /* `headings' refers to the names of the columns when printing `info
374 VEC (info_probe_column_s) *headings = NULL;
376 info_probe_column_s *column;
377 size_t headings_size;
380 gdb_assert (p != NULL);
382 if (p->gen_info_probes_table_header == NULL
383 && p->gen_info_probes_table_values == NULL)
386 gdb_assert (p->gen_info_probes_table_header != NULL
387 && p->gen_info_probes_table_values != NULL);
389 c = make_cleanup (VEC_cleanup (info_probe_column_s), &headings);
390 p->gen_info_probes_table_header (&headings);
392 headings_size = VEC_length (info_probe_column_s, headings);
395 VEC_iterate (info_probe_column_s, headings, ix, column);
398 struct bound_probe *probe;
400 size_t size_max = strlen (column->print_name);
402 for (jx = 0; VEC_iterate (bound_probe_s, probes, jx, probe); ++jx)
404 /* `probe_fields' refers to the values of each new field that this
405 probe will display. */
406 VEC (const_char_ptr) *probe_fields = NULL;
411 if (probe->probe->pops != p)
414 c2 = make_cleanup (VEC_cleanup (const_char_ptr), &probe_fields);
415 p->gen_info_probes_table_values (probe->probe, &probe_fields);
417 gdb_assert (VEC_length (const_char_ptr, probe_fields)
420 for (kx = 0; VEC_iterate (const_char_ptr, probe_fields, kx, val);
423 /* It is valid to have a NULL value here, which means that the
424 backend does not have something to write and this particular
425 field should be skipped. */
429 size_max = std::max (strlen (val), size_max);
434 current_uiout->table_header (size_max, ui_left,
435 column->field_name, column->print_name);
441 /* Helper function to print not-applicable strings for all the extra
442 columns defined in a probe_ops. */
445 print_ui_out_not_applicables (const struct probe_ops *pops)
448 VEC (info_probe_column_s) *headings = NULL;
449 info_probe_column_s *column;
452 if (pops->gen_info_probes_table_header == NULL)
455 c = make_cleanup (VEC_cleanup (info_probe_column_s), &headings);
456 pops->gen_info_probes_table_header (&headings);
459 VEC_iterate (info_probe_column_s, headings, ix, column);
461 current_uiout->field_string (column->field_name, _("n/a"));
466 /* Helper function to print extra information about a probe and an objfile
467 represented by PROBE. */
470 print_ui_out_info (struct probe *probe)
474 /* `values' refers to the actual values of each new field in the output
475 of `info probe'. `headings' refers to the names of each new field. */
476 VEC (const_char_ptr) *values = NULL;
477 VEC (info_probe_column_s) *headings = NULL;
478 info_probe_column_s *column;
481 gdb_assert (probe != NULL);
482 gdb_assert (probe->pops != NULL);
484 if (probe->pops->gen_info_probes_table_header == NULL
485 && probe->pops->gen_info_probes_table_values == NULL)
488 gdb_assert (probe->pops->gen_info_probes_table_header != NULL
489 && probe->pops->gen_info_probes_table_values != NULL);
491 c = make_cleanup (VEC_cleanup (info_probe_column_s), &headings);
492 make_cleanup (VEC_cleanup (const_char_ptr), &values);
494 probe->pops->gen_info_probes_table_header (&headings);
495 probe->pops->gen_info_probes_table_values (probe, &values);
497 gdb_assert (VEC_length (info_probe_column_s, headings)
498 == VEC_length (const_char_ptr, values));
501 VEC_iterate (info_probe_column_s, headings, ix, column);
504 const char *val = VEC_index (const_char_ptr, values, j++);
507 current_uiout->field_skip (column->field_name);
509 current_uiout->field_string (column->field_name, val);
515 /* Helper function that returns the number of extra fields which POPS will
519 get_number_extra_fields (const struct probe_ops *pops)
521 VEC (info_probe_column_s) *headings = NULL;
525 if (pops->gen_info_probes_table_header == NULL)
528 c = make_cleanup (VEC_cleanup (info_probe_column_s), &headings);
529 pops->gen_info_probes_table_header (&headings);
531 n = VEC_length (info_probe_column_s, headings);
538 /* Helper function that returns 1 if there is a probe in PROBES
539 featuring the given POPS. It returns 0 otherwise. */
542 exists_probe_with_pops (VEC (bound_probe_s) *probes,
543 const struct probe_ops *pops)
545 struct bound_probe *probe;
548 for (ix = 0; VEC_iterate (bound_probe_s, probes, ix, probe); ++ix)
549 if (probe->probe->pops == pops)
555 /* Helper function that parses a probe linespec of the form [PROVIDER
556 [PROBE [OBJNAME]]] from the provided string STR. */
559 parse_probe_linespec (const char *str, std::string *provider,
560 std::string *probe_name, std::string *objname)
562 *probe_name = *objname = "";
564 *provider = extract_arg (&str);
565 if (!provider->empty ())
567 *probe_name = extract_arg (&str);
568 if (!probe_name->empty ())
569 *objname = extract_arg (&str);
573 /* See comment in probe.h. */
576 info_probes_for_ops (const char *arg, int from_tty,
577 const struct probe_ops *pops)
579 std::string provider, probe_name, objname;
580 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
581 VEC (bound_probe_s) *probes;
583 int ui_out_extra_fields = 0;
585 size_t size_name = strlen ("Name");
586 size_t size_objname = strlen ("Object");
587 size_t size_provider = strlen ("Provider");
588 size_t size_type = strlen ("Type");
589 struct bound_probe *probe;
590 struct gdbarch *gdbarch = get_current_arch ();
592 parse_probe_linespec (arg, &provider, &probe_name, &objname);
594 probes = collect_probes (objname, provider, probe_name, pops);
595 make_cleanup (VEC_cleanup (probe_p), &probes);
599 const struct probe_ops *po;
602 /* If the probe_ops is NULL, it means the user has requested a "simple"
603 `info probes', i.e., she wants to print all information about all
604 probes. For that, we have to identify how many extra fields we will
605 need to add in the ui_out table.
607 To do that, we iterate over all probe_ops, querying each one about
608 its extra fields, and incrementing `ui_out_extra_fields' to reflect
609 that number. But note that we ignore the probe_ops for which no probes
610 are defined with the given search criteria. */
612 for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po); ++ix)
613 if (exists_probe_with_pops (probes, po))
614 ui_out_extra_fields += get_number_extra_fields (po);
617 ui_out_extra_fields = get_number_extra_fields (pops);
620 ui_out_emit_table table_emitter (current_uiout,
621 5 + ui_out_extra_fields,
622 VEC_length (bound_probe_s, probes),
625 if (!VEC_empty (bound_probe_s, probes))
626 qsort (VEC_address (bound_probe_s, probes),
627 VEC_length (bound_probe_s, probes),
628 sizeof (bound_probe_s), compare_probes);
630 /* What's the size of an address in our architecture? */
631 size_addr = gdbarch_addr_bit (gdbarch) == 64 ? 18 : 10;
633 /* Determining the maximum size of each field (`type', `provider',
634 `name' and `objname'). */
635 for (i = 0; VEC_iterate (bound_probe_s, probes, i, probe); ++i)
637 const char *probe_type = probe->probe->pops->type_name (probe->probe);
639 size_type = std::max (strlen (probe_type), size_type);
640 size_name = std::max (strlen (probe->probe->name), size_name);
641 size_provider = std::max (strlen (probe->probe->provider), size_provider);
642 size_objname = std::max (strlen (objfile_name (probe->objfile)),
646 current_uiout->table_header (size_type, ui_left, "type", _("Type"));
647 current_uiout->table_header (size_provider, ui_left, "provider",
649 current_uiout->table_header (size_name, ui_left, "name", _("Name"));
650 current_uiout->table_header (size_addr, ui_left, "addr", _("Where"));
654 const struct probe_ops *po;
657 /* We have to generate the table header for each new probe type
658 that we will print. Note that this excludes probe types not
659 having any defined probe with the search criteria. */
660 for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po); ++ix)
661 if (exists_probe_with_pops (probes, po))
662 gen_ui_out_table_header_info (probes, po);
665 gen_ui_out_table_header_info (probes, pops);
667 current_uiout->table_header (size_objname, ui_left, "object", _("Object"));
668 current_uiout->table_body ();
670 for (i = 0; VEC_iterate (bound_probe_s, probes, i, probe); ++i)
672 const char *probe_type = probe->probe->pops->type_name (probe->probe);
674 ui_out_emit_tuple tuple_emitter (current_uiout, "probe");
676 current_uiout->field_string ("type",probe_type);
677 current_uiout->field_string ("provider", probe->probe->provider);
678 current_uiout->field_string ("name", probe->probe->name);
679 current_uiout->field_core_addr (
680 "addr", probe->probe->arch,
681 get_probe_address (probe->probe, probe->objfile));
685 const struct probe_ops *po;
688 for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, po);
690 if (probe->probe->pops == po)
691 print_ui_out_info (probe->probe);
692 else if (exists_probe_with_pops (probes, po))
693 print_ui_out_not_applicables (po);
696 print_ui_out_info (probe->probe);
698 current_uiout->field_string ("object",
699 objfile_name (probe->objfile));
700 current_uiout->text ("\n");
703 any_found = !VEC_empty (bound_probe_s, probes);
705 do_cleanups (cleanup);
708 current_uiout->message (_("No probes matched.\n"));
711 /* Implementation of the `info probes' command. */
714 info_probes_command (char *arg, int from_tty)
716 info_probes_for_ops (arg, from_tty, NULL);
719 /* Implementation of the `enable probes' command. */
722 enable_probes_command (char *arg, int from_tty)
724 std::string provider, probe_name, objname;
725 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
726 VEC (bound_probe_s) *probes;
727 struct bound_probe *probe;
730 parse_probe_linespec ((const char *) arg, &provider, &probe_name, &objname);
732 probes = collect_probes (objname, provider, probe_name, NULL);
733 if (VEC_empty (bound_probe_s, probes))
735 current_uiout->message (_("No probes matched.\n"));
736 do_cleanups (cleanup);
740 /* Enable the selected probes, provided their backends support the
741 notion of enabling a probe. */
742 for (i = 0; VEC_iterate (bound_probe_s, probes, i, probe); ++i)
744 const struct probe_ops *pops = probe->probe->pops;
746 if (pops->enable_probe != NULL)
748 pops->enable_probe (probe->probe);
749 current_uiout->message (_("Probe %s:%s enabled.\n"),
750 probe->probe->provider, probe->probe->name);
753 current_uiout->message (_("Probe %s:%s cannot be enabled.\n"),
754 probe->probe->provider, probe->probe->name);
757 do_cleanups (cleanup);
760 /* Implementation of the `disable probes' command. */
763 disable_probes_command (char *arg, int from_tty)
765 std::string provider, probe_name, objname;
766 struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
767 VEC (bound_probe_s) *probes;
768 struct bound_probe *probe;
771 parse_probe_linespec ((const char *) arg, &provider, &probe_name, &objname);
773 probes = collect_probes (objname, provider, probe_name, NULL /* pops */);
774 if (VEC_empty (bound_probe_s, probes))
776 current_uiout->message (_("No probes matched.\n"));
777 do_cleanups (cleanup);
781 /* Disable the selected probes, provided their backends support the
782 notion of enabling a probe. */
783 for (i = 0; VEC_iterate (bound_probe_s, probes, i, probe); ++i)
785 const struct probe_ops *pops = probe->probe->pops;
787 if (pops->disable_probe != NULL)
789 pops->disable_probe (probe->probe);
790 current_uiout->message (_("Probe %s:%s disabled.\n"),
791 probe->probe->provider, probe->probe->name);
794 current_uiout->message (_("Probe %s:%s cannot be disabled.\n"),
795 probe->probe->provider, probe->probe->name);
798 do_cleanups (cleanup);
801 /* See comments in probe.h. */
804 get_probe_address (struct probe *probe, struct objfile *objfile)
806 return probe->pops->get_probe_address (probe, objfile);
809 /* See comments in probe.h. */
812 get_probe_argument_count (struct probe *probe, struct frame_info *frame)
814 return probe->pops->get_probe_argument_count (probe, frame);
817 /* See comments in probe.h. */
820 can_evaluate_probe_arguments (struct probe *probe)
822 return probe->pops->can_evaluate_probe_arguments (probe);
825 /* See comments in probe.h. */
828 evaluate_probe_argument (struct probe *probe, unsigned n,
829 struct frame_info *frame)
831 return probe->pops->evaluate_probe_argument (probe, n, frame);
834 /* See comments in probe.h. */
837 probe_safe_evaluate_at_pc (struct frame_info *frame, unsigned n)
839 struct bound_probe probe;
842 probe = find_probe_by_pc (get_frame_pc (frame));
846 n_args = get_probe_argument_count (probe.probe, frame);
850 return evaluate_probe_argument (probe.probe, n, frame);
853 /* See comment in probe.h. */
855 const struct probe_ops *
856 probe_linespec_to_ops (const char **linespecp)
859 const struct probe_ops *probe_ops;
861 for (ix = 0; VEC_iterate (probe_ops_cp, all_probe_ops, ix, probe_ops); ix++)
862 if (probe_ops->is_linespec (linespecp))
868 /* See comment in probe.h. */
871 probe_is_linespec_by_keyword (const char **linespecp, const char *const *keywords)
873 const char *s = *linespecp;
874 const char *const *csp;
876 for (csp = keywords; *csp; csp++)
878 const char *keyword = *csp;
879 size_t len = strlen (keyword);
881 if (strncmp (s, keyword, len) == 0 && isspace (s[len]))
883 *linespecp += len + 1;
891 /* Implementation of `is_linespec' method for `struct probe_ops'. */
894 probe_any_is_linespec (const char **linespecp)
896 static const char *const keywords[] = { "-p", "-probe", NULL };
898 return probe_is_linespec_by_keyword (linespecp, keywords);
901 /* Dummy method used for `probe_ops_any'. */
904 probe_any_get_probes (VEC (probe_p) **probesp, struct objfile *objfile)
906 /* No probes can be provided by this dummy backend. */
909 /* Operations associated with a generic probe. */
911 const struct probe_ops probe_ops_any =
913 probe_any_is_linespec,
914 probe_any_get_probes,
917 /* See comments in probe.h. */
919 struct cmd_list_element **
920 info_probes_cmdlist_get (void)
922 static struct cmd_list_element *info_probes_cmdlist;
924 if (info_probes_cmdlist == NULL)
925 add_prefix_cmd ("probes", class_info, info_probes_command,
927 Show available static probes.\n\
928 Usage: info probes [all|TYPE [ARGS]]\n\
929 TYPE specifies the type of the probe, and can be one of the following:\n\
931 If you specify TYPE, there may be additional arguments needed by the\n\
933 If you do not specify any argument, or specify `all', then the command\n\
934 will show information about all types of probes."),
935 &info_probes_cmdlist, "info probes ",
936 0/*allow-unknown*/, &infolist);
938 return &info_probes_cmdlist;
943 /* This is called to compute the value of one of the $_probe_arg*
944 convenience variables. */
946 static struct value *
947 compute_probe_arg (struct gdbarch *arch, struct internalvar *ivar,
950 struct frame_info *frame = get_selected_frame (_("No frame selected"));
951 CORE_ADDR pc = get_frame_pc (frame);
952 int sel = (int) (uintptr_t) data;
953 struct bound_probe pc_probe;
954 const struct sym_probe_fns *pc_probe_fns;
957 /* SEL == -1 means "_probe_argc". */
958 gdb_assert (sel >= -1);
960 pc_probe = find_probe_by_pc (pc);
961 if (pc_probe.probe == NULL)
962 error (_("No probe at PC %s"), core_addr_to_string (pc));
964 n_args = get_probe_argument_count (pc_probe.probe, frame);
966 return value_from_longest (builtin_type (arch)->builtin_int, n_args);
969 error (_("Invalid probe argument %d -- probe has %u arguments available"),
972 return evaluate_probe_argument (pc_probe.probe, sel, frame);
975 /* This is called to compile one of the $_probe_arg* convenience
976 variables into an agent expression. */
979 compile_probe_arg (struct internalvar *ivar, struct agent_expr *expr,
980 struct axs_value *value, void *data)
982 CORE_ADDR pc = expr->scope;
983 int sel = (int) (uintptr_t) data;
984 struct bound_probe pc_probe;
985 const struct sym_probe_fns *pc_probe_fns;
987 struct frame_info *frame = get_selected_frame (NULL);
989 /* SEL == -1 means "_probe_argc". */
990 gdb_assert (sel >= -1);
992 pc_probe = find_probe_by_pc (pc);
993 if (pc_probe.probe == NULL)
994 error (_("No probe at PC %s"), core_addr_to_string (pc));
996 n_args = get_probe_argument_count (pc_probe.probe, frame);
1000 value->kind = axs_rvalue;
1001 value->type = builtin_type (expr->gdbarch)->builtin_int;
1002 ax_const_l (expr, n_args);
1006 gdb_assert (sel >= 0);
1008 error (_("Invalid probe argument %d -- probe has %d arguments available"),
1011 pc_probe.probe->pops->compile_to_ax (pc_probe.probe, expr, value, sel);
1014 static const struct internalvar_funcs probe_funcs =
1022 VEC (probe_ops_cp) *all_probe_ops;
1025 _initialize_probe (void)
1027 VEC_safe_push (probe_ops_cp, all_probe_ops, &probe_ops_any);
1029 create_internalvar_type_lazy ("_probe_argc", &probe_funcs,
1030 (void *) (uintptr_t) -1);
1031 create_internalvar_type_lazy ("_probe_arg0", &probe_funcs,
1032 (void *) (uintptr_t) 0);
1033 create_internalvar_type_lazy ("_probe_arg1", &probe_funcs,
1034 (void *) (uintptr_t) 1);
1035 create_internalvar_type_lazy ("_probe_arg2", &probe_funcs,
1036 (void *) (uintptr_t) 2);
1037 create_internalvar_type_lazy ("_probe_arg3", &probe_funcs,
1038 (void *) (uintptr_t) 3);
1039 create_internalvar_type_lazy ("_probe_arg4", &probe_funcs,
1040 (void *) (uintptr_t) 4);
1041 create_internalvar_type_lazy ("_probe_arg5", &probe_funcs,
1042 (void *) (uintptr_t) 5);
1043 create_internalvar_type_lazy ("_probe_arg6", &probe_funcs,
1044 (void *) (uintptr_t) 6);
1045 create_internalvar_type_lazy ("_probe_arg7", &probe_funcs,
1046 (void *) (uintptr_t) 7);
1047 create_internalvar_type_lazy ("_probe_arg8", &probe_funcs,
1048 (void *) (uintptr_t) 8);
1049 create_internalvar_type_lazy ("_probe_arg9", &probe_funcs,
1050 (void *) (uintptr_t) 9);
1051 create_internalvar_type_lazy ("_probe_arg10", &probe_funcs,
1052 (void *) (uintptr_t) 10);
1053 create_internalvar_type_lazy ("_probe_arg11", &probe_funcs,
1054 (void *) (uintptr_t) 11);
1056 add_cmd ("all", class_info, info_probes_command,
1058 Show information about all type of probes."),
1059 info_probes_cmdlist_get ());
1061 add_cmd ("probes", class_breakpoint, enable_probes_command, _("\
1063 Usage: enable probes [PROVIDER [NAME [OBJECT]]]\n\
1064 Each argument is a regular expression, used to select probes.\n\
1065 PROVIDER matches probe provider names.\n\
1066 NAME matches the probe names.\n\
1067 OBJECT matches the executable or shared library name.\n\
1068 If you do not specify any argument then the command will enable\n\
1069 all defined probes."),
1072 add_cmd ("probes", class_breakpoint, disable_probes_command, _("\
1074 Usage: disable probes [PROVIDER [NAME [OBJECT]]]\n\
1075 Each argument is a regular expression, used to select probes.\n\
1076 PROVIDER matches probe provider names.\n\
1077 NAME matches the probe names.\n\
1078 OBJECT matches the executable or shared library name.\n\
1079 If you do not specify any argument then the command will disable\n\
1080 all defined probes."),