Fix gdb.Value->python conversion for large unsigned ints
Commit Message
Hi.
I was seeing this in gdb:
(gdb) py print long(gdb.Value(18446744071563607160))
-2145944456
whereas with plain python:
(gdb) py print long(18446744071563607160)
18446744071563607160
2016-03-29 Doug Evans <dje@google.com>
* python/py-value.c (valpy_long): Handle unsigned values.
testsuite/
* gdb.python/py-value.exp (test_value_creation): Add test for large
unsigned 64-bit value.
gdb_test "python print (a.__class__)" "<(type|
class) 'gdb.Value'>" "verify type of 8-bit string"
+
if { $gdb_py_is_py3k == 0 } {
gdb_py_test_silent_cmd "python a = gdb.Value (u'unicode
test')" "create unicode value" 1
gdb_test "python print (a)" "\"unicode test\"" "print Unicode string"
Comments
Hi Doug,
On 03/30/2016 07:57 AM, Doug Evans wrote:
> Hi.
>
> I was seeing this in gdb:
>
> (gdb) py print long(gdb.Value(18446744071563607160))
> -2145944456
>
> whereas with plain python:
>
> (gdb) py print long(18446744071563607160)
> 18446744071563607160
>
Looks like this fell through the cracks?
LGTM.
> 2016-03-29 Doug Evans <dje@google.com>
>
> * python/py-value.c (valpy_long): Handle unsigned values.
>
> testsuite/
> * gdb.python/py-value.exp (test_value_creation): Add test for large
> unsigned 64-bit value.
Thanks,
Pedro Alves
[sorry for the resend ...
We've got gdb to use c++ now. Yay.
Can we maybe someday get the list to not bounce text/html?]
On Tue, Oct 4, 2016 at 7:40 AM, Pedro Alves <palves@redhat.com> wrote:
> Hi Doug,
>
> On 03/30/2016 07:57 AM, Doug Evans wrote:
>> Hi.
>>
>> I was seeing this in gdb:
>>
>> (gdb) py print long(gdb.Value(18446744071563607160))
>> -2145944456
>>
>> whereas with plain python:
>>
>> (gdb) py print long(18446744071563607160)
>> 18446744071563607160
>>
>
> Looks like this fell through the cracks?
>
> LGTM.
>
>> 2016-03-29 Doug Evans <dje@google.com>
>>
>> * python/py-value.c (valpy_long): Handle unsigned values.
>>
>> testsuite/
>> * gdb.python/py-value.exp (test_value_creation): Add test for large
>> unsigned 64-bit value.
>
> Thanks,
> Pedro Alves
>
Thanks!
I usually do an audit of email sent to gdb-patches every few months.
Totally missed this one (and potentially others - a distracting year
for many reasons -
I'll go through and try to find if there's any more).
Committed.
@@ -1518,7 +1518,10 @@ valpy_long (PyObject *self)
}
END_CATCH
- return gdb_py_long_from_longest (l);
+ if (TYPE_UNSIGNED (type))
+ return gdb_py_long_from_ulongest (l);
+ else
+ return gdb_py_long_from_longest (l);
}
/* Implements conversion to float. */
b/gdb/testsuite/gdb.python/py-value.exp
@@ -54,10 +54,15 @@ proc test_value_creation {} {
if { $gdb_py_is_py3k == 0 } {
gdb_py_test_silent_cmd "python i = gdb.Value (5L)" "create long value"
1
}
+
+ gdb_py_test_silent_cmd "python l =
gdb.Value(0xffffffff12345678)" "create large unsigned 64-bit value" 1
+ gdb_test "python print long(l)" "18446744069720004216" "large unsigned
64-bit int conversion to python"
+
gdb_py_test_silent_cmd "python f = gdb.Value (1.25)" "create double
value" 1
gdb_py_test_silent_cmd "python a = gdb.Value ('string test')" "create
8-bit string value" 1
gdb_test "python print (a)" "\"string test\"" "print 8-bit string"