f809832 Solaris, target_wait(), don't rely on inferior_ptid

Authored and Committed by palves 3 years ago
    Solaris, target_wait(), don't rely on inferior_ptid
    
    Debugging on Solaris is broken, with the procfs target backend failing
    with:
    
     procfs: couldn't find pid 0 in procinfo list.
    
    as soon as you start a program.
    
    The problem is procfs_target::wait assuming that inferior_ptid is
    meaningful on entry, but, since the multi-target series, inferior_ptid
    is null_ptid before we call target_wait, in infrun.c:
    
      static ptid_t
      do_target_wait_1 (inferior *inf, ptid_t ptid,
    		    target_waitstatus *status, int options)
      {
    ...
        /* We know that we are looking for an event in the target of inferior
           INF, but we don't know which thread the event might come from.  As
           such we want to make sure that INFERIOR_PTID is reset so that none of
           the wait code relies on it - doing so is always a mistake.  */
        switch_to_inferior_no_thread (inf);
    
    This patch tweaks the backend to remove the assumption that
    inferior_ptid points at something.  sol-thread.c (the thread_stratum
    that sits on top of procfs.c) also has the same issue.
    
    Some spots in procfs_target::wait were returning
    TARGET_WAITKIND_SPURIOUS+inferior_ptid.  This commit replaces those
    with waiting again without returning to the core.  This fixes the
    relying on inferior_ptid, and also should fix the issue discussed
    here:
      https://sourceware.org/pipermail/gdb/2020-May/048616.html
      https://sourceware.org/pipermail/gdb/2020-June/048660.html
    
    gdb/ChangeLog:
    2020-06-22  Pedro Alves  <palves@redhat.com>
    
    	PR gdb/25939
    	* procfs.c (procfs_target::wait): Don't reference inferior_ptid.
    	Use the current inferior instead.  Don't return
    	TARGET_WAITKIND_SPURIOUS/inferior_ptid -- instead continue and
    	wait again.
    	* sol-thread.c (sol_thread_target::wait): Don't reference
    	inferior_ptid.
    	(ps_lgetregs, ps_lsetregs, ps_lgetfpregs, ps_lsetfpregs)
    	(sol_update_thread_list_callback): Use the current inferior's pid
    	instead of inferior_ptid.
        
file modified
+13 -0
file modified
+17 -28
file modified
+10 -20