public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Andrew Burgess <andrew.burgess@embecosm.com>
To: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v2] gdb/python: add a 'connection_num' attribute to Inferior objects
Date: Tue, 27 Apr 2021 10:10:10 +0100	[thread overview]
Message-ID: <20210427091010.GZ2610@embecosm.com> (raw)
In-Reply-To: <1618239868-11211-1-git-send-email-tankut.baris.aktemur@intel.com>

* Tankut Baris Aktemur via Gdb-patches <gdb-patches@sourceware.org> [2021-04-12 17:04:28 +0200]:

> Define a 'connection_num' attribute for Inferior objects.  The
> read-only attribute is the ID of the process stratum target of an
> inferior, as printed by "info inferiors".
> 
> gdb/ChangeLog:
> 2021-04-12  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
> 
> 	* python/py-inferior.c (infpy_get_connection_num): New function.
> 	(inferior_object_getset): Add a new element for 'connection_num'.
> 	* NEWS: Mention the 'connection_num' attribute of Inferior objects.
> 
> gdb/doc/ChangeLog:
> 2021-04-12  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
> 
> 	* python.texi (Inferiors In Python): Mention the 'connection_num'
> 	attribute.
> 
> gdb/testsuite/ChangeLog:
> 2021-04-12  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>
> 
> 	* gdb.python/py-inferior.exp: Add test cases for
> 	* 'connection_num'.

Thanks for looking at this, I had a couple of minor comments.

> ---
>  gdb/NEWS                                 |  5 +++++
>  gdb/doc/python.texi                      |  5 +++++
>  gdb/python/py-inferior.c                 | 16 +++++++++++++++
>  gdb/testsuite/gdb.python/py-inferior.exp | 25 +++++++++++++++++++++++-
>  4 files changed, 50 insertions(+), 1 deletion(-)
> 
> diff --git a/gdb/NEWS b/gdb/NEWS
> index 6cf76a14317..bdc0e2c6593 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -138,6 +138,11 @@ QMemTags
>    Request the remote to store the specified allocation tags to the requested
>    memory range.
>  
> +* Python API
> +
> +  ** Inferior objects now contain a read-only 'connection_num' attribute that
> +     gives the ID of the Inferior's process stratum target.

I don't think you should mention "process stratum" here.  The NEWS
file is for users to read, and "stratum" is not mentioned anywhere in
the GDB manual (or in this NEWS file).

How about:

  ** Inferior objects now contain a read-only 'connection_num' attribute that
     gives the connection number as seen in 'info connections' and
     'info inferiors'.

> +
>  *** Changes in GDB 10
>  
>  * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
> diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
> index 9135d415dd1..b459ff245d4 100644
> --- a/gdb/doc/python.texi
> +++ b/gdb/doc/python.texi
> @@ -2989,6 +2989,11 @@ A @code{gdb.Inferior} object has the following attributes:
>  ID of inferior, as assigned by GDB.
>  @end defvar
>  
> +@defvar Inferior.connection_num
> +ID of inferior's connection (i.e.@: process target), as assigned by
> +@value{GDBN}.
> +@end defvar
> +
>  @defvar Inferior.pid
>  Process ID of the inferior, as assigned by the underlying operating
>  system.
> diff --git a/gdb/python/py-inferior.c b/gdb/python/py-inferior.c
> index a3d5952a10b..a7fac34f3d6 100644
> --- a/gdb/python/py-inferior.c
> +++ b/gdb/python/py-inferior.c
> @@ -426,6 +426,20 @@ infpy_get_num (PyObject *self, void *closure)
>    return gdb_py_object_from_longest (inf->inferior->num).release ();
>  }
>  
> +static PyObject *
> +infpy_get_connection_num (PyObject *self, void *closure)

This function should have a header comment.

Otherwise, this looks good.

Thanks,
Andrew

> +{
> +  inferior_object *inf = (inferior_object *) self;
> +
> +  INFPY_REQUIRE_VALID (inf);
> +
> +  process_stratum_target *target = inf->inferior->process_target ();
> +  if (target == nullptr)
> +    Py_RETURN_NONE;
> +
> +  return PyLong_FromLong (target->connection_number);
> +}
> +
>  static PyObject *
>  infpy_get_pid (PyObject *self, void *closure)
>  {
> @@ -928,6 +942,8 @@ gdbpy_initialize_inferior (void)
>  static gdb_PyGetSetDef inferior_object_getset[] =
>  {
>    { "num", infpy_get_num, NULL, "ID of inferior, as assigned by GDB.", NULL },
> +  { "connection_num", infpy_get_connection_num, NULL,
> +    "ID of inferior's connection, as assigned by GDB.", NULL },
>    { "pid", infpy_get_pid, NULL, "PID of inferior, as assigned by the OS.",
>      NULL },
>    { "was_attached", infpy_get_was_attached, NULL,
> diff --git a/gdb/testsuite/gdb.python/py-inferior.exp b/gdb/testsuite/gdb.python/py-inferior.exp
> index 9df74e05182..2252215b721 100644
> --- a/gdb/testsuite/gdb.python/py-inferior.exp
> +++ b/gdb/testsuite/gdb.python/py-inferior.exp
> @@ -51,6 +51,7 @@ gdb_py_test_silent_cmd "python i0 = inferiors\[0\]" "get first inferior" 0
>  
>  gdb_test "python print ('result = %s' % (i0 == inferiors\[0\]))" " = True" "test equality comparison (true)"
>  gdb_test "python print ('result = %s' % i0.num)" " = \[0-9\]+" "test Inferior.num"
> +gdb_test "python print ('result = %s' % i0.connection_num)" " = \[0-9\]+" "test Inferior.connection_num"
>  gdb_test "python print ('result = %s' % i0.pid)" " = \[0-9\]+" "test Inferior.pid"
>  gdb_test "python print ('result = %s' % i0.was_attached)" " = False" "test Inferior.was_attached"
>  gdb_test "python print (i0.threads ())" "\\(<gdb.InferiorThread object at 0x\[\[:xdigit:\]\]+>,\\)" "test Inferior.threads"
> @@ -262,6 +263,8 @@ with_test_prefix "is_valid" {
>      # correctly.
>      gdb_test "python print (inf_list\[1\].num)" \
>  	"RuntimeError: Inferior no longer exists.*"
> +    gdb_test "python print (inf_list\[1\].connection_num)" \
> +	"RuntimeError: Inferior no longer exists.*"
>      gdb_test "python print (inf_list\[1\].pid)" \
>  	"RuntimeError: Inferior no longer exists.*"
>      gdb_test "python print (inf_list\[1\].was_attached)" \
> @@ -278,10 +281,30 @@ with_test_prefix "is_valid" {
>  with_test_prefix "selected_inferior" {
>      gdb_test "inferior 1" ".*" "switch to first inferior"
>      gdb_test "py print (gdb.selected_inferior().num)" "1" "first inferior selected"
> +    gdb_test "py print (gdb.selected_inferior().connection_num)" "1" \
> +	"first inferior's connection"
> +    # Figure out if inf 1 has a native target.
> +    set inf_1_is_native [gdb_is_target_native]
>  
> -    gdb_test "add-inferior" "Added inferior 3 on connection .*" "create new inferior"
> +    gdb_test "add-inferior -no-connection" "Added inferior 3" "create new inferior"
>      gdb_test "inferior 3" ".*" "switch to third inferior"
>      gdb_test "py print (gdb.selected_inferior().num)" "3" "third inferior selected"
> +    gdb_test "py print (gdb.selected_inferior().connection_num)" "None" \
> +	"third inferior's None connection"
> +    gdb_test "target native" "Done.  Use the \"run\" command to start a process." \
> +	"target for the third inferior"
> +
> +    # If inf 1 has a native target, inf 3's target is shared with 1's.
> +    # Otherwise, it must have created a new target with a new number.
> +    if {$inf_1_is_native} {
> +	set expected_connection_num 1
> +    } else {
> +	set expected_connection_num 2
> +    }
> +    gdb_test "py print (gdb.selected_inferior().connection_num)" \
> +	"$expected_connection_num" \
> +	"third inferior's native connection"
> +
>      gdb_test "inferior 1" ".*" "switch back to first inferior"
>      gdb_test_no_output "remove-inferiors 3" "remove second inferior"
>  }
> -- 
> 2.17.1
> 

  parent reply	other threads:[~2021-04-27  9:10 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-12 15:04 Tankut Baris Aktemur
2021-04-27  6:44 ` Aktemur, Tankut Baris
2021-04-27  9:10 ` Andrew Burgess [this message]
2021-04-27 17:15   ` Aktemur, Tankut Baris
2021-05-04  8:22     ` Aktemur, Tankut Baris
2021-05-11  7:22       ` Aktemur, Tankut Baris
2021-05-13 18:31         ` Simon Marchi
2021-05-14 10:13           ` Aktemur, Tankut Baris

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=20210427091010.GZ2610@embecosm.com \
    --to=andrew.burgess@embecosm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=tankut.baris.aktemur@intel.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).