delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
DKIM-Filter: | OpenDKIM Filter v2.11.0 sourceware.org 9C92A3835427 |
DKIM-Signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=cygwin.com; |
s=default; t=1620376495; | |
bh=mqfklCDr4EtLxozSibhe+hH5cZ825EZFFHrk+VpT728=; | |
h=Date:To:Subject:In-Reply-To:References:List-Id:List-Unsubscribe: | |
List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: | |
From; | |
b=VL5bERtE2IB/LYaG2TVmnhNDp6FtMLhOojotwumZmHQODP7VIY+o4Y+iX6Wz0ZGrb | |
er/p/ktf2gFXs5wATNzawV07ZuQRwZoV4Rh1VsxKjjxED7fD0twt828Bcj6iFxwADY | |
TTpJ6qrzZ9YzxPaR9JiTHDg2/2QglGITX4SbsaJo= | |
X-Original-To: | cygwin AT cygwin DOT com |
Delivered-To: | cygwin AT cygwin DOT com |
DMARC-Filter: | OpenDMARC Filter v1.3.2 sourceware.org 274283846027 |
DKIM-Filter: | OpenDKIM Filter v2.10.3 conssluserg-04.nifty.com 1478XTtg031929 |
X-Nifty-SrcIP: | [124.155.50.190] |
Date: | Fri, 7 May 2021 17:33:40 +0900 |
To: | cygwin AT cygwin DOT com |
Subject: | Re: GDB looses pgrp setting in the terminal for debugged process |
after break. | |
Message-Id: | <20210507173340.9741cec791c2bfbb9edee4f2@nifty.ne.jp> |
In-Reply-To: | <6a422002-189a-baf8-5b65-fa822a0803a7@dronecode.org.uk> |
References: | <20210126121402 DOT 167ba4ca0d7d8b747feede9f AT nifty DOT ne DOT jp> |
<20210205193457 DOT cecc47a50865a59dc3f7041f AT nifty DOT ne DOT jp> | |
<20210206002654 DOT 17dca1106da610b2f7b7b077 AT nifty DOT ne DOT jp> | |
<20210503011625 DOT 8656a8f7187120ace0e375ef AT nifty DOT ne DOT jp> | |
<6a422002-189a-baf8-5b65-fa822a0803a7 AT dronecode DOT org DOT uk> | |
X-Mailer: | Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) |
Mime-Version: | 1.0 |
X-Spam-Status: | No, score=-10.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, |
DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, | |
RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, | |
TXREP autolearn=ham autolearn_force=no version=3.4.2 | |
X-Spam-Checker-Version: | SpamAssassin 3.4.2 (2018-09-13) on |
server2.sourceware.org | |
X-BeenThere: | cygwin AT cygwin DOT com |
X-Mailman-Version: | 2.1.29 |
List-Id: | General Cygwin discussions and problem reports <cygwin.cygwin.com> |
List-Unsubscribe: | <https://cygwin.com/mailman/options/cygwin>, |
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe> | |
List-Archive: | <https://cygwin.com/pipermail/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-request AT cygwin DOT com?subject=help> |
List-Subscribe: | <https://cygwin.com/mailman/listinfo/cygwin>, |
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe> | |
From: | Takashi Yano via Cygwin <cygwin AT cygwin DOT com> |
Reply-To: | Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp> |
Cc: | Jon Turney <jon DOT turney AT dronecode DOT org DOT uk> |
Errors-To: | cygwin-bounces AT cygwin DOT com |
Sender: | "Cygwin" <cygwin-bounces AT cygwin DOT com> |
On Thu, 6 May 2021 21:31:27 +0100 Jon Turney wrote: > On 02/05/2021 17:16, Takashi Yano via Cygwin wrote: > > On Sat, 6 Feb 2021 00:26:54 +0900 > > Takashi Yano wrote: > >> On Fri, 5 Feb 2021 19:34:57 +0900 > >> Takashi Yano wrote: > >>> On Tue, 26 Jan 2021 12:14:02 +0900 > >>> Takashi Yano wrote: > >>>> Hi GDB maintainer, > > Sorry! I meant to go back and look at this, but I forgot. > > Thanks for reminding me! Thanks for replying. > >>>> In GDB, debugged process cannot continue execution after break > >>>> if it reads stdin. > >>>> > >>>> With the following steps, cat is terminated with error. > >>>> > >>>> 1) Install coreutils-debuginfo package. > >>>> 2) Run "gdb cat" in console (command prompt), not in mintty. > >>>> 3) Enter "start" in gdb. > >>>> 4) Enter "cont" in gdb. > >>>> > >>>> This results in: > >>>> /usr/bin/cat: -: Input/output error > >>>> > >>>> Both gdb-9.2-1 and gdb-10.1-1(TEST) have this problem. > >>>> > >>>> I looked into this problem and found the cause is that the pgid > >>>> setting for /usr/bin/cat is lost after break. The following patch > >>>> for GDB source resolves the issue. In the following section, > >>>> winpid is passed to getpgid() rather than cygwin pid. Also, winpid > >>>> is passed to other POSIX system calls such as kill() elsewhere. > >>>> > [...] > >>>> > >>>> I hope the GDB maintainer will check it out. > >>>> > >>>> Addresses: https://cygwin.com/pipermail/cygwin-patches/2021q1/011018.html > >>> > >>> I have noticed that cygwin gdb essentially has the problem > >>> regarding terminal process group. > >>> > >>> Cygwin gdb uses CreateProcessW() to execute debugging process > > Yes, being half-aware that it's using the Win32 API to do the debugging > makes things awkward in gdb. > > At one stage, I did start writing some changes to gdb to use cygwin's > fork/exec to start the inferior, rather than CreateProcess, but that's > also awkward. > > >>> rather than exec(). If the debugging process is a cygwin process, > > This process is usually called the 'debugee' or 'the inferior'. > > >>> cygwin pid is assigned, however, if the debugging process is a > >>> non cygwin process, cygwin pid is not assigned. Therefore, there > >>> is no appropriate process group ID to set. > > I'm not sure how this scenario relates to the initial report which seems > to be about a process tree: > > cmd -> gdb (cygwin) -> cat (cygwin) > > ? No. This may be another (potential) problem. I mean: gdb (cygwin) -> program (non-cygwin) Non-cygwin program means the program compiled with non-cygwin compiler (e.g. mingw compiler). IIUC, gdb sets terminal pgrp to the debugee while the debugee is running and set terminal pgrp back to gdb itself when the debugee breaks. In the case obove, gdb sets terminal pgrp to pgid of cat when 'start' command is issued. When cat breaks at main(), gdb set terminal pgrp to pgid of gdb itself. Then, when 'cont' command is issued, gdb sets terminal pgrp to pgid of cat again. If the debugee is a non-cygwin program (rather than cat), there is no cygwin pgid for the debugee. Therefore, gdb cannot set terminal pgrp to appropriate value while the debugee is running. In that case, it may be the right thing not to set terminal pgrp to the debugee. The code below does that. What do you think? > >>> I wonder what is the right thing under that situation. Any idea? > >> > >> The patch below seems to be better than the previous one a bit. > >> > >> diff --git a/inflow.c.orig b/inflow.c > >> index 00b2235..fa7b408 100644 > >> --- a/inflow.c.orig > >> +++ b/inflow.c > >> @@ -40,6 +40,10 @@ > >> #include <sys/ioctl.h> > >> #endif > >> > >> +#ifdef __CYGWIN__ > >> +#include <sys/cygwin.h> > >> +#endif > >> + > >> #ifndef O_NOCTTY > >> #define O_NOCTTY 0 > >> #endif > >> @@ -367,7 +371,13 @@ child_terminal_inferior (struct target_ops *self) > >> time the inferior was running. See also comments > >> describing terminal_state::process_group. */ > >> #ifdef HAVE_GETPGID > >> +#ifdef __CYGWIN__ > >> + pid_t cygpid = cygwin_internal (CW_WINPID_TO_CYGWIN_PID, inf->pid); > >> + if (cygpid <= cygwin_internal (CW_MAX_CYGWIN_PID)) > >> + result = tcsetpgrp (0, getpgid (cygpid)); > >> +#else > >> result = tcsetpgrp (0, getpgid (inf->pid)); > >> +#endif > >> #else > >> result = tcsetpgrp (0, tinfo->process_group); > >> #endif > > > > I confirmed that gdb-10.2-1 (TEST) still has this problem. > > It certainly seems reasonable that we need to do this cygwin/windows pid > mapping somewhere. I would be happy if you could consider how to fix this issue. Thanks! -- Takashi Yano <takashi DOT yano AT nifty DOT ne DOT jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |