This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python
- From: Andy Wingo <wingo at igalia dot com>
- To: Alexander Smundak <asmundak at google dot com>
- Cc: Phil Muldoon <pmuldoon at redhat dot com>, Doug Evans <dje at google dot com>, gdb-patches <gdb-patches at sourceware dot org>
- Date: Wed, 11 Mar 2015 09:49:02 +0100
- Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python
- Authentication-results: sourceware.org; auth=none
- References: <CAHQ51u7NUoQ8w9c5mc-Eiz05b1Nub6zqj_Ne7vfgWb5EP9_X8w at mail dot gmail dot com> <21714 dot 40641 dot 510825 dot 30998 at ruffy2 dot mtv dot corp dot google dot com> <CAHQ51u5_ViLaEmv9e43R-wzuWw8dwNkb-2XgCRy5ELQq5FUAWg at mail dot gmail dot com> <54E71694 dot 1080304 at redhat dot com> <CAHQ51u75+9HYAVJXYNQa0gTnQtYKEgmSkyAhAPYp-y4HGtXssg at mail dot gmail dot com> <CAHQ51u6UZ7A47rpGgX0QGeYSTCz1eo_3jWHc=q2ZX3YhqcJ6iQ at mail dot gmail dot com> <87ioei31uj dot fsf at igalia dot com> <CAHQ51u4f+Vx7qXPm-KAAENOceaVogMbDMw6==N_nY+GrLr4Pgg at mail dot gmail dot com> <87d24p19tt dot fsf at igalia dot com> <54FD7DAA dot 7010603 at redhat dot com> <CAHQ51u7sUkGhkmvTaaO_Jo6Jn+kojfiMWHmc2=7OWHThAq6EKw at mail dot gmail dot com>
Hi,
On Wed 11 Mar 2015 03:22, Alexander Smundak <asmundak@google.com> writes:
> +@defun SnifferInfo.read_register (self, regnum)
> +This method returns the contents of the register @var{regnum} in the
> +frame as a @code{gdb.Value} object. @var{regnum} values are
> +platform-specific. They are usually defined in the corresponding
> +xxx-@code{tdep.h} file in the gdb source tree.
> +@end defun
I note that the patch has no interface to specify registers by name.
I still wouldn't do numbers but I see we disagree :)
> + /* Call `deprecated_frame_register_read' -- calling
> + `value_of_register' would an assert in `get_frame_id'
> + because our frame is incomplete. */
> + if (deprecated_frame_register_read (frame, regnum, buffer))
> + val = value_from_contents (register_type (gdbarch, regnum),
> + buffer);
As mentioned in a previous comment, can be replaced with:
val = get_frame_register_value (frame, regnum);
> +/* Initialize new UnwindInfo object. */
> +static int
> +unwind_infopy_init (PyObject *self, PyObject *args, PyObject *kwargs)
> +{
> + PyObject *pyo_sniffer_info;
> + PyObject *pyo_regs;
> +
> + if (PyArg_UnpackTuple (args, "__init__", 2, 2, &pyo_sniffer_info, &pyo_regs)
> + && (pyo_sniffer_info != NULL
> + && PyObject_IsInstance (pyo_sniffer_info,
> + (PyObject *) &sniffer_info_object_type) > 0)
> + && pyo_regs != NULL
> + && PyTuple_Check (pyo_regs))
> + {
> + unwind_info_object *unwind_info = (unwind_info_object *) self;
> + unwind_info->frame_id = null_frame_id;
> + unwind_info->sniffer_info = pyo_sniffer_info;
> + Py_INCREF (pyo_sniffer_info);
> + unwind_info->previous_frame_registers = pyo_regs;
Probably better to check types and values here, so the user gets a good backtrace.
What do you think about merging the SnifferInfo and UnwindInfo objects
into an EphemeralFrame object? It would be nice to use the same nouns
on the Guile and Python sides.
Andy