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: Doug Evans <dje at google dot com>, gdb-patches <gdb-patches at sourceware dot org>
- Date: Wed, 18 Mar 2015 09:54:33 +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> <87twxrncld dot fsf at igalia dot com> <CAHQ51u60nHp1a2DXZ4srvRefyTtge1BUw7-=JuYqChHN_wUGyQ at mail dot gmail dot com> <87ioe1dvu2 dot fsf at igalia dot com> <CAHQ51u7KzQLSLC=QeLA=zd+TUkbbNzzndfeVLFWpjiR-pL8ang at mail dot gmail dot com> <87sid4atms dot fsf at igalia dot com> <CAHQ51u6=9BKf6YSTavbY7u_Mi6miKJ_Yo1QcaG=KsYtYzoWY_Q at mail dot gmail dot com> <CAHQ51u4ybxem1X89G7frW-N_gZK6q3rKLunxgf+7UPzpswCfNg at mail dot gmail dot com>
On Tue 17 Mar 2015 22:37, Alexander Smundak <asmundak@google.com> writes:
> +/* The implementation of
> + gdb.UnwindInfo.set_previous_frame_register (REG, VALUE) -> None. */
> +
> +static PyObject *
> +unwind_infopy_set_previous_frame_register (PyObject *self, PyObject *args)
> +{
> + unwind_info_object *unwind_info = (unwind_info_object *) self;
> + sniffer_info_object *sniffer_info
> + = (sniffer_info_object *) (unwind_info->sniffer_info);
> + PyObject *pyo_reg_id;
> + PyObject *pyo_reg_value;
> + int regnum;
> +
> + if (sniffer_info->frame_info == NULL)
> + {
> + PyErr_SetString (PyExc_ValueError,
> + "Attempting to read register from stale SnifferInfo");
> + return NULL;
> + }
Nit: we are setting the register here.
> +int
> +gdbpy_initialize_unwind (void)
> +{
> + int rc;
> + add_setshow_zuinteger_cmd
> + ("py-unwind", class_maintenance, &pyuw_debug,
> + _("Set Python unwinder debugging."),
> + _("Show Python unwinder debugging."),
> + _("When non-zero, Pythin unwinder debugging is enabled."),
"Python"
> +static PyMethodDef sniffer_info_object_methods[] =
> +{
> + { "read_register", sniffer_infopy_read_register, METH_VARARGS,
> + "read_register (REGNUM) -> gdb.Value\n"
> + "Return the value of the REGNUM in the frame." },
> + { "unwind_info_with_id",
> + sniffer_infopy_unwind_info_with_id, METH_VARARGS,
> + "unwind_info_with_id (SP, PC) -> gdb.UnwindInfo\n"
> + "Construct UnwindInfo for this FrameData, using given SP and PC registers \n"
> + "to identify the frame." },
> + { "unwind_info_with_id_special",
> + sniffer_infopy_unwind_info_with_id_special, METH_VARARGS,
> + "unwind_info_with_id_special (SP, PC, SPECIAL) -> gdb.UnwindInfo\n"
> + "Construct UnwindInfo for this FrameData, using given SP, PC, and SPECIAL "
> + "registers to identify the frame." },
> + { "unwind_info_with_id_wild",
> + sniffer_infopy_unwind_info_with_id_wild, METH_VARARGS,
> + "unwind_info_with_id_wild (SP) ->gdb.UnwindInfo\n"
> + "Construct UnwindInfo for this FrameData, using given SP register to \n"
> + "identify the frame." },
> + {NULL} /* Sentinel */
> +};
Still no support for register names.
> +import gdb
> +from gdb.sniffer import Sniffer
> +
> +class TestSniffer(Sniffer):
I still think it's much better to call these "unwinders". You say that
it's the terminology that GDB uses but that's not really the case --
"sniffer" names part of the unwinder interface, which Python and Guile
implement the whole of. You chose "unwinder" as the documentation
heading and the file name; why introduce a new term to the user?
Andy