This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]