From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 42254 invoked by alias); 1 Feb 2017 18:41:27 -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 41943 invoked by uid 89); 1 Feb 2017 18:41:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No 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; Wed, 01 Feb 2017 18:41:08 +0000 Received: from svr-orw-mbx-03.mgc.mentorg.com ([147.34.90.203]) by relay1.mentorg.com with esmtp id 1cYzq6-0003NX-ST from Luis_Gustavo@mentor.com ; Wed, 01 Feb 2017 10:41:06 -0800 Received: from [172.30.10.1] (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; Wed, 1 Feb 2017 10:41:03 -0800 Reply-To: Luis Machado Subject: Re: [PATCH v2 3/6] Share parts of gdb/inflow.c with gdbserver References: <1482464361-4068-1-git-send-email-sergiodj@redhat.com> <20170118153605.4610-1-sergiodj@redhat.com> <20170118153605.4610-4-sergiodj@redhat.com> To: Sergio Durigan Junior , GDB Patches CC: Pedro Alves , Eli Zaretskii From: Luis Machado Message-ID: <00bc84e8-e0c3-b246-ca78-78fc696dd29d@codesourcery.com> Date: Wed, 01 Feb 2017 18:41:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <20170118153605.4610-4-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: 2017-02/txt/msg00039.txt.bz2 On 01/18/2017 09:36 AM, 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: > 2017-01-17 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 > "handle_job_control". > * utils.c (job_control): Delete. > > gdb/gdbserver/ChangeLog: > 2017-01-17 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 c05d456..c0325d5 100644 > --- a/gdb/Makefile.in > +++ b/gdb/Makefile.in > @@ -1196,6 +1196,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 \ > @@ -1623,6 +1624,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..9871b5e > --- /dev/null > +++ b/gdb/common/common-inflow.c > @@ -0,0 +1,91 @@ > +/* Low level interface to ptrace, for GDB and gdbserver when running under Unix. > + Copyright (C) 1986-2017 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. */ > +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). */ > + > +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 ef0dc99..74e199b 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 7ffa83a..271278d 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 4993145..119992e 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.) */ > I have no further comments on this one.