public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 00/28] Decouple inferior_ptid/inferior_thread(); dup ptids in thread list (PR/25412)
@ 2020-04-14 17:54 Pedro Alves
  2020-04-14 17:54 ` [PATCH 01/28] Don't write to inferior_ptid in linux_get_siginfo_data Pedro Alves
                   ` (32 more replies)
  0 siblings, 33 replies; 72+ messages in thread
From: Pedro Alves @ 2020-04-14 17:54 UTC (permalink / raw)
  To: gdb-patches

In PR/25412, Simon noticed that after the multi-target series, the
tid-reuse.exp testcase manages to create a duplicate thread in the
thread list.  Or rather, two threads with the same PTID.

This in turn exposes a design problem in GDB.  The inferior_thread()
function looks up the current thread based on inferior_ptid:

 struct thread_info*
 inferior_thread (void)
 {
   struct thread_info *tp = find_thread_ptid (current_inferior (), inferior_ptid);
   gdb_assert (tp);
   return tp;
 }

But if there can be more than one thread in the thread list with the
same ptid_t, inferior_thread() may well return the wrong thread.

This series fixes this by making the current thread be a global
thread_info pointer that is written to directly by switch_to_thread,
etc., and making inferior_thread() return that pointer, instead of
having inferior_thread() lookup up the inferior_ptid thread, by
ptid_t.  You can look at this as a continuation of the effort of using
more thread_info pointers instead of ptids when possible.

This change required auditing the whole codebase for places where we
were writing to inferior_ptid directly to change the current thread,
and change them to use switch_to_thread instead or one of its
siblings, because otherwise inferior_thread() and inferior_ptid would
get out of sync and inferior_thread() would return a thread unrelated
to the new inferior_ptid we wanted to switch to.  That was all
(hopefully) done in all the patches leading up to the last one.

After this, inferior_ptid still exists, but it is mostly read-only and
mainly used by target backend code.  It is also relied on by a number
of target methods as a global input argument.  E.g., the target_resume
interface and the memory reading routines -- we still need it there
because we need to be able to access memory off of processes for which
we don't have a corresponding inferior/thread object, like when
handling forks.  Maybe we could pass down a context explicitly to
target_read_memory, etc.

Most of the host-/native-specific code here is untested.  I did my
best, but I won't be surprised if more tweaking is necessary.

Testing on native x86_64 GNU/Linux is regression free for me.  Testing
against gdbserver has regressed significantly in the past months and
is becoming difficult to run with a high number of long timeout
sequences; really looks like people aren't paying much attention to
that.  I think this series doesn't regress gdbserver, but it's getting
hard to tell.  :-/

Pedro Alves (28):
  Don't write to inferior_ptid in linux_get_siginfo_data
  gcore, handle exited threads better
  Refactor delete_program_space as a destructor
  Don't write to inferior_ptid in gdbarch-selftests.c, mock
    address_space too
  Don't write to inferior_ptid in inf-ptrace.c
  Don't write to inferior_ptid in target.c
  Don't write to inferior_ptid in infrun.c
  Don't write to inferior_ptid in procfs.c
  Don't write to inferior_ptid in tracefile-tfile.c
  Don't write to inferior_ptid in tracectf.c
  Don't write to inferior_ptid in remote.c
  Don't write to inferior_ptid in remote-sim.c
  Don't write to inferior_ptid in nto-procfs.c
  Don't write to inferior_ptid in go32-nat.c
  Don't write to inferior_ptid in gnu-nat.c
  Don't write to inferior_ptid in darwin-nat.c
  Don't write to inferior_ptid in corelow.c
  Don't write to inferior_ptid in bsd-kvm.c
  Don't write to inferior_ptid in btrace_fetch
  Don't write to inferior_ptid in bsd-kvm.c
  Don't write to inferior_ptid in fork-child.c
  Don't write to inferior_ptid in go32-nat.c
  Don't write to inferior_ptid in remote-sim.c
  Don't write to inferior_ptid in windows-nat.c, part I
  Don't write to inferior_ptid in windows-nat.c, part II
  Don't write to inferior_ptid in ravenscar-thread.c
  Don't write to inferior_ptid in aix-thread.c
  Decouple inferior_ptid/inferior_thread(); dup ptids in thread list
    (PR/25412)

 gdb/aix-thread.c        |   2 +-
 gdb/bsd-kvm.c           |   6 +--
 gdb/btrace.c            |   6 ---
 gdb/corelow.c           |  20 +++++-----
 gdb/darwin-nat.c        |  16 ++++----
 gdb/fork-child.c        |   3 --
 gdb/gdbarch-selftests.c |  17 ++++----
 gdb/gdbthread.h         |  17 ++++----
 gdb/gnu-nat.c           |  14 +++----
 gdb/go32-nat.c          |   8 +---
 gdb/inf-ptrace.c        |  19 +++++----
 gdb/inferior.c          |   2 +-
 gdb/infrun.c            | 101 +++++++++++++++++++-----------------------------
 gdb/linux-tdep.c        |  64 ++++++++++++++++--------------
 gdb/nat/windows-nat.c   |   1 -
 gdb/nat/windows-nat.h   |   3 --
 gdb/nto-procfs.c        |  24 ++++++------
 gdb/procfs.c            |  18 ++++-----
 gdb/progspace.c         |  79 ++++++++++++++++++++-----------------
 gdb/progspace.h         |   4 --
 gdb/ravenscar-thread.c  |  49 ++++++++++++-----------
 gdb/remote-sim.c        |  10 ++---
 gdb/remote.c            |  34 ++++++++--------
 gdb/target.c            |   2 +-
 gdb/thread.c            |  97 ++++++++++++++++------------------------------
 gdb/tracectf.c          |   7 ++--
 gdb/tracefile-tfile.c   |   7 ++--
 gdb/windows-nat.c       |  68 +++++++++++++++-----------------
 28 files changed, 315 insertions(+), 383 deletions(-)


base-commit: dd1cab0694592099854e66467319253954c93764
-- 
2.14.5


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

end of thread, other threads:[~2020-07-08  0:35 UTC | newest]

Thread overview: 72+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-14 17:54 [PATCH 00/28] Decouple inferior_ptid/inferior_thread(); dup ptids in thread list (PR/25412) Pedro Alves
2020-04-14 17:54 ` [PATCH 01/28] Don't write to inferior_ptid in linux_get_siginfo_data Pedro Alves
2020-04-14 17:54 ` [PATCH 02/28] gcore, handle exited threads better Pedro Alves
2020-04-14 17:54 ` [PATCH 03/28] Refactor delete_program_space as a destructor Pedro Alves
2020-04-15 15:54   ` Simon Marchi
2020-04-16 14:47     ` Pedro Alves
2020-04-14 17:54 ` [PATCH 04/28] Don't write to inferior_ptid in gdbarch-selftests.c, mock address_space too Pedro Alves
2020-04-14 17:54 ` [PATCH 05/28] Don't write to inferior_ptid in inf-ptrace.c Pedro Alves
2020-04-14 17:54 ` [PATCH 06/28] Don't write to inferior_ptid in target.c Pedro Alves
2020-04-14 17:54 ` [PATCH 07/28] Don't write to inferior_ptid in infrun.c Pedro Alves
2020-04-14 17:54 ` [PATCH 08/28] Don't write to inferior_ptid in procfs.c Pedro Alves
2020-04-14 17:54 ` [PATCH 09/28] Don't write to inferior_ptid in tracefile-tfile.c Pedro Alves
2020-04-14 17:54 ` [PATCH 10/28] Don't write to inferior_ptid in tracectf.c Pedro Alves
2020-04-14 17:54 ` [PATCH 11/28] Don't write to inferior_ptid in remote.c Pedro Alves
2020-04-14 17:54 ` [PATCH 12/28] Don't write to inferior_ptid in remote-sim.c Pedro Alves
2020-04-14 17:54 ` [PATCH 13/28] Don't write to inferior_ptid in nto-procfs.c Pedro Alves
2020-04-14 17:54 ` [PATCH 14/28] Don't write to inferior_ptid in go32-nat.c Pedro Alves
2020-04-14 17:54 ` [PATCH 15/28] Don't write to inferior_ptid in gnu-nat.c Pedro Alves
2020-04-14 17:54 ` [PATCH 16/28] Don't write to inferior_ptid in darwin-nat.c Pedro Alves
2020-04-16  1:33   ` Simon Marchi
2020-04-16 19:23     ` Pedro Alves
2020-04-14 17:54 ` [PATCH 17/28] Don't write to inferior_ptid in corelow.c Pedro Alves
2020-04-14 17:54 ` [PATCH 18/28] Don't write to inferior_ptid in bsd-kvm.c Pedro Alves
2020-04-14 17:54 ` [PATCH 19/28] Don't write to inferior_ptid in btrace_fetch Pedro Alves
2020-04-15  4:52   ` Metzger, Markus T
2020-04-15 14:13     ` Pedro Alves
2020-04-15 15:17       ` Metzger, Markus T
2020-04-14 17:54 ` [PATCH 20/28] Don't write to inferior_ptid in bsd-kvm.c Pedro Alves
2020-04-14 17:54 ` [PATCH 21/28] Don't write to inferior_ptid in fork-child.c Pedro Alves
2020-04-14 17:54 ` [PATCH 22/28] Don't write to inferior_ptid in go32-nat.c Pedro Alves
2020-04-14 17:54 ` [PATCH 23/28] Don't write to inferior_ptid in remote-sim.c Pedro Alves
2020-04-16  0:53   ` Simon Marchi
2020-04-16 14:58     ` Pedro Alves
2020-04-14 17:54 ` [PATCH 24/28] Don't write to inferior_ptid in windows-nat.c, part I Pedro Alves
2020-04-14 17:54 ` [PATCH 25/28] Don't write to inferior_ptid in windows-nat.c, part II Pedro Alves
2020-04-14 22:41   ` Hannes Domani
2020-04-15 15:08     ` Pedro Alves
2020-04-15 15:32       ` Hannes Domani
2020-04-14 17:54 ` [PATCH 26/28] Don't write to inferior_ptid in ravenscar-thread.c Pedro Alves
2020-04-17 18:45   ` Tom Tromey
2020-06-18 20:00     ` Pedro Alves
2020-06-18 21:38       ` Tom Tromey
2020-04-14 17:54 ` [PATCH 27/28] Don't write to inferior_ptid in aix-thread.c Pedro Alves
2020-04-14 17:54 ` [PATCH 28/28] Decouple inferior_ptid/inferior_thread(); dup ptids in thread list (PR/25412) Pedro Alves
2020-04-16 19:39   ` Simon Marchi
2020-04-16 20:12     ` Pedro Alves
2020-04-16 20:38       ` Simon Marchi
2020-04-17 10:29         ` Pedro Alves
2020-04-17 14:06           ` Simon Marchi
2020-04-17 16:46             ` Pedro Alves
2020-04-17 18:53   ` Tom Tromey
2020-06-18 19:59     ` Pedro Alves
2020-06-23 13:37   ` Andrew Burgess
2020-06-23 14:26     ` Pedro Alves
2020-06-23 15:38       ` [PATCH] Fix "maint selftest" regression, add struct, scoped_mock_context Pedro Alves
2020-06-23 16:34         ` Andrew Burgess
2020-06-23 17:58           ` Pedro Alves
2020-04-14 18:46 ` [PATCH 00/28] Decouple inferior_ptid/inferior_thread(); dup ptids in thread list (PR/25412) Hannes Domani
2020-04-14 19:24   ` Pedro Alves
2020-04-15 15:04     ` Simon Marchi
2020-04-16 13:41       ` Pedro Alves
2020-04-15 14:46 ` Simon Marchi
2020-04-15 15:33   ` Pedro Alves
2020-04-15 15:42     ` Simon Marchi
2020-04-17 20:20 ` Tom Tromey
2020-06-18 20:00   ` Pedro Alves
2020-06-18 22:30 ` Pedro Alves
2020-07-07 23:16 ` John Baldwin
2020-07-07 23:53   ` Pedro Alves
2020-07-08  0:19     ` John Baldwin
2020-07-08  0:10   ` Multiprocess on FreeBSD John Baldwin
2020-07-08  0:34     ` John Baldwin

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).