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]

[PATCH] Fix gdb.Value->python conversion for large unsigned ints


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.

diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 7dba0ad..09e8055 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -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.  */
diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp
index a9dbe97..ca2dc08 100644
--- a/gdb/testsuite/gdb.python/py-value.exp
+++ 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"
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"


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