From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 80235 invoked by alias); 26 Dec 2016 21:34:52 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 80200 invoked by uid 89); 26 Dec 2016 21:34:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=10310, sk:observe, international X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 26 Dec 2016 21:34:44 +0000 Received: from svr-orw-mbx-03.mgc.mentorg.com ([147.34.90.203]) by relay1.mentorg.com with esmtp id 1cLcup-0002S8-6O from Luis_Gustavo@mentor.com ; Mon, 26 Dec 2016 13:34:43 -0800 Received: from [172.30.6.27] (147.34.91.1) by svr-orw-mbx-03.mgc.mentorg.com (147.34.90.203) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Mon, 26 Dec 2016 13:34:39 -0800 From: Luis Machado Subject: Re: [PATCH 3/6] Share parts of gdb/inflow.c with gdbserver Reply-To: Luis Machado References: <1482464361-4068-1-git-send-email-sergiodj@redhat.com> <1482464361-4068-4-git-send-email-sergiodj@redhat.com> To: Sergio Durigan Junior , GDB Patches CC: Message-ID: Date: Mon, 26 Dec 2016 21:34:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: <1482464361-4068-4-git-send-email-sergiodj@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) To svr-orw-mbx-03.mgc.mentorg.com (147.34.90.203) X-IsSubscribed: yes X-SW-Source: 2016-12/txt/msg00421.txt.bz2 On 12/22/2016 09:39 PM, Sergio Durigan Junior wrote: > After sharing parts of gdb/terminal.h, it is also needed to share the > two functions on gdb/inflow.c that are going to be needed by the > fork_inferior sharing. They are 'gdb_setpgid' and the new > 'have_job_control'. > > gdb/ChangeLog: > 2016-12-22 Sergio Durigan Junior > > * Makefile.in (SFILES): Add "common/common-inflow.c". > (COMMON_OBS): Add "common/common-inflow.o". > * common/common-inflow.c: New file, with contents from > "gdb/inflow.c". > * inflow.c (gdb_setpgid): Move to "common/common-inflow.c". > (_initialize_inflow): Move setting of "job_control" to a specific > function on "common/common-inflow.c". > * utils.c (job_control): Delete. > > gdb/gdbserver/ChangeLog: > 2016-12-22 Sergio Durigan Junior > > * Makefile.in: Add rule for "common-inflow.o". > (SFILE): Add "common/common-inflow.c". > (OBS): Add "common-inflow.o". > --- > gdb/Makefile.in | 2 + > gdb/common/common-inflow.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++ > gdb/gdbserver/Makefile.in | 5 +++ > gdb/inflow.c | 63 +------------------------------- > gdb/utils.c | 4 -- > 5 files changed, 100 insertions(+), 65 deletions(-) > create mode 100644 gdb/common/common-inflow.c > > diff --git a/gdb/Makefile.in b/gdb/Makefile.in > index 51c0f73..8372b4a 100644 > --- a/gdb/Makefile.in > +++ b/gdb/Makefile.in > @@ -1195,6 +1195,7 @@ SFILES = \ > common/fileio.c \ > common/filestuff.c \ > common/format.c \ > + common/common-inflow.c \ > common/gdb_vecs.c \ > common/new-op.c \ > common/print-utils.c \ > @@ -1622,6 +1623,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \ > common-agent.o \ > common-debug.o \ > common-exceptions.o \ > + common-inflow.o \ > common-regcache.o \ > common-utils.o \ > complaints.o \ > diff --git a/gdb/common/common-inflow.c b/gdb/common/common-inflow.c > new file mode 100644 > index 0000000..595eb51 > --- /dev/null > +++ b/gdb/common/common-inflow.c > @@ -0,0 +1,91 @@ > +/* Low level interface to ptrace, for GDB when running under Unix. > + Copyright (C) 1986-2016 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > +#include "common-defs.h" > +#include "common-terminal.h" > + > +/* Nonzero if we have job control. */ > + Spurious newline? > +int job_control; > + > +/* This is here because this is where we figure out whether we (probably) > + have job control. Just using job_control only does part of it because > + setpgid or setpgrp might not exist on a system without job control. > + It might be considered misplaced (on the other hand, process groups and > + job control are closely related to ttys). > + > + For a more clean implementation, in libiberty, put a setpgid which merely > + calls setpgrp and a setpgrp which does nothing (any system with job control > + will have one or the other). */ newline between comment and function. > +int > +gdb_setpgid (void) > +{ > + int retval = 0; > + > + if (job_control) > + { > +#if defined (HAVE_TERMIOS) || defined (TIOCGPGRP) > +#ifdef HAVE_SETPGID > + /* The call setpgid (0, 0) is supposed to work and mean the same > + thing as this, but on Ultrix 4.2A it fails with EPERM (and > + setpgid (getpid (), getpid ()) succeeds). */ > + retval = setpgid (getpid (), getpid ()); > +#else > +#ifdef HAVE_SETPGRP > +#ifdef SETPGRP_VOID > + retval = setpgrp (); > +#else > + retval = setpgrp (getpid (), getpid ()); > +#endif > +#endif /* HAVE_SETPGRP */ > +#endif /* HAVE_SETPGID */ > +#endif /* defined (HAVE_TERMIOS) || defined (TIOCGPGRP) */ > + } > + > + return retval; > +} > + > +/* See common/common-terminal.h. */ > + > +void > +have_job_control (void) > +{ > + /* OK, figure out whether we have job control. If neither termios nor > + sgtty (i.e. termio or go32), leave job_control 0. */ > +#if defined (HAVE_TERMIOS) > + /* Do all systems with termios have the POSIX way of identifying job > + control? I hope so. */ > +#ifdef _POSIX_JOB_CONTROL > + job_control = 1; > +#else > +#ifdef _SC_JOB_CONTROL > + job_control = sysconf (_SC_JOB_CONTROL); > +#else > + job_control = 0; /* Have to assume the worst. */ > +#endif /* _SC_JOB_CONTROL */ > +#endif /* _POSIX_JOB_CONTROL */ > +#endif /* HAVE_TERMIOS */ > + > +#ifdef HAVE_SGTTY > +#ifdef TIOCGPGRP > + job_control = 1; > +#else > + job_control = 0; > +#endif /* TIOCGPGRP */ > +#endif /* sgtty */ > +} > diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in > index fe40842..2add910 100644 > --- a/gdb/gdbserver/Makefile.in > +++ b/gdb/gdbserver/Makefile.in > @@ -204,6 +204,7 @@ SFILES = \ > $(srcdir)/common/environ.c \ > $(srcdir)/common/fileio.c \ > $(srcdir)/common/filestuff.c \ > + $(srcdir)/common/common-inflow.c \ > $(srcdir)/common/gdb_vecs.c \ > $(srcdir)/common/new-op.c \ > $(srcdir)/common/print-utils.c \ > @@ -234,6 +235,7 @@ OBS = \ > cleanups.o \ > common-debug.o \ > common-exceptions.o \ > + common-inflow.o \ > common-regcache.o \ > common-utils.o \ > debug.o \ > @@ -770,6 +772,9 @@ format.o: ../common/format.c > filestuff.o: ../common/filestuff.c > $(COMPILE) $< > $(POSTCOMPILE) > +common-inflow.o: ../common/common-inflow.c > + $(COMPILE) $< > + $(POSTCOMPILE) > agent.o: ../common/agent.c > $(COMPILE) $< > $(POSTCOMPILE) > diff --git a/gdb/inflow.c b/gdb/inflow.c > index 5b55cec..80909ea 100644 > --- a/gdb/inflow.c > +++ b/gdb/inflow.c > @@ -803,43 +803,6 @@ create_tty_session (void) > #endif /* HAVE_SETSID */ > } > > -/* This is here because this is where we figure out whether we (probably) > - have job control. Just using job_control only does part of it because > - setpgid or setpgrp might not exist on a system without job control. > - It might be considered misplaced (on the other hand, process groups and > - job control are closely related to ttys). > - > - For a more clean implementation, in libiberty, put a setpgid which merely > - calls setpgrp and a setpgrp which does nothing (any system with job control > - will have one or the other). */ > -int > -gdb_setpgid (void) > -{ > - int retval = 0; > - > - if (job_control) > - { > -#if defined (HAVE_TERMIOS) || defined (TIOCGPGRP) > -#ifdef HAVE_SETPGID > - /* The call setpgid (0, 0) is supposed to work and mean the same > - thing as this, but on Ultrix 4.2A it fails with EPERM (and > - setpgid (getpid (), getpid ()) succeeds). */ > - retval = setpgid (getpid (), getpid ()); > -#else > -#ifdef HAVE_SETPGRP > -#ifdef SETPGRP_VOID > - retval = setpgrp (); > -#else > - retval = setpgrp (getpid (), getpid ()); > -#endif > -#endif /* HAVE_SETPGRP */ > -#endif /* HAVE_SETPGID */ > -#endif /* defined (HAVE_TERMIOS) || defined (TIOCGPGRP) */ > - } > - > - return retval; > -} > - > /* Get all the current tty settings (including whether we have a > tty at all!). We can't do this in _initialize_inflow because > serial_fdopen() won't work until the serial_ops_list is > @@ -860,30 +823,8 @@ _initialize_inflow (void) > > terminal_is_ours = 1; > > - /* OK, figure out whether we have job control. If neither termios nor > - sgtty (i.e. termio or go32), leave job_control 0. */ > - > -#if defined (HAVE_TERMIOS) > - /* Do all systems with termios have the POSIX way of identifying job > - control? I hope so. */ > -#ifdef _POSIX_JOB_CONTROL > - job_control = 1; > -#else > -#ifdef _SC_JOB_CONTROL > - job_control = sysconf (_SC_JOB_CONTROL); > -#else > - job_control = 0; /* Have to assume the worst. */ > -#endif /* _SC_JOB_CONTROL */ > -#endif /* _POSIX_JOB_CONTROL */ > -#endif /* HAVE_TERMIOS */ > - > -#ifdef HAVE_SGTTY > -#ifdef TIOCGPGRP > - job_control = 1; > -#else > - job_control = 0; > -#endif /* TIOCGPGRP */ > -#endif /* sgtty */ > + /* OK, figure out whether we have job control. */ > + have_job_control (); > > observer_attach_inferior_exit (inflow_inferior_exit); > > diff --git a/gdb/utils.c b/gdb/utils.c > index bc1dfe5..6bf3716 100644 > --- a/gdb/utils.c > +++ b/gdb/utils.c > @@ -103,10 +103,6 @@ static std::chrono::steady_clock::duration prompt_for_continue_wait_time; > > static int debug_timestamp = 0; > > -/* Nonzero if we have job control. */ > - > -int job_control; > - > /* Nonzero means that strings with character values >0x7F should be printed > as octal escapes. Zero means just print the value (e.g. it's an > international character, and the terminal or window can cope.) */ > Otherwise looks fine.