diff options
author | gary <gary> | 2013-06-04 12:50:20 +0000 |
---|---|---|
committer | gary <gary> | 2013-06-04 12:50:20 +0000 |
commit | 736d95d04891f566adf9cc5363b964e82610a855 (patch) | |
tree | f403ed84838538adc7dc3a448bc9bff590e046fe /gdb | |
parent | be33098462e01e61d6c9df8e3ad701763c8b0217 (diff) | |
download | gdb-736d95d04891f566adf9cc5363b964e82610a855.tar.gz |
2013-06-04 Gary Benson <gbenson@redhat.com>
* probe.h (get_probe_argument_count): New declaration.
(evaluate_probe_argument): Likewise.
* probe.c (get_probe_argument_count): New function.
(evaluate_probe_argument): Likewise.
(probe_safe_evaluate_at_pc): Use the above new functions.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/probe.c | 45 | ||||
-rw-r--r-- | gdb/probe.h | 10 |
3 files changed, 54 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3b5532df38d..d00c88baf08 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2013-06-04 Gary Benson <gbenson@redhat.com> + + * probe.h (get_probe_argument_count): New declaration. + (evaluate_probe_argument): Likewise. + * probe.c (get_probe_argument_count): New function. + (evaluate_probe_argument): Likewise. + (probe_safe_evaluate_at_pc): Use the above new functions. + 2013-06-04 Alan Modra <amodra@gmail.com> * ppc-tdep.h (ppc_insns_match_pattern): Update prototype. diff --git a/gdb/probe.c b/gdb/probe.c index 3086f4df35d..e6508927ac2 100644 --- a/gdb/probe.c +++ b/gdb/probe.c @@ -611,28 +611,55 @@ info_probes_command (char *arg, int from_tty) /* See comments in probe.h. */ +unsigned +get_probe_argument_count (struct probe *probe) +{ + const struct sym_probe_fns *probe_fns; + + gdb_assert (probe->objfile != NULL); + gdb_assert (probe->objfile->sf != NULL); + + probe_fns = probe->objfile->sf->sym_probe_fns; + + gdb_assert (probe_fns != NULL); + + return probe_fns->sym_get_probe_argument_count (probe); +} + +/* See comments in probe.h. */ + +struct value * +evaluate_probe_argument (struct probe *probe, unsigned n) +{ + const struct sym_probe_fns *probe_fns; + + gdb_assert (probe->objfile != NULL); + gdb_assert (probe->objfile->sf != NULL); + + probe_fns = probe->objfile->sf->sym_probe_fns; + + gdb_assert (probe_fns != NULL); + + return probe_fns->sym_evaluate_probe_argument (probe, n); +} + +/* See comments in probe.h. */ + struct value * probe_safe_evaluate_at_pc (struct frame_info *frame, unsigned n) { struct probe *probe; - const struct sym_probe_fns *probe_fns; unsigned n_args; probe = find_probe_by_pc (get_frame_pc (frame)); if (!probe) return NULL; - gdb_assert (probe->objfile != NULL); - gdb_assert (probe->objfile->sf != NULL); - gdb_assert (probe->objfile->sf->sym_probe_fns != NULL); - - probe_fns = probe->objfile->sf->sym_probe_fns; - n_args = probe_fns->sym_get_probe_argument_count (probe); - + n_args = get_probe_argument_count (probe); if (n >= n_args) return NULL; - return probe_fns->sym_evaluate_probe_argument (probe, n); + return evaluate_probe_argument (probe, n); } /* See comment in probe.h. */ diff --git a/gdb/probe.h b/gdb/probe.h index be1faa432ee..de07f506523 100644 --- a/gdb/probe.h +++ b/gdb/probe.h @@ -214,6 +214,16 @@ extern void info_probes_for_ops (char *arg, int from_tty, extern struct cmd_list_element **info_probes_cmdlist_get (void); +/* Return the argument count of the specified probe. */ + +extern unsigned get_probe_argument_count (struct probe *probe); + +/* Evaluate argument N of the specified probe. N must be between 0 + inclusive and get_probe_argument_count exclusive. */ + +extern struct value *evaluate_probe_argument (struct probe *probe, + unsigned n); + /* A convenience function that finds a probe at the PC in FRAME and evaluates argument N, with 0 <= N < number_of_args. If there is no probe at that location, or if the probe does not have enough arguments, |