Re: Merge of nickrob-async-20060513 to mainline?

Nick Roberts
2006-08-30T21:34:38Z

> Just generate the diff between your mergepoint and branch, and then
> pipe it to diffstat, assuming you've got it installed.

Doing:

cvs diff -r nickrob-async-20060828-mergepoint gdb | diffstat

from the src directory gives the output below.

> Well, I meant from an internals perspective - like, a patch just
> summarizing the interface changes, if the whole patch is too big to
> post at once.

Instead of GDB waiting for the enferior to stop directly, it creates a signal
thread to do that. This means that the main thread can continue to process the
event loop. When the inferior does stop, the signal thread writes to a file
which GDB detects through handle_file_event in the event loop. It then calls
inferior_event_handler.

> > Also it still uses pthreads. You said previously that it should be done
> > in one process and, following a remark from Jim Ingham, that ptrace is
> > non-blocking. AFAICS the problem is that wait *is* blocking and I can't
> > see of a way to deal with that without using another thread.
>
> Ah, but wait is non-blocking. You have to (A) use WNOHANG, and (B) be
> careful to handle asynchronous SIGCHLD events. It's not especially
> difficult, I don't think, but the async event loop in gdb has always
> confused me; we'll have to figure out how to gather up sigchld/wait
> events.

The manpage just says:

WNOHANG
return immediately if no child has exited.

but what value does it return with? Does GDB ignore SIGCHLD events so it
can detect state changes through wait?

--
Nick http://www.inet.net.nz/~nickrob

New files:

gdb/PROBLEMS.async
gdb/README.async
gdb/TODO.async
gdb/async-nat-inferior.c
gdb/async-nat-inferior.h
gdb/async-nat-sigthread.c
gdb/async-nat-sigthread.h

Makefile.in | 13
gdb-mi.el | 2129 ++++++++++++++++++++++++--
gdb/ChangeLog | 3645 +--------------------------------------------
gdb/cli-out.c | 12
gdb/cli-out.h | 1
gdb/cli/cli-interp.c | 83 -
gdb/config/i386/nm-linux.h | 3
gdb/defs.h | 11
gdb/event-loop.c | 72
gdb/event-loop.h | 9
gdb/event-top.c | 93 +
gdb/event-top.h | 2
gdb/exec.c | 52
gdb/i386-linux-nat.c | 21
gdb/inf-child.c | 1
gdb/inf-loop.c | 46
gdb/inf-ptrace.c | 38
gdb/infcmd.c | 9
gdb/infrun.c | 26
gdb/interps.c | 40
gdb/interps.h | 3
gdb/linux-nat.c | 747 ++++-----
gdb/linux-thread-db.c | 4
gdb/main.c | 13
gdb/mi/mi-interp.c | 82 -
gdb/mi/mi-main.c | 371 ++++
gdb/mi/mi-main.h | 11
gdb/remote.c | 12
gdb/target.c | 31
gdb/target.h | 16
gdb/top.c | 25
gdb/tui/tui-hooks.c | 4
gdb/version.in | 2
gdb/wrapper.h | 2
linux.mh | 7
35 files changed, 3494 insertions(+), 4142 deletions(-)