public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [patch] Allow gdb.Values to become callable if appropriate.
@ 2010-07-19 10:40 Phil Muldoon
  2010-07-20 22:17 ` Tom Tromey
  0 siblings, 1 reply; 10+ messages in thread
From: Phil Muldoon @ 2010-07-19 10:40 UTC (permalink / raw)
  To: gdb-patches ml

Here is a little patch that allows gdb.Values to become "callable".
In this patch, I have limited the ability to call only values where
the type == TYPE_CODE_FUNC.  It is the responsibility of the user to
cast or dereference appropriately before attempting a call.  If the
type does not resolve to TYPE_CODE_FUNC, then the call will be
abandoned.  There's not too much checking I can do in the function
beyond what call_function_by_hand already does.  If any errors occur
in the conversion of the arguments, the call will be abandoned.

Comments?

Cheers,

Phil


ChangeLog:

2010-07-19  Phil Muldoon  <pmuldoon@redhat.com>

	* python/py-value.c (valpy_call): New Function.

Testsuite ChangeLog:

2010-07-19  Phil Muldoon  <pmuldoon@redhat.com>

	* gdb.python/py-value.exp (test_inferior_function_call): New function.
	* gdb.python/py-value.c (func1): New function.
	(func2): Likewise.

Documentation ChangeLog:

2010-07-19  Phil Muldoon  <pmuldoon@redhat.com>

	* gdb.texinfo (Values From Inferior): Add value inferior function
	call description,

--

diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 14b0092..9f23397 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -20394,6 +20394,22 @@ bar = some_val['foo']
 
 Again, @code{bar} will also be a @code{gdb.Value} object.
 
+A @code{gdb.Value} that represents a function or a function pointer is a
+callable Python object.  Any arguments provided to the call must match
+the function prototype of the function, and must be provided in the
+same order expected in that prototype.
+
+For example, @code{some_val} is a @code{gdb.Value} instance holding
+a function or function pointer that takes two integers as
+arguments.  To execute this function, call it like so:
+
+@smallexample
+result = some_val (10,20)
+@end smallexample
+
+Any values returned from a function call will be stored as a
+@code{gdb.Value}.
+
 The following attributes are provided:
 
 @table @code
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 2024021..8d36c02 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -25,6 +25,7 @@
 #include "language.h"
 #include "dfp.h"
 #include "valprint.h"
+#include "infcall.h"
 
 #ifdef HAVE_PYTHON
 
@@ -393,6 +394,53 @@ valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
   return -1;
 }
 
+/* Called by the Python interpreter to perform an inferior function
+   call on the value.  */
+static PyObject *
+valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
+{
+  struct value *return_value = NULL;
+  Py_ssize_t args_count;
+  volatile struct gdb_exception except;
+  struct value *function = ((value_object *) self)->value;
+  struct value **vargs = NULL;
+  struct type *ftype = check_typedef (value_type (function));
+
+  if (TYPE_CODE (ftype) != TYPE_CODE_FUNC)
+    {
+      PyErr_SetString (PyExc_RuntimeError,
+		       _("Value is not callable (not TYPE_CODE_FUNC)."));
+      return NULL;
+    }
+
+  args_count = PyTuple_Size (args);
+  if (args_count > 0)
+    {
+      int i;
+      
+      vargs =  alloca (sizeof (struct value *) * args_count);
+      for (i = 0; i < args_count; i++)
+	{
+	  PyObject *item = PyTuple_GetItem (args, i);
+	  
+	  if (item == NULL)
+	    return NULL;
+	  
+	  vargs[i] = convert_value_from_python (item);
+	  if (vargs[i] == NULL)
+	    return NULL;
+	}
+    }
+  
+  TRY_CATCH (except, RETURN_MASK_ALL)
+    {
+      return_value = call_function_by_hand (function, args_count, vargs);
+    }
+  GDB_PY_HANDLE_EXCEPTION (except);
+  
+  return value_to_value_object (return_value);
+}
+
 /* Called by the Python interpreter to obtain string representation
    of the object.  */
 static PyObject *
@@ -1151,7 +1199,7 @@ PyTypeObject value_object_type = {
   0,				  /*tp_as_sequence*/
   &value_object_as_mapping,	  /*tp_as_mapping*/
   valpy_hash,		          /*tp_hash*/
-  0,				  /*tp_call*/
+  (ternaryfunc) valpy_call,	  /*tp_call*/
   valpy_str,			  /*tp_str*/
   0,				  /*tp_getattro*/
   0,				  /*tp_setattro*/
diff --git a/gdb/testsuite/gdb.python/py-value.c b/gdb/testsuite/gdb.python/py-value.c
index be933b3..7481bd5 100644
--- a/gdb/testsuite/gdb.python/py-value.c
+++ b/gdb/testsuite/gdb.python/py-value.c
@@ -15,6 +15,8 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#include <stdio.h>
+
 struct s
 {
   int a;
@@ -44,6 +46,16 @@ void ptr_ref(int*& rptr_int)
 }
 #endif
 
+void func1 ()
+{
+  printf ("void function called\n");
+}
+
+int func2 (int arg1, int arg2)
+{
+  return arg1 + arg2;
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -53,6 +65,8 @@ main (int argc, char *argv[])
   PTR x = &s;
   char st[17] = "divide et impera";
   char nullst[17] = "divide\0et\0impera";
+  void (*fp1) (void)  = &func1;
+  int  (*fp2) (int, int) = &func2;
   const char *sptr = "pointer";
   const char *embed = "embedded x\201\202\203\204";
   int a[3] = {1,2,3};
@@ -63,6 +77,8 @@ main (int argc, char *argv[])
   s.a = 3;
   s.b = 5;
   u.a = 7;
+  (*fp1) ();
+  (*fp2) (10,20);
 
 #ifdef __cplusplus
   ptr_ref(ptr_i);
diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp
index a24bc11..eaed9c7 100644
--- a/gdb/testsuite/gdb.python/py-value.exp
+++ b/gdb/testsuite/gdb.python/py-value.exp
@@ -276,6 +276,35 @@ proc test_lazy_strings {} {
 }
 
 
+proc test_inferior_function_call {} {
+    global gdb_prompt hex decimal
+
+    # Correct inferior call without arguments.
+    gdb_test "p/x fp1" " = $hex.*"
+    gdb_py_test_silent_cmd "python fp1 = gdb.history (0)" "get value from history" 1
+    gdb_test "python fp1 = fp1.dereference()" ""
+    gdb_test "python result = fp1()" ""
+    gdb_test "python print result" "void"
+
+    # Correct inferior call with arguments.
+    gdb_test "p/x fp2" " = $hex.*"
+    gdb_py_test_silent_cmd "python fp2 = gdb.history (0)" "get value from history" 1
+    gdb_test "python fp2 = fp2.dereference()" ""
+    gdb_test "python result2 = fp2(10,20)" ""
+    gdb_test "python print result2" "30"
+
+    # Incorrect to call an int value.
+    gdb_test "p i" " = $decimal.*"
+    gdb_py_test_silent_cmd "python i = gdb.history (0)" "get value from history" 1
+    gdb_test "python result3 = i()" ".*Value is not callable.*"
+
+    # Incorrect number of arguments.
+    gdb_test "p/x fp2" " = $hex.*"
+    gdb_py_test_silent_cmd "python fp3 = gdb.history (0)" "get value from history" 1
+    gdb_test "python fp3 = fp3.dereference()" ""
+    gdb_test "python result2 = fp3(10)" ".*Too few arguments in function call.*"
+}
+
 # A few objfile tests.
 proc test_objfiles {} {
     gdb_test "python\nok=False\nfor file in gdb.objfiles():\n  if 'py-value' in file.filename:\n    ok=True\nprint ok\nend" "True"
@@ -435,6 +464,7 @@ if ![runto_main] then {
 }
 
 test_value_in_inferior
+test_inferior_function_call
 test_lazy_strings
 test_value_after_death
 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-19 10:40 [patch] Allow gdb.Values to become callable if appropriate Phil Muldoon
@ 2010-07-20 22:17 ` Tom Tromey
  2010-07-26  9:17   ` Phil Muldoon
  0 siblings, 1 reply; 10+ messages in thread
From: Tom Tromey @ 2010-07-20 22:17 UTC (permalink / raw)
  To: Phil Muldoon; +Cc: gdb-patches ml

>>>>> "Phil" == Phil Muldoon <pmuldoon@redhat.com> writes:

Phil> Here is a little patch that allows gdb.Values to become "callable".
Phil> In this patch, I have limited the ability to call only values where
Phil> the type == TYPE_CODE_FUNC.  It is the responsibility of the user to
Phil> cast or dereference appropriately before attempting a call.  If the
Phil> type does not resolve to TYPE_CODE_FUNC, then the call will be
Phil> abandoned.  There's not too much checking I can do in the function
Phil> beyond what call_function_by_hand already does.  If any errors occur
Phil> in the conversion of the arguments, the call will be abandoned.

Phil> Comments?

Looks good.

Phil> +A @code{gdb.Value} that represents a function or a function pointer is a
Phil> +callable Python object.

From what I can see, your patch explicitly excludes function pointers.

This may be a bit too strict.  I think it would be reasonably safe and
easy to accept references (via coerce_ref) and also function pointers
(doing a single dereference inside the new function).

Alternatively, update the documentation.

Phil> +  args_count = PyTuple_Size (args);
Phil> +  if (args_count > 0)
Phil> +    {
Phil> +      int i;
Phil> +      
Phil> +      vargs =  alloca (sizeof (struct value *) * args_count);

Extra space after the "=".

Phil> -  0,				  /*tp_call*/
Phil> +  (ternaryfunc) valpy_call,	  /*tp_call*/

I don't think this cast is necessary.

Tom

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-20 22:17 ` Tom Tromey
@ 2010-07-26  9:17   ` Phil Muldoon
  2010-07-26 17:07     ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Phil Muldoon @ 2010-07-26  9:17 UTC (permalink / raw)
  To: gdb-patches

On 20/07/10 23:17, Tom Tromey wrote:
>>>>>> "Phil" == Phil Muldoon <pmuldoon@redhat.com> writes:

> Phil> Comments?
> 
> Looks good.
> 
> Phil> +A @code{gdb.Value} that represents a function or a function pointer is a
> Phil> +callable Python object.
> 
> From what I can see, your patch explicitly excludes function pointers.
> 
> This may be a bit too strict.  I think it would be reasonably safe and
> easy to accept references (via coerce_ref) and also function pointers
> (doing a single dereference inside the new function).
> 
> Alternatively, update the documentation.

I thought a little about this.  I'd rather be more strict here, and
update the documentation purely because of the side-effects of
inferior calls.  What do you think?

Patch attached.

Cheers,

Phil

--

diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index be6cd3d..813fe41 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -20608,6 +20608,22 @@ bar = some_val['foo']
 
 Again, @code{bar} will also be a @code{gdb.Value} object.
 
+A @code{gdb.Value} that represents a function can be executed via
+inferior function call.  Any arguments provided to the call must match
+the function prototype of the function, and must be provided in the
+same order expected in that prototype.
+
+For example, @code{some_val} is a @code{gdb.Value} instance
+representing a function that takes two integers as arguments.  To
+execute this function, call it like so:
+
+@smallexample
+result = some_val (10,20)
+@end smallexample
+
+Any values returned from a function call will be stored as a
+@code{gdb.Value}.
+
 The following attributes are provided:
 
 @table @code
diff --git a/gdb/python/py-value.c b/gdb/python/py-value.c
index 2024021..d547ed1 100644
--- a/gdb/python/py-value.c
+++ b/gdb/python/py-value.c
@@ -25,6 +25,7 @@
 #include "language.h"
 #include "dfp.h"
 #include "valprint.h"
+#include "infcall.h"
 
 #ifdef HAVE_PYTHON
 
@@ -393,6 +394,53 @@ valpy_setitem (PyObject *self, PyObject *key, PyObject *value)
   return -1;
 }
 
+/* Called by the Python interpreter to perform an inferior function
+   call on the value.  */
+static PyObject *
+valpy_call (PyObject *self, PyObject *args, PyObject *keywords)
+{
+  struct value *return_value = NULL;
+  Py_ssize_t args_count;
+  volatile struct gdb_exception except;
+  struct value *function = ((value_object *) self)->value;
+  struct value **vargs = NULL;
+  struct type *ftype = check_typedef (value_type (function));
+
+  if (TYPE_CODE (ftype) != TYPE_CODE_FUNC)
+    {
+      PyErr_SetString (PyExc_RuntimeError,
+		       _("Value is not callable (not TYPE_CODE_FUNC)."));
+      return NULL;
+    }
+
+  args_count = PyTuple_Size (args);
+  if (args_count > 0)
+    {
+      int i;
+
+      vargs = alloca (sizeof (struct value *) * args_count);
+      for (i = 0; i < args_count; i++)
+	{
+	  PyObject *item = PyTuple_GetItem (args, i);
+
+	  if (item == NULL)
+	    return NULL;
+
+	  vargs[i] = convert_value_from_python (item);
+	  if (vargs[i] == NULL)
+	    return NULL;
+	}
+    }
+
+  TRY_CATCH (except, RETURN_MASK_ALL)
+    {
+      return_value = call_function_by_hand (function, args_count, vargs);
+    }
+  GDB_PY_HANDLE_EXCEPTION (except);
+
+  return value_to_value_object (return_value);
+}
+
 /* Called by the Python interpreter to obtain string representation
    of the object.  */
 static PyObject *
@@ -1151,7 +1199,7 @@ PyTypeObject value_object_type = {
   0,				  /*tp_as_sequence*/
   &value_object_as_mapping,	  /*tp_as_mapping*/
   valpy_hash,		          /*tp_hash*/
-  0,				  /*tp_call*/
+  valpy_call,	                  /*tp_call*/
   valpy_str,			  /*tp_str*/
   0,				  /*tp_getattro*/
   0,				  /*tp_setattro*/
diff --git a/gdb/testsuite/gdb.python/py-value.c b/gdb/testsuite/gdb.python/py-value.c
index be933b3..7481bd5 100644
--- a/gdb/testsuite/gdb.python/py-value.c
+++ b/gdb/testsuite/gdb.python/py-value.c
@@ -15,6 +15,8 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
+#include <stdio.h>
+
 struct s
 {
   int a;
@@ -44,6 +46,16 @@ void ptr_ref(int*& rptr_int)
 }
 #endif
 
+void func1 ()
+{
+  printf ("void function called\n");
+}
+
+int func2 (int arg1, int arg2)
+{
+  return arg1 + arg2;
+}
+
 int
 main (int argc, char *argv[])
 {
@@ -53,6 +65,8 @@ main (int argc, char *argv[])
   PTR x = &s;
   char st[17] = "divide et impera";
   char nullst[17] = "divide\0et\0impera";
+  void (*fp1) (void)  = &func1;
+  int  (*fp2) (int, int) = &func2;
   const char *sptr = "pointer";
   const char *embed = "embedded x\201\202\203\204";
   int a[3] = {1,2,3};
@@ -63,6 +77,8 @@ main (int argc, char *argv[])
   s.a = 3;
   s.b = 5;
   u.a = 7;
+  (*fp1) ();
+  (*fp2) (10,20);
 
 #ifdef __cplusplus
   ptr_ref(ptr_i);
diff --git a/gdb/testsuite/gdb.python/py-value.exp b/gdb/testsuite/gdb.python/py-value.exp
index a24bc11..eaed9c7 100644
--- a/gdb/testsuite/gdb.python/py-value.exp
+++ b/gdb/testsuite/gdb.python/py-value.exp
@@ -276,6 +276,35 @@ proc test_lazy_strings {} {
 }
 
 
+proc test_inferior_function_call {} {
+    global gdb_prompt hex decimal
+
+    # Correct inferior call without arguments.
+    gdb_test "p/x fp1" " = $hex.*"
+    gdb_py_test_silent_cmd "python fp1 = gdb.history (0)" "get value from history" 1
+    gdb_test "python fp1 = fp1.dereference()" ""
+    gdb_test "python result = fp1()" ""
+    gdb_test "python print result" "void"
+
+    # Correct inferior call with arguments.
+    gdb_test "p/x fp2" " = $hex.*"
+    gdb_py_test_silent_cmd "python fp2 = gdb.history (0)" "get value from history" 1
+    gdb_test "python fp2 = fp2.dereference()" ""
+    gdb_test "python result2 = fp2(10,20)" ""
+    gdb_test "python print result2" "30"
+
+    # Incorrect to call an int value.
+    gdb_test "p i" " = $decimal.*"
+    gdb_py_test_silent_cmd "python i = gdb.history (0)" "get value from history" 1
+    gdb_test "python result3 = i()" ".*Value is not callable.*"
+
+    # Incorrect number of arguments.
+    gdb_test "p/x fp2" " = $hex.*"
+    gdb_py_test_silent_cmd "python fp3 = gdb.history (0)" "get value from history" 1
+    gdb_test "python fp3 = fp3.dereference()" ""
+    gdb_test "python result2 = fp3(10)" ".*Too few arguments in function call.*"
+}
+
 # A few objfile tests.
 proc test_objfiles {} {
     gdb_test "python\nok=False\nfor file in gdb.objfiles():\n  if 'py-value' in file.filename:\n    ok=True\nprint ok\nend" "True"
@@ -435,6 +464,7 @@ if ![runto_main] then {
 }
 
 test_value_in_inferior
+test_inferior_function_call
 test_lazy_strings
 test_value_after_death
 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-26  9:17   ` Phil Muldoon
@ 2010-07-26 17:07     ` Eli Zaretskii
  2010-07-27 13:16       ` Phil Muldoon
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2010-07-26 17:07 UTC (permalink / raw)
  To: Phil Muldoon; +Cc: gdb-patches

> Date: Mon, 26 Jul 2010 10:17:10 +0100
> From: Phil Muldoon <pmuldoon@redhat.com>
> 
> +A @code{gdb.Value} that represents a function can be executed via
> +inferior function call.  Any arguments provided to the call must match
> +the function prototype of the function, and must be provided in the
> +same order expected in that prototype.

Suggest a slight rewording:

    A @code{gdb.Value} that represents a function can be executed via
    inferior function call.  Any arguments provided to the call must match
    the function's prototype, and must be provided in the order specified
    by that prototype.

Okay with those changes.

Thanks.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-26 17:07     ` Eli Zaretskii
@ 2010-07-27 13:16       ` Phil Muldoon
  2010-07-27 18:24         ` Tom Tromey
  0 siblings, 1 reply; 10+ messages in thread
From: Phil Muldoon @ 2010-07-27 13:16 UTC (permalink / raw)
  To: gdb-patches; +Cc: Eli Zaretskii, tromey

On 26/07/10 18:05, Eli Zaretskii wrote:
>> Date: Mon, 26 Jul 2010 10:17:10 +0100
>> From: Phil Muldoon <pmuldoon@redhat.com>
>>
>> +A @code{gdb.Value} that represents a function can be executed via
>> +inferior function call.  Any arguments provided to the call must match
>> +the function prototype of the function, and must be provided in the
>> +same order expected in that prototype.
> 
> Suggest a slight rewording:
> 
>     A @code{gdb.Value} that represents a function can be executed via
>     inferior function call.  Any arguments provided to the call must match
>     the function's prototype, and must be provided in the order specified
>     by that prototype.
> 
> Okay with those changes.


So committed

http://sourceware.org/ml/gdb-cvs/2010-07/msg00156.html

Thanks

Phil.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-27 13:16       ` Phil Muldoon
@ 2010-07-27 18:24         ` Tom Tromey
  2010-07-28  9:47           ` Phil Muldoon
  0 siblings, 1 reply; 10+ messages in thread
From: Tom Tromey @ 2010-07-27 18:24 UTC (permalink / raw)
  To: Phil Muldoon; +Cc: gdb-patches, Eli Zaretskii

Phil> So committed
Phil> http://sourceware.org/ml/gdb-cvs/2010-07/msg00156.html

Could you please make a NEWS patch that mentions the new Python
improvements on the trunk?  Thanks.

Tom

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-27 18:24         ` Tom Tromey
@ 2010-07-28  9:47           ` Phil Muldoon
  2010-07-30 21:39             ` Tom Tromey
  0 siblings, 1 reply; 10+ messages in thread
From: Phil Muldoon @ 2010-07-28  9:47 UTC (permalink / raw)
  To: Tom Tromey; +Cc: gdb-patches, Eli Zaretskii

On 27/07/10 19:24, Tom Tromey wrote:
> Phil> So committed
> Phil> http://sourceware.org/ml/gdb-cvs/2010-07/msg00156.html
> 
> Could you please make a NEWS patch that mentions the new Python
> improvements on the trunk?  Thanks.

Here is a patch.  What do you think?

Cheers,

Phil

ChangeLog

2010-07-28  Phil Muldoon  <pmuldoon@redhat.com>

	* NEWS: Document Python value inferior function calls.
--

diff --git a/gdb/NEWS b/gdb/NEWS
index 0aea3fb..73f79a5 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -3,6 +3,15 @@
 
 *** Changes since GDB 7.2
 
+* Python scripting
+
+  ** GDB values in Python are now callable if the value represents a
+     function.  For example, if 'some_value' represents a function that
+     takes two integer parameters and returns a value, you can call
+     that function like so:
+
+     result = some_value (10,20)
+
 * GDB now has some support for using labels in the program's source in
   linespecs.  For instance, you can use "advance label" to continue
   execution to a label.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-28  9:47           ` Phil Muldoon
@ 2010-07-30 21:39             ` Tom Tromey
  2010-07-31  7:08               ` Eli Zaretskii
  0 siblings, 1 reply; 10+ messages in thread
From: Tom Tromey @ 2010-07-30 21:39 UTC (permalink / raw)
  To: Phil Muldoon; +Cc: gdb-patches, Eli Zaretskii

>>>>> "Phil" == Phil Muldoon <pmuldoon@redhat.com> writes:

Phil> Here is a patch.  What do you think?

It looks reasonable to me, but please wait for Eli to comment.

Tom

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-30 21:39             ` Tom Tromey
@ 2010-07-31  7:08               ` Eli Zaretskii
  2010-08-03  9:55                 ` Phil Muldoon
  0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2010-07-31  7:08 UTC (permalink / raw)
  To: Tom Tromey; +Cc: pmuldoon, gdb-patches

> X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI,
> 	T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
> From: Tom Tromey <tromey@redhat.com>
> Cc: gdb-patches@sourceware.org, Eli Zaretskii <eliz@gnu.org>
> Date: Fri, 30 Jul 2010 15:39:29 -0600
> 
> >>>>> "Phil" == Phil Muldoon <pmuldoon@redhat.com> writes:
> 
> Phil> Here is a patch.  What do you think?
> 
> It looks reasonable to me, but please wait for Eli to comment.

It's fine.

Thanks.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [patch] Allow gdb.Values to become callable if appropriate.
  2010-07-31  7:08               ` Eli Zaretskii
@ 2010-08-03  9:55                 ` Phil Muldoon
  0 siblings, 0 replies; 10+ messages in thread
From: Phil Muldoon @ 2010-08-03  9:55 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Tom Tromey, gdb-patches

On 31/07/10 08:07, Eli Zaretskii wrote:
>> X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI,
>> 	T_RP_MATCHES_RCVD autolearn=ham version=3.3.1
>> From: Tom Tromey <tromey@redhat.com>
>> Cc: gdb-patches@sourceware.org, Eli Zaretskii <eliz@gnu.org>
>> Date: Fri, 30 Jul 2010 15:39:29 -0600
>>
>>>>>>> "Phil" == Phil Muldoon <pmuldoon@redhat.com> writes:
>>
>> Phil> Here is a patch.  What do you think?
>>
>> It looks reasonable to me, but please wait for Eli to comment.
> 
> It's fine.
> 
> Thanks.


FYI I checked this patch in.

http://sourceware.org/ml/gdb-cvs/2010-08/msg00009.html

Cheers,

Phil

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2010-08-03  9:55 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-19 10:40 [patch] Allow gdb.Values to become callable if appropriate Phil Muldoon
2010-07-20 22:17 ` Tom Tromey
2010-07-26  9:17   ` Phil Muldoon
2010-07-26 17:07     ` Eli Zaretskii
2010-07-27 13:16       ` Phil Muldoon
2010-07-27 18:24         ` Tom Tromey
2010-07-28  9:47           ` Phil Muldoon
2010-07-30 21:39             ` Tom Tromey
2010-07-31  7:08               ` Eli Zaretskii
2010-08-03  9:55                 ` Phil Muldoon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).