This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Sanitize gdbarch access on probe/SDT API
- From: Pedro Alves <palves at redhat dot com>
- To: Sergio Durigan Junior <sergiodj at redhat dot com>
- Cc: GDB Patches <gdb-patches at sourceware dot org>, Tom Tromey <tromey at redhat dot com>
- Date: Fri, 06 Dec 2013 13:50:22 +0000
- Subject: Re: [PATCH] Sanitize gdbarch access on probe/SDT API
- Authentication-results: sourceware.org; auth=none
- References: <1386225226-18549-1-git-send-email-sergiodj at redhat dot com> <52A079DD dot 5050101 at redhat dot com> <m361r3hrrf dot fsf_-_ at redhat dot com>
> I tried to use get_selected_frame whenever I could, and when I couldn't,
> I used get_current_regcache.
But what does "couldn't" mean?
Looking at the function that uses get_current_regcache:
On 12/05/2013 10:12 PM, Sergio Durigan Junior wrote:
> @@ -1461,6 +1466,8 @@ stap_get_probes (VEC (probe_p) **probesp, struct objfile *objfile)
> bfd_vma base;
> struct sdt_note *iter;
> unsigned save_probesp_len = VEC_length (probe_p, *probesp);
> + struct regcache *regcache = get_current_regcache ();
> + struct gdbarch *gdbarch = get_regcache_arch (regcache);
AFAICS, stap_get_probes isn't called when evaluating a probe,
but instead when getting the list of probes out of an objfile.
Seems to me like this function is reachable even if the inferior
is not running yet. Is that why you couldn't use
get_selected_frame here? (because there's no frame?) If so,
using get_current_regcache is wrong. If there's no thread at
all, then what does the regcache of the current thread mean?
It sounds like you just managed to use it becauese
get_current_regcache doesn't error out when inferior_ptid
is pointing nowhere. As this is listing the probes in
the objfile, and not using the target's registers (afaics),
can you use the objfile's arch here? With that out of the way,
would it work to pass the frame pointer down instead of the
gdbarch?
> if (objfile->separate_debug_objfile_backlink != NULL)
> {
> @@ -1486,7 +1493,7 @@ stap_get_probes (VEC (probe_p) **probesp, struct objfile *objfile)
> {
> /* We first have to handle all the information about the
> probe which is present in the section. */
> - handle_stap_probe (objfile, iter, probesp, base);
> + handle_stap_probe (objfile, iter, probesp, base, gdbarch);
> }
--
Pedro Alves