GDB HEAD (partly) broken for GNU/Hurd

Pedro Alves pedro@codesourcery.com
Sat Oct 11 02:50:00 GMT 2008


On Saturday 11 October 2008 00:27:06, Thomas Schwinge wrote:
> On HEAD, when undoing this change (and additionally commenting out the
> two ``stop_soon = X'' lines in that file), things are fine again.
> 
> As most of GDB's internals are a big black box to me, I need help here.
> :-)
> 

Eh, I did point out at the time of that change that gnu-nat.c does
things a bit different.  :-)

Off-hand advice:

One thing that the hurd has a bit different, is that we have
multi-threading when going through the shell.

Could it be that target_wait is returning a specific ptid here:

fork_child.c:startup_inferior:

  while (1)
    {
      int resume_signal = TARGET_SIGNAL_0;
      ptid_t resume_ptid;

      struct target_waitstatus ws;
      memset (&ws, 0, sizeof (ws));
      resume_ptid = target_wait (pid_to_ptid (-1), &ws);
      ^^^^^^^^^^^


Hence this a bit below:

	  if (--pending_execs == 0)
	    break;

	  /* Just make it go on.  */
	  target_resume (resume_ptid, 0, TARGET_SIGNAL_0);
                         ^^^^^^^^^^^
	}
    }

Doesn't resume the whole shell?

If you make this change:
-     target_resume (resume_ptid, 0, TARGET_SIGNAL_0);
+     target_resume (minus_one_ptid, 0, TARGET_SIGNAL_0);

The other thing I suggest to look at, is to make sure the
local `pending_execs' and the `gnu-nat.c:struct inf'::pending_execs
aren't in conflict, but it doesn't look like it.

Hope this helps.

-- 
Pedro Alves



More information about the Gdb mailing list