gdb: preserve `|` in connection details string
authorAndrew Burgess <aburgess@redhat.com>
Wed, 12 Jan 2022 17:13:38 +0000 (17:13 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Tue, 18 Jan 2022 11:45:52 +0000 (11:45 +0000)
commitcced7cacecad104fff03e94814a3fca1d304b16f
tree667876bd755eafb951b092ee25d4a79bda8793f5
parent709a3d07f330cc75031529f8952ceb19d7095df3
gdb: preserve `|` in connection details string

Consider this GDB session:

  $ gdb -q
  (gdb) target remote  | gdbserver - ~/tmp/hello.x
  Remote debugging using | gdbserver - ~/tmp/hello.x
  ... snip ...
  (gdb) info connections
    Num  What                              Description
  * 1    remote gdbserver - ~/tmp/hello.x  Remote target using gdb-specific protocol
  (gdb) python conn = gdb.selected_inferior().connection
  (gdb) python print(conn.details)
  gdbserver - ~/tmp/hello.x
  (gdb)

I think there are two things wrong here, first in the "What" column of
the 'info connections' output, I think the text should be:

  remote | gdbserver - ~/tmp/hello.x

to correctly show the user how the connection was established.  And in
a similar fashion, I think that the `details` string of the
gdb.TargetConnection object should be:

  | gdbserver - ~/tmp/hello.x

This commit makes this change.  Currently the '|' is detected and
removed in gdb/serial.c.  The string passed to the pipe_ops
structure (from gdb/ser-pipe.c), doesn't then, contain the `|`, this
is instead implied by the fact that it is a pipes based implementation
of the serial_ops interface.

After this commit we still detect the `|` in gdb/serial.c, but we now
store the full string (including the `|`) in the serial::name member
variable.

For pipe based serial connections, this name is only used for
displaying the two fields I mention above, and in pipe_open (from
gdb/ser-pipe.c), and in pipe_open, we now know to skip over the `|`.

The benefit I see from this change is that GDB's output now more
accurately reflects the commands used to start a target, thus making
it easier for a user to understand what is going on.
gdb/ser-pipe.c
gdb/serial.c
gdb/testsuite/gdb.server/server-pipe.exp [new file with mode: 0644]