public inbox for gdb-testers@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] [PR gdb/25939] Move push_target call earlier in procfs.c
@ 2020-07-22  0:16 gdb-buildbot
  2020-07-22  0:16 ` Failures on Fedora-x86_64-cc-with-index, branch master gdb-buildbot
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: gdb-buildbot @ 2020-07-22  0:16 UTC (permalink / raw)
  To: gdb-testers

*** TEST RESULTS FOR COMMIT cf6f3e86ded2cd950f59a0f2c164f2c953ef534b ***

commit cf6f3e86ded2cd950f59a0f2c164f2c953ef534b
Author:     Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
AuthorDate: Sun Jun 21 18:32:27 2020 +0200
Commit:     Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
CommitDate: Sun Jun 21 18:32:27 2020 +0200

    [PR gdb/25939] Move push_target call earlier in procfs.c
    
    Since the multi-target patch, the run command fails on Solaris with an
    assertion failure even for a trivial program:
    
    $ ./gdb -D ./data-directory ./hello
    GNU gdb (GDB) 10.0.50.20200106-git
    [...]
    Reading symbols from ./hello...
    (gdb) run
    Starting program: /vol/obj/gnu/gdb/gdb/reghunt/no-resync/122448/gdb/hello
    /vol/src/gnu/gdb/hg/master/reghunt/gdb/thread.c:336: internal-error:
    thread_info::thread_info(inferior*, ptid_t): Assertion `inf_ != NULL'
    failed.
    
    Here's the start of the corresponding stack trace:
    
    #0  internal_error (
        file=file@entry=0x966150
    "/vol/src/gnu/gdb/hg/master/reghunt/gdb/thread.c", line=line@entry=336,
    fmt=0x9ddb94 "%s: Assertion `%s' failed.")
        at /vol/src/gnu/gdb/hg/master/reghunt/gdb/gdbsupport/errors.c:51
    #1  0x0000000000ef81f4 in thread_info::thread_info (this=0x1212020,
        inf_=<optimized out>, ptid_=...)
        at /vol/src/gnu/gdb/hg/master/reghunt/gdb/thread.c:344
    #2  0x0000000000ef82cd in new_thread (inf=inf@entry=0x0, ptid=...)
        at /vol/src/gnu/gdb/hg/master/reghunt/gdb/thread.c:239
    #3  0x0000000000efac3c in add_thread_silent (
        targ=targ@entry=0x11b0940 <the_procfs_target>, ptid=...)
        at /vol/src/gnu/gdb/hg/master/reghunt/gdb/thread.c:304
    #4  0x0000000000d90692 in procfs_target::create_inferior (
        this=0x11b0940 <the_procfs_target>,
        exec_file=0x13dbef0
    "/vol/obj/gnu/gdb/gdb/reghunt/no-resync/122448/gdb/hello", allargs="",
    env=0x13c48f0, from_tty=<optimized out>)
        at /vol/src/gnu/gdb/hg/master/reghunt/gdb/gdbsupport/ptid.h:47
    #5  0x0000000000c84e64 in run_command_1 (args=<optimized out>, from_tty=1,
        run_how=run_how@entry=RUN_NORMAL)
        at /vol/gcc-9/include/c++/9.1.0/bits/basic_string.h:263
    #6  0x0000000000c85007 in run_command (args=<optimized out>,
        from_tty=<optimized out>)
        at /vol/src/gnu/gdb/hg/master/reghunt/gdb/infcmd.c:687
    
    Looking closer, I found that in add_thread_silent as called from
    procfs.c (procfs_target::create_inferior) find_inferior_ptid returns
    NULL.  The all_inferiors (targ) iterator comes up empty.
    
    Going from there, I see that in add_thread_silent
    
    m_target_stack = {m_top = file_stratum, m_stack = {0x20190e0
    <the_dummy_target>, 0x200b8c0 <exec_ops>, 0x0, 0x0, 0x0, 0x0, 0x0}}}
    
    i.e. the_procfs_target is missing compared to the_amd64_linux_nat_target
    on Linux/x86_64.
    
    Moving the push_target call earlier allows debugging to get over the
    initial assertion failure.  I run instead into
    
    procfs: couldn't find pid 0 in procinfo list.
    
    which is fixed by
    
            https://sourceware.org/pipermail/gdb-patches/2020-June/169674.html
    
    Both patches tested together on amd64-pc-solaris2.11.
    
            PR gdb/25939
            * procfs.c (procfs_target::procfs_init_inferior): Move push_target
            call ...
            (procfs_target::create_inferior): ... here.

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index d03aae63ce..1f614d5a42 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2020-06-21  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+	PR gdb/25939
+	* procfs.c (procfs_target::procfs_init_inferior): Move push_target
+	call ...
+	(procfs_target::create_inferior): ... here.
+
 2020-06-21  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
 
 	* exec.c (validate_exec_file): Ensure the build-id is up to
diff --git a/gdb/procfs.c b/gdb/procfs.c
index 71472a5e38..7abd6b97d0 100644
--- a/gdb/procfs.c
+++ b/gdb/procfs.c
@@ -2781,11 +2781,6 @@ procfs_target::procfs_init_inferior (int pid)
   int fail;
   int lwpid;
 
-  /* This routine called on the parent side (GDB side)
-     after GDB forks the inferior.  */
-  if (!target_is_pushed (this))
-    push_target (this);
-
   pi = create_procinfo (pid, 0);
   if (pi == NULL)
     perror (_("procfs: out of memory in 'init_inferior'"));
@@ -3006,6 +3001,9 @@ procfs_target::create_inferior (const char *exec_file,
       shell_file = tryname;
     }
 
+  if (!target_is_pushed (this))
+    push_target (this);
+
   pid = fork_inferior (exec_file, allargs, env, procfs_set_exec_trap,
 		       NULL, NULL, shell_file, NULL);
 


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

end of thread, other threads:[~2020-07-22  2:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-22  0:16 [binutils-gdb] [PR gdb/25939] Move push_target call earlier in procfs.c gdb-buildbot
2020-07-22  0:16 ` Failures on Fedora-x86_64-cc-with-index, branch master gdb-buildbot
2020-07-22  0:36 ` Failures on Fedora-x86_64-m32, " gdb-buildbot
2020-07-22  0:51 ` Failures on Fedora-x86_64-m64, " gdb-buildbot
2020-07-22  1:36 ` Failures on Fedora-x86_64-native-extended-gdbserver-m64, " gdb-buildbot
2020-07-22  1:55 ` Failures on Fedora-x86_64-native-gdbserver-m32, " gdb-buildbot
2020-07-22  2:15 ` Failures on Fedora-x86_64-native-gdbserver-m64, " gdb-buildbot

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