1 /* Generic static probe support for GDB.
3 Copyright (C) 2012-2018 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 /* Class that implements the static probe methods for "any" probe. */
43 class any_static_probe_ops : public static_probe_ops
47 bool is_linespec (const char **linespecp) const override;
50 void get_probes (std::vector<probe *> *probesp,
51 struct objfile *objfile) const override;
54 const char *type_name () const override;
57 std::vector<struct info_probe_column> gen_info_probes_table_header
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. */
69 parse_probes_in_pspace (const static_probe_ops *spops,
70 struct program_space *search_pspace,
71 const char *objfile_namestr,
74 std::vector<symtab_and_line> *result)
76 struct objfile *objfile;
78 ALL_PSPACE_OBJFILES (search_pspace, objfile)
80 if (!objfile->sf || !objfile->sf->sym_probe_fns)
84 && FILENAME_CMP (objfile_name (objfile), objfile_namestr) != 0
85 && FILENAME_CMP (lbasename (objfile_name (objfile)),
86 objfile_namestr) != 0)
89 const std::vector<probe *> &probes
90 = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
92 for (probe *p : probes)
94 if (spops != &any_static_probe_ops && p->get_static_ops () != spops)
97 if (provider != NULL && p->get_provider () != provider)
100 if (p->get_name () != name)
104 sal.pc = p->get_relocated_address (objfile);
106 sal.section = find_pc_overlay (sal.pc);
107 sal.pspace = search_pspace;
109 sal.objfile = objfile;
111 result->push_back (std::move (sal));
116 /* See definition in probe.h. */
118 std::vector<symtab_and_line>
119 parse_probes (const struct event_location *location,
120 struct program_space *search_pspace,
121 struct linespec_result *canonical)
124 char *objfile_namestr = NULL, *provider = NULL, *name, *p;
125 const char *arg_start, *cs;
127 gdb_assert (event_location_type (location) == PROBE_LOCATION);
128 arg_start = get_probe_location (location);
131 const static_probe_ops *spops = probe_linespec_to_static_ops (&cs);
133 error (_("'%s' is not a probe linespec"), arg_start);
136 arg = skip_spaces (arg);
138 error (_("argument to `%s' missing"), arg_start);
140 arg_end = skip_to_space (arg);
142 /* We make a copy here so we can write over parts with impunity. */
143 std::string copy (arg, arg_end - arg);
146 /* Extract each word from the argument, separated by ":"s. */
147 p = strchr (arg, ':');
150 /* This is `-p name'. */
158 p = strchr (hold, ':');
161 /* This is `-p provider:name'. */
167 /* This is `-p objfile:provider:name'. */
169 objfile_namestr = arg;
176 error (_("no probe name specified"));
177 if (provider && *provider == '\0')
178 error (_("invalid provider name"));
179 if (objfile_namestr && *objfile_namestr == '\0')
180 error (_("invalid objfile name"));
182 std::vector<symtab_and_line> result;
183 if (search_pspace != NULL)
185 parse_probes_in_pspace (spops, search_pspace, objfile_namestr,
186 provider, name, &result);
190 struct program_space *pspace;
193 parse_probes_in_pspace (spops, pspace, objfile_namestr,
194 provider, name, &result);
199 throw_error (NOT_FOUND_ERROR,
200 _("No probe matching objfile=`%s', provider=`%s', name=`%s'"),
201 objfile_namestr ? objfile_namestr : _("<any>"),
202 provider ? provider : _("<any>"),
208 std::string canon (arg_start, arg_end - arg_start);
209 canonical->special_display = 1;
210 canonical->pre_expanded = 1;
211 canonical->location = new_probe_location (canon.c_str ());
217 /* See definition in probe.h. */
220 find_probes_in_objfile (struct objfile *objfile, const char *provider,
223 std::vector<probe *> result;
225 if (!objfile->sf || !objfile->sf->sym_probe_fns)
228 const std::vector<probe *> &probes
229 = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
230 for (probe *p : probes)
232 if (p->get_provider () != provider)
235 if (p->get_name () != name)
238 result.push_back (p);
244 /* See definition in probe.h. */
247 find_probe_by_pc (CORE_ADDR pc)
249 struct objfile *objfile;
250 struct bound_probe result;
252 result.objfile = NULL;
255 ALL_OBJFILES (objfile)
257 if (!objfile->sf || !objfile->sf->sym_probe_fns
258 || objfile->sect_index_text == -1)
261 /* If this proves too inefficient, we can replace with a hash. */
262 const std::vector<probe *> &probes
263 = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
264 for (probe *p : probes)
265 if (p->get_relocated_address (objfile) == pc)
267 result.objfile = objfile;
278 /* Make a vector of probes matching OBJNAME, PROVIDER, and PROBE_NAME.
279 If SPOPS is not &any_static_probe_ops, only probes related to this
280 specific static probe ops will match. Each argument is a regexp,
281 or NULL, which matches anything. */
283 static std::vector<bound_probe>
284 collect_probes (const std::string &objname, const std::string &provider,
285 const std::string &probe_name, const static_probe_ops *spops)
287 struct objfile *objfile;
288 std::vector<bound_probe> result;
289 gdb::optional<compiled_regex> obj_pat, prov_pat, probe_pat;
291 if (!provider.empty ())
292 prov_pat.emplace (provider.c_str (), REG_NOSUB,
293 _("Invalid provider regexp"));
294 if (!probe_name.empty ())
295 probe_pat.emplace (probe_name.c_str (), REG_NOSUB,
296 _("Invalid probe regexp"));
297 if (!objname.empty ())
298 obj_pat.emplace (objname.c_str (), REG_NOSUB,
299 _("Invalid object file regexp"));
301 ALL_OBJFILES (objfile)
303 if (! objfile->sf || ! objfile->sf->sym_probe_fns)
308 if (obj_pat->exec (objfile_name (objfile), 0, NULL, 0) != 0)
312 const std::vector<probe *> &probes
313 = objfile->sf->sym_probe_fns->sym_get_probes (objfile);
315 for (probe *p : probes)
317 if (spops != &any_static_probe_ops && p->get_static_ops () != spops)
321 && prov_pat->exec (p->get_provider ().c_str (), 0, NULL, 0) != 0)
325 && probe_pat->exec (p->get_name ().c_str (), 0, NULL, 0) != 0)
328 result.emplace_back (p, objfile);
335 /* A qsort comparison function for bound_probe_s objects. */
338 compare_probes (const bound_probe &a, const bound_probe &b)
342 v = a.prob->get_provider ().compare (b.prob->get_provider ());
346 v = a.prob->get_name ().compare (b.prob->get_name ());
350 if (a.prob->get_address () != b.prob->get_address ())
351 return a.prob->get_address () < b.prob->get_address ();
353 return strcmp (objfile_name (a.objfile), objfile_name (b.objfile)) < 0;
356 /* Helper function that generate entries in the ui_out table being
357 crafted by `info_probes_for_ops'. */
360 gen_ui_out_table_header_info (const std::vector<bound_probe> &probes,
361 const static_probe_ops *spops)
363 /* `headings' refers to the names of the columns when printing `info
365 gdb_assert (spops != NULL);
367 std::vector<struct info_probe_column> headings
368 = spops->gen_info_probes_table_header ();
370 for (const info_probe_column &column : headings)
372 size_t size_max = strlen (column.print_name);
374 for (const bound_probe &probe : probes)
376 /* `probe_fields' refers to the values of each new field that this
377 probe will display. */
379 if (probe.prob->get_static_ops () != spops)
382 std::vector<const char *> probe_fields
383 = probe.prob->gen_info_probes_table_values ();
385 gdb_assert (probe_fields.size () == headings.size ());
387 for (const char *val : probe_fields)
389 /* It is valid to have a NULL value here, which means that the
390 backend does not have something to write and this particular
391 field should be skipped. */
395 size_max = std::max (strlen (val), size_max);
399 current_uiout->table_header (size_max, ui_left,
400 column.field_name, column.print_name);
404 /* Helper function to print not-applicable strings for all the extra
405 columns defined in a static_probe_ops. */
408 print_ui_out_not_applicables (const static_probe_ops *spops)
410 std::vector<struct info_probe_column> headings
411 = spops->gen_info_probes_table_header ();
413 for (const info_probe_column &column : headings)
414 current_uiout->field_string (column.field_name, _("n/a"));
417 /* Helper function to print extra information about a probe and an objfile
418 represented by PROBE. */
421 print_ui_out_info (probe *probe)
423 /* `values' refers to the actual values of each new field in the output
424 of `info probe'. `headings' refers to the names of each new field. */
425 gdb_assert (probe != NULL);
426 std::vector<struct info_probe_column> headings
427 = probe->get_static_ops ()->gen_info_probes_table_header ();
428 std::vector<const char *> values
429 = probe->gen_info_probes_table_values ();
431 gdb_assert (headings.size () == values.size ());
433 for (int ix = 0; ix < headings.size (); ++ix)
435 struct info_probe_column column = headings[ix];
436 const char *val = values[ix];
439 current_uiout->field_skip (column.field_name);
441 current_uiout->field_string (column.field_name, val);
445 /* Helper function that returns the number of extra fields which POPS will
449 get_number_extra_fields (const static_probe_ops *spops)
451 return spops->gen_info_probes_table_header ().size ();
454 /* Helper function that returns true if there is a probe in PROBES
455 featuring the given SPOPS. It returns false otherwise. */
458 exists_probe_with_spops (const std::vector<bound_probe> &probes,
459 const static_probe_ops *spops)
461 for (const bound_probe &probe : probes)
462 if (probe.prob->get_static_ops () == spops)
468 /* Helper function that parses a probe linespec of the form [PROVIDER
469 [PROBE [OBJNAME]]] from the provided string STR. */
472 parse_probe_linespec (const char *str, std::string *provider,
473 std::string *probe_name, std::string *objname)
475 *probe_name = *objname = "";
477 *provider = extract_arg (&str);
478 if (!provider->empty ())
480 *probe_name = extract_arg (&str);
481 if (!probe_name->empty ())
482 *objname = extract_arg (&str);
486 /* See comment in probe.h. */
489 info_probes_for_spops (const char *arg, int from_tty,
490 const static_probe_ops *spops)
492 std::string provider, probe_name, objname;
494 int ui_out_extra_fields = 0;
496 size_t size_name = strlen ("Name");
497 size_t size_objname = strlen ("Object");
498 size_t size_provider = strlen ("Provider");
499 size_t size_type = strlen ("Type");
500 struct gdbarch *gdbarch = get_current_arch ();
502 parse_probe_linespec (arg, &provider, &probe_name, &objname);
504 std::vector<bound_probe> probes
505 = collect_probes (objname, provider, probe_name, spops);
507 if (spops == &any_static_probe_ops)
509 /* If SPOPS is &any_static_probe_ops, it means the user has
510 requested a "simple" `info probes', i.e., she wants to print
511 all information about all probes. For that, we have to
512 identify how many extra fields we will need to add in the
515 To do that, we iterate over all static_probe_ops, querying
516 each one about its extra fields, and incrementing
517 `ui_out_extra_fields' to reflect that number. But note that
518 we ignore the static_probe_ops for which no probes are
519 defined with the given search criteria. */
521 for (const static_probe_ops *po : all_static_probe_ops)
522 if (exists_probe_with_spops (probes, po))
523 ui_out_extra_fields += get_number_extra_fields (po);
526 ui_out_extra_fields = get_number_extra_fields (spops);
529 ui_out_emit_table table_emitter (current_uiout,
530 5 + ui_out_extra_fields,
531 probes.size (), "StaticProbes");
533 std::sort (probes.begin (), probes.end (), compare_probes);
535 /* What's the size of an address in our architecture? */
536 size_addr = gdbarch_addr_bit (gdbarch) == 64 ? 18 : 10;
538 /* Determining the maximum size of each field (`type', `provider',
539 `name' and `objname'). */
540 for (const bound_probe &probe : probes)
542 const char *probe_type = probe.prob->get_static_ops ()->type_name ();
544 size_type = std::max (strlen (probe_type), size_type);
545 size_name = std::max (probe.prob->get_name ().size (), size_name);
546 size_provider = std::max (probe.prob->get_provider ().size (),
548 size_objname = std::max (strlen (objfile_name (probe.objfile)),
552 current_uiout->table_header (size_type, ui_left, "type", _("Type"));
553 current_uiout->table_header (size_provider, ui_left, "provider",
555 current_uiout->table_header (size_name, ui_left, "name", _("Name"));
556 current_uiout->table_header (size_addr, ui_left, "addr", _("Where"));
558 if (spops == &any_static_probe_ops)
560 /* We have to generate the table header for each new probe type
561 that we will print. Note that this excludes probe types not
562 having any defined probe with the search criteria. */
563 for (const static_probe_ops *po : all_static_probe_ops)
564 if (exists_probe_with_spops (probes, po))
565 gen_ui_out_table_header_info (probes, po);
568 gen_ui_out_table_header_info (probes, spops);
570 current_uiout->table_header (size_objname, ui_left, "object", _("Object"));
571 current_uiout->table_body ();
573 for (const bound_probe &probe : probes)
575 const char *probe_type = probe.prob->get_static_ops ()->type_name ();
577 ui_out_emit_tuple tuple_emitter (current_uiout, "probe");
579 current_uiout->field_string ("type", probe_type);
580 current_uiout->field_string ("provider",
581 probe.prob->get_provider ().c_str ());
582 current_uiout->field_string ("name", probe.prob->get_name ().c_str ());
583 current_uiout->field_core_addr ("addr", probe.prob->get_gdbarch (),
584 probe.prob->get_relocated_address
587 if (spops == &any_static_probe_ops)
589 for (const static_probe_ops *po : all_static_probe_ops)
591 if (probe.prob->get_static_ops () == po)
592 print_ui_out_info (probe.prob);
593 else if (exists_probe_with_spops (probes, po))
594 print_ui_out_not_applicables (po);
598 print_ui_out_info (probe.prob);
600 current_uiout->field_string ("object",
601 objfile_name (probe.objfile));
602 current_uiout->text ("\n");
605 any_found = !probes.empty ();
609 current_uiout->message (_("No probes matched.\n"));
612 /* Implementation of the `info probes' command. */
615 info_probes_command (const char *arg, int from_tty)
617 info_probes_for_spops (arg, from_tty, &any_static_probe_ops);
620 /* Implementation of the `enable probes' command. */
623 enable_probes_command (const char *arg, int from_tty)
625 std::string provider, probe_name, objname;
627 parse_probe_linespec ((const char *) arg, &provider, &probe_name, &objname);
629 std::vector<bound_probe> probes
630 = collect_probes (objname, provider, probe_name, &any_static_probe_ops);
633 current_uiout->message (_("No probes matched.\n"));
637 /* Enable the selected probes, provided their backends support the
638 notion of enabling a probe. */
639 for (const bound_probe &probe: probes)
641 if (probe.prob->get_static_ops ()->can_enable ())
643 probe.prob->enable ();
644 current_uiout->message (_("Probe %s:%s enabled.\n"),
645 probe.prob->get_provider ().c_str (),
646 probe.prob->get_name ().c_str ());
649 current_uiout->message (_("Probe %s:%s cannot be enabled.\n"),
650 probe.prob->get_provider ().c_str (),
651 probe.prob->get_name ().c_str ());
655 /* Implementation of the `disable probes' command. */
658 disable_probes_command (const char *arg, int from_tty)
660 std::string provider, probe_name, objname;
662 parse_probe_linespec ((const char *) arg, &provider, &probe_name, &objname);
664 std::vector<bound_probe> probes
665 = collect_probes (objname, provider, probe_name, &any_static_probe_ops);
668 current_uiout->message (_("No probes matched.\n"));
672 /* Disable the selected probes, provided their backends support the
673 notion of enabling a probe. */
674 for (const bound_probe &probe : probes)
676 if (probe.prob->get_static_ops ()->can_enable ())
678 probe.prob->disable ();
679 current_uiout->message (_("Probe %s:%s disabled.\n"),
680 probe.prob->get_provider ().c_str (),
681 probe.prob->get_name ().c_str ());
684 current_uiout->message (_("Probe %s:%s cannot be disabled.\n"),
685 probe.prob->get_provider ().c_str (),
686 probe.prob->get_name ().c_str ());
690 /* See comments in probe.h. */
693 probe_safe_evaluate_at_pc (struct frame_info *frame, unsigned n)
695 struct bound_probe probe;
698 probe = find_probe_by_pc (get_frame_pc (frame));
702 n_args = probe.prob->get_argument_count (frame);
706 return probe.prob->evaluate_argument (n, frame);
709 /* See comment in probe.h. */
711 const struct static_probe_ops *
712 probe_linespec_to_static_ops (const char **linespecp)
714 for (const static_probe_ops *ops : all_static_probe_ops)
715 if (ops->is_linespec (linespecp))
721 /* See comment in probe.h. */
724 probe_is_linespec_by_keyword (const char **linespecp, const char *const *keywords)
726 const char *s = *linespecp;
727 const char *const *csp;
729 for (csp = keywords; *csp; csp++)
731 const char *keyword = *csp;
732 size_t len = strlen (keyword);
734 if (strncmp (s, keyword, len) == 0 && isspace (s[len]))
736 *linespecp += len + 1;
744 /* Implementation of `is_linespec' method. */
747 any_static_probe_ops::is_linespec (const char **linespecp) const
749 static const char *const keywords[] = { "-p", "-probe", NULL };
751 return probe_is_linespec_by_keyword (linespecp, keywords);
754 /* Implementation of 'get_probes' method. */
757 any_static_probe_ops::get_probes (std::vector<probe *> *probesp,
758 struct objfile *objfile) const
760 /* No probes can be provided by this dummy backend. */
763 /* Implementation of the 'type_name' method. */
766 any_static_probe_ops::type_name () const
771 /* Implementation of the 'gen_info_probes_table_header' method. */
773 std::vector<struct info_probe_column>
774 any_static_probe_ops::gen_info_probes_table_header () const
776 return std::vector<struct info_probe_column> ();
779 /* See comments in probe.h. */
781 struct cmd_list_element **
782 info_probes_cmdlist_get (void)
784 static struct cmd_list_element *info_probes_cmdlist;
786 if (info_probes_cmdlist == NULL)
787 add_prefix_cmd ("probes", class_info, info_probes_command,
789 Show available static probes.\n\
790 Usage: info probes [all|TYPE [ARGS]]\n\
791 TYPE specifies the type of the probe, and can be one of the following:\n\
793 If you specify TYPE, there may be additional arguments needed by the\n\
795 If you do not specify any argument, or specify `all', then the command\n\
796 will show information about all types of probes."),
797 &info_probes_cmdlist, "info probes ",
798 0/*allow-unknown*/, &infolist);
800 return &info_probes_cmdlist;
805 /* This is called to compute the value of one of the $_probe_arg*
806 convenience variables. */
808 static struct value *
809 compute_probe_arg (struct gdbarch *arch, struct internalvar *ivar,
812 struct frame_info *frame = get_selected_frame (_("No frame selected"));
813 CORE_ADDR pc = get_frame_pc (frame);
814 int sel = (int) (uintptr_t) data;
815 struct bound_probe pc_probe;
818 /* SEL == -1 means "_probe_argc". */
819 gdb_assert (sel >= -1);
821 pc_probe = find_probe_by_pc (pc);
822 if (pc_probe.prob == NULL)
823 error (_("No probe at PC %s"), core_addr_to_string (pc));
825 n_args = pc_probe.prob->get_argument_count (frame);
827 return value_from_longest (builtin_type (arch)->builtin_int, n_args);
830 error (_("Invalid probe argument %d -- probe has %u arguments available"),
833 return pc_probe.prob->evaluate_argument (sel, frame);
836 /* This is called to compile one of the $_probe_arg* convenience
837 variables into an agent expression. */
840 compile_probe_arg (struct internalvar *ivar, struct agent_expr *expr,
841 struct axs_value *value, void *data)
843 CORE_ADDR pc = expr->scope;
844 int sel = (int) (uintptr_t) data;
845 struct bound_probe pc_probe;
847 struct frame_info *frame = get_selected_frame (NULL);
849 /* SEL == -1 means "_probe_argc". */
850 gdb_assert (sel >= -1);
852 pc_probe = find_probe_by_pc (pc);
853 if (pc_probe.prob == NULL)
854 error (_("No probe at PC %s"), core_addr_to_string (pc));
856 n_args = pc_probe.prob->get_argument_count (frame);
860 value->kind = axs_rvalue;
861 value->type = builtin_type (expr->gdbarch)->builtin_int;
862 ax_const_l (expr, n_args);
866 gdb_assert (sel >= 0);
868 error (_("Invalid probe argument %d -- probe has %d arguments available"),
871 pc_probe.prob->compile_to_ax (expr, value, sel);
874 static const struct internalvar_funcs probe_funcs =
882 std::vector<const static_probe_ops *> all_static_probe_ops;
885 _initialize_probe (void)
887 all_static_probe_ops.push_back (&any_static_probe_ops);
889 create_internalvar_type_lazy ("_probe_argc", &probe_funcs,
890 (void *) (uintptr_t) -1);
891 create_internalvar_type_lazy ("_probe_arg0", &probe_funcs,
892 (void *) (uintptr_t) 0);
893 create_internalvar_type_lazy ("_probe_arg1", &probe_funcs,
894 (void *) (uintptr_t) 1);
895 create_internalvar_type_lazy ("_probe_arg2", &probe_funcs,
896 (void *) (uintptr_t) 2);
897 create_internalvar_type_lazy ("_probe_arg3", &probe_funcs,
898 (void *) (uintptr_t) 3);
899 create_internalvar_type_lazy ("_probe_arg4", &probe_funcs,
900 (void *) (uintptr_t) 4);
901 create_internalvar_type_lazy ("_probe_arg5", &probe_funcs,
902 (void *) (uintptr_t) 5);
903 create_internalvar_type_lazy ("_probe_arg6", &probe_funcs,
904 (void *) (uintptr_t) 6);
905 create_internalvar_type_lazy ("_probe_arg7", &probe_funcs,
906 (void *) (uintptr_t) 7);
907 create_internalvar_type_lazy ("_probe_arg8", &probe_funcs,
908 (void *) (uintptr_t) 8);
909 create_internalvar_type_lazy ("_probe_arg9", &probe_funcs,
910 (void *) (uintptr_t) 9);
911 create_internalvar_type_lazy ("_probe_arg10", &probe_funcs,
912 (void *) (uintptr_t) 10);
913 create_internalvar_type_lazy ("_probe_arg11", &probe_funcs,
914 (void *) (uintptr_t) 11);
916 add_cmd ("all", class_info, info_probes_command,
918 Show information about all type of probes."),
919 info_probes_cmdlist_get ());
921 add_cmd ("probes", class_breakpoint, enable_probes_command, _("\
923 Usage: enable probes [PROVIDER [NAME [OBJECT]]]\n\
924 Each argument is a regular expression, used to select probes.\n\
925 PROVIDER matches probe provider names.\n\
926 NAME matches the probe names.\n\
927 OBJECT matches the executable or shared library name.\n\
928 If you do not specify any argument then the command will enable\n\
929 all defined probes."),
932 add_cmd ("probes", class_breakpoint, disable_probes_command, _("\
934 Usage: disable probes [PROVIDER [NAME [OBJECT]]]\n\
935 Each argument is a regular expression, used to select probes.\n\
936 PROVIDER matches probe provider names.\n\
937 NAME matches the probe names.\n\
938 OBJECT matches the executable or shared library name.\n\
939 If you do not specify any argument then the command will disable\n\
940 all defined probes."),