From: Tom Tromey <tromey@redhat.com>
To: Siva Chandra <sivachandra@google.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [RFC - Python Scripting] New method gdb.Architecture.disassemble
Date: Wed, 06 Feb 2013 19:58:00 -0000 [thread overview]
Message-ID: <87y5f1w6xc.fsf@fleche.redhat.com> (raw)
In-Reply-To: <CAGyQ6gy_08hZn2Pk6pmD+AuOkH7SCsQ6732KTa7sucZ7-4prUA@mail.gmail.com> (Siva Chandra's message of "Mon, 4 Feb 2013 06:09:35 -0800")
>>>>> "Siva" == Siva Chandra <sivachandra@google.com> writes:
Siva> The attached patch adds a new method 'disassemble' to the class
Siva> gdb.Architecture. I have not yet added docs and tests, but will do so
Siva> after I get feedback that adding such a method is OK.
Why is it a method on gdb.Architecture and not elsewhere?
For example, we have gdb.Inferior.read_memory.
Siva> + if (!PyArg_ParseTuple (args, "KK|i", &low, &high, &opcodes))
Usually if we support more than one argument, we allow keywords as well.
Siva> + if (opcodes)
Siva> + flags = DISASSEMBLY_RAW_INSN;
Why an int treated as a boolean rather than a real boolean?
Siva> + TRY_CATCH (except, RETURN_MASK_ALL)
Siva> + {
Siva> + gdb_disassembly (gdbarch, py_out, NULL, flags, -1, low, high);
Why is py_out a global instead of something created and destroyed here?
Siva> + if (! (PyList_Check (temp) && PyList_Size (temp) > 0))
Siva> + return NULL;
You can't return NULL without setting the exception.
Siva> +struct ui_out *py_out;
I'd rather avoid new globals, and I don't see what this one adds.
Siva> +/* This data structure captures the Python version of ui_out. The Python
Siva> + version is not used to display output to a user, but to capture the results
Siva> + from GDB's internals in to a Python data structure. Hence, it does not have
Siva> + any representation for table headers. However, it can be viewed as a
Siva> + recursive table structure wherin the highest level is a list of rows. All
Siva> + rows in this list can either be a list themselves, or all of them can be
Siva> + dicts holding the table's fields. If they were lists, then they follow the
Siva> + same recurrsive structure as the higher levels.
Typo, "recursive".
I like this -- I've wanted it before -- but I wonder whether it handles
all cases. See http://sourceware.org/bugzilla/show_bug.cgi?id=11688#c6
Siva> +static struct row_data *
Siva> +new_row (struct row_data *parent)
Siva> +{
Siva> + struct row_data *row;
Siva> +
Siva> + row = (struct row_data *) xmalloc (sizeof (struct row_data));
You don't need the cast.
Siva> +PyObject *
Siva> +fetch_and_reset_py_out_object (struct ui_out *ui_out)
All new functions should have an intro comment.
Siva> + temp = py_out_data->table->data;
Siva> + py_out_data->table->data = PyList_New (0);
What if PyList_New returns NULL here?
Then the exception will be set, making problems later.
Siva> + /* Commit the row to the parent list. */
Siva> + PyList_Append (py_out_data->current_row->parent_row->data,
Siva> + py_out_data->current_row->data);
What if this fails?
This applies to many calls into Python in the patch.
Siva> +static struct ui_out_impl py_ui_out_impl =
Siva> +{
Siva> + 0, /* table_begin */
Siva> + 0, /* table_body */
Siva> + 0, /* table_end */
Why are these NULL?
Siva> + 0 /* is_mi_like_p */
It seems to me that this should be 1.
(Well, really, this is all a hack that should go away, but I doubt I'll
live to see that.)
Tom
next prev parent reply other threads:[~2013-02-06 19:58 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-04 14:09 Siva Chandra
2013-02-05 23:28 ` Doug Evans
2013-02-06 1:53 ` Siva Chandra
2013-02-06 20:00 ` Tom Tromey
2013-02-08 18:05 ` Doug Evans
2013-02-09 17:55 ` Matt Rice
2013-02-12 14:56 ` Siva Chandra
2013-02-12 21:18 ` Tom Tromey
2013-02-13 14:37 ` Siva Chandra
2013-02-13 17:52 ` Eli Zaretskii
2013-02-13 18:03 ` Tom Tromey
2013-02-13 19:50 ` Siva Chandra
2013-02-13 20:42 ` Doug Evans
2013-02-14 22:46 ` Siva Chandra
2013-02-15 6:43 ` Doug Evans
2013-02-15 17:32 ` Doug Evans
2013-02-15 17:40 ` Siva Chandra
2013-02-15 17:41 ` Siva Chandra
2013-02-15 18:57 ` Doug Evans
2013-02-15 20:36 ` Siva Chandra
2013-02-15 21:01 ` Siva Chandra
2013-02-16 5:30 ` Doug Evans
2013-02-16 8:47 ` Eli Zaretskii
2013-02-19 5:36 ` Siva Chandra
2013-02-19 15:51 ` Paul_Koning
2013-02-19 16:35 ` Eli Zaretskii
2013-02-19 16:38 ` Eli Zaretskii
2013-02-20 12:34 ` Siva Chandra
2013-02-20 18:44 ` Eli Zaretskii
2013-02-21 1:49 ` Siva Chandra
2013-02-06 19:58 ` Tom Tromey [this message]
2013-02-06 20:31 ` Phil Muldoon
2013-02-06 22:31 ` Matt Rice
2013-02-06 23:19 ` Siva Chandra
2013-02-07 1:11 ` Siva Chandra
2013-02-07 23:03 ` Matt Rice
[not found] ` <20130206235707.GA2353@klara.mpi.htwm.de>
2013-02-07 1:18 ` Siva Chandra
2013-02-07 14:14 ` Siva Chandra
2013-02-07 16:42 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y5f1w6xc.fsf@fleche.redhat.com \
--to=tromey@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=sivachandra@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox