From: Phil Muldoon <pmuldoon@redhat.com>
To: gdb-patches@sourceware.org
Subject: [python] [patch] PR 13624
Date: Thu, 06 Oct 2011 12:49:00 -0000 [thread overview]
Message-ID: <m3lisy8eui.fsf@redhat.com> (raw)
The patch address PR 13624 which noted that in some instances we were
not catching GDB exceptions. I checked every function and I found two
GDB cases, and one Python case.
OK?
Cheers,
Phil
--
2011-10-06 Phil Muldoon <pmuldoon@redhat.com>
* python/py-value.c (valpy_call): Check that arguments are
a tuple.
(valpy_nonzero): Catch GDB exceptions.
(valpy_absolute): Ditto.
--
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 252d9b9..48bbb0a 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -519,6 +519,13 @@ valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
return NULL;
}
+ if (! PyTuple_Check (args))
+ {
+ PyErr_SetString (PyExc_RuntimeError,
+ _("Inferior arguments must be provided in a tuple."));
+ return NULL;
+ }
+
args_count = PyTuple_Size (args);
if (args_count > 0)
{
@@ -792,33 +799,53 @@ static PyObject *
valpy_absolute (PyObject *self)
{
struct value *value = ((value_object *) self)->value;
+ volatile struct gdb_exception except;
+ int isabs = 1;
- if (value_less (value, value_zero (value_type (value), not_lval)))
- return valpy_negative (self);
- else
+ TRY_CATCH (except, RETURN_MASK_ALL)
+ {
+ if (value_less (value, value_zero (value_type (value), not_lval)))
+ isabs = 0;
+ }
+ GDB_PY_HANDLE_EXCEPTION (except);
+
+ if (isabs)
return valpy_positive (self);
+ else
+ return valpy_negative (self);
}
/* Implements boolean evaluation of gdb.Value. */
static int
valpy_nonzero (PyObject *self)
{
+ volatile struct gdb_exception except;
value_object *self_value = (value_object *) self;
struct type *type;
+ int nonzero = 0; /* Appease GCC warning. */
type = check_typedef (value_type (self_value->value));
- if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
- return !!value_as_long (self_value->value);
- else if (TYPE_CODE (type) == TYPE_CODE_FLT)
- return value_as_double (self_value->value) != 0;
- else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
- return !decimal_is_zero (value_contents (self_value->value),
- TYPE_LENGTH (type),
- gdbarch_byte_order (get_type_arch (type)));
- else
- /* All other values are True. */
- return 1;
+ TRY_CATCH (except, RETURN_MASK_ALL)
+ {
+ if (is_integral_type (type) || TYPE_CODE (type) == TYPE_CODE_PTR)
+ nonzero = !!value_as_long (self_value->value);
+ else if (TYPE_CODE (type) == TYPE_CODE_FLT)
+ nonzero = value_as_double (self_value->value) != 0;
+ else if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
+ nonzero = !decimal_is_zero (value_contents (self_value->value),
+ TYPE_LENGTH (type),
+ gdbarch_byte_order (get_type_arch (type)));
+ else
+ /* All other values are True. */
+ nonzero = 1;
+ }
+ /* This is not documented in the Python documentation, but if this
+ function fails, return -1 as slot_nb_nonzero does (the default
+ Python nonzero function). */
+ GDB_PY_SET_HANDLE_EXCEPTION (except);
+
+ return nonzero;
}
/* Implements ~ for value objects. */
next reply other threads:[~2011-10-06 12:49 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-06 12:49 Phil Muldoon [this message]
2011-10-06 13:23 ` Paul_Koning
2011-10-06 13:51 ` Tom Tromey
2011-10-06 15:43 ` Phil Muldoon
2011-10-06 17:44 ` Tom Tromey
2011-10-07 13:47 ` Phil Muldoon
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=m3lisy8eui.fsf@redhat.com \
--to=pmuldoon@redhat.com \
--cc=gdb-patches@sourceware.org \
/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