From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19152 invoked by alias); 1 Feb 2017 18:37:44 -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 19012 invoked by uid 89); 1 Feb 2017 18:37:30 -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:37:30 +0000 Received: from svr-orw-mbx-03.mgc.mentorg.com ([147.34.90.203]) by relay1.mentorg.com with esmtp id 1cYzmZ-0002PJ-Ma from Luis_Gustavo@mentor.com ; Wed, 01 Feb 2017 10:37:27 -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:37:23 -0800 Reply-To: Luis Machado Subject: Re: [PATCH v2 2/6] Share parts of gdb/terminal.h with gdbserver References: <1482464361-4068-1-git-send-email-sergiodj@redhat.com> <20170118153605.4610-1-sergiodj@redhat.com> <20170118153605.4610-3-sergiodj@redhat.com> To: Sergio Durigan Junior , GDB Patches CC: Pedro Alves , Eli Zaretskii From: Luis Machado Message-ID: <90c917a2-e6e8-2384-7be2-412ed48a5500@codesourcery.com> Date: Wed, 01 Feb 2017 18:37: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-3-sergiodj@redhat.com> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: svr-orw-mbx-04.mgc.mentorg.com (147.34.90.204) To svr-orw-mbx-03.mgc.mentorg.com (147.34.90.203) X-IsSubscribed: yes X-SW-Source: 2017-02/txt/msg00037.txt.bz2 On 01/18/2017 09:36 AM, Sergio Durigan Junior wrote: > As part of the bigger work of sharing fork_inferior with gdbserver, > some parts of gdb/terminal.h also needed to be moved to a common > place. These parts are: > > - The code responsible for determining some terminal-based define's > based on available features; > > - job control; > > - terminal-related functions needed by fork_inferior; > > gdb/ChangeLog: > 2017-01-17 Sergio Durigan Junior > > * Makefile.in (HFILES_NO_SRCDIR): Add "common/common-terminal.h". > * common/common-terminal.h: New file, with parts of "terminal.h". > * terminal.h: Move terminal-related defines to > "common/common-terminal.h". Include "common/common-terminal.h". > (new_tty_prefork): Move to "common/common-terminal.h". > (new_tty): Likewise. > (new_tty_postfork): Likewise. > (job_control): Likewise. > (create_tty_session): Likewise. > (gdb_setpgid): Likewise. > * utils.c: Include "terminal.h". > > gdb/gdbserver/ChangeLog: > 2016-12-22 Sergio Durigan Junior > > * terminal.c: New file. > --- > gdb/Makefile.in | 1 + > gdb/common/common-terminal.h | 119 +++++++++++++++++++++++++++++++++++++++++++ > gdb/gdbserver/terminal.c | 88 ++++++++++++++++++++++++++++++++ > gdb/terminal.h | 73 +------------------------- > gdb/utils.c | 1 + > 5 files changed, 210 insertions(+), 72 deletions(-) > create mode 100644 gdb/common/common-terminal.h > create mode 100644 gdb/gdbserver/terminal.c > > diff --git a/gdb/Makefile.in b/gdb/Makefile.in > index 3f19818..c05d456 100644 > --- a/gdb/Makefile.in > +++ b/gdb/Makefile.in > @@ -1469,6 +1469,7 @@ HFILES_NO_SRCDIR = \ > common/common-regcache.h \ > common/common-types.h \ > common/common-utils.h \ > + common/common-terminal.h \ > common/errors.h \ > common/environ.h \ > common/fileio.h \ > diff --git a/gdb/common/common-terminal.h b/gdb/common/common-terminal.h > new file mode 100644 > index 0000000..f7ab96a > --- /dev/null > +++ b/gdb/common/common-terminal.h > @@ -0,0 +1,119 @@ > +/* Common terminal interface definitions for GDB and gdbserver. > + 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 . */ > + > +#ifndef COMMON_TERMINAL_H > +#define COMMON_TERMINAL_H > + > +/* If we're using autoconf, it will define HAVE_TERMIOS_H, > + HAVE_TERMIO_H and HAVE_SGTTY_H for us. One day we can rewrite > + ser-unix.c and inflow.c to inspect those names instead of > + HAVE_TERMIOS, HAVE_TERMIO and the implicit HAVE_SGTTY (when neither > + HAVE_TERMIOS or HAVE_TERMIO is set). Until then, make sure that > + nothing has already defined the one of the names, and do the right > + thing. */ > + > +#if !defined (HAVE_TERMIOS) && !defined(HAVE_TERMIO) && !defined(HAVE_SGTTY) > +#if defined(HAVE_TERMIOS_H) > +#define HAVE_TERMIOS > +#else /* ! defined (HAVE_TERMIOS_H) */ > +#if defined(HAVE_TERMIO_H) > +#define HAVE_TERMIO > +#else /* ! defined (HAVE_TERMIO_H) */ > +#if defined(HAVE_SGTTY_H) > +#define HAVE_SGTTY > +#endif /* ! defined (HAVE_SGTTY_H) */ > +#endif /* ! defined (HAVE_TERMIO_H) */ > +#endif /* ! defined (HAVE_TERMIOS_H) */ > +#endif /* !defined (HAVE_TERMIOS) && !defined (HAVE_TERMIO) && > + !defined (HAVE_SGTTY) */ > + > +#if defined(HAVE_TERMIOS) > +#include > +#endif > + > +#if !defined(_WIN32) && !defined (HAVE_TERMIOS) > + > +/* Define a common set of macros -- BSD based -- and redefine whatever > + the system offers to make it look like that. FIXME: serial.h and > + ser-*.c deal with this in a much cleaner fashion; as soon as stuff > + is converted to use them, can get rid of this crap. */ > + > +#ifdef HAVE_TERMIO > + > +#include > + > +#undef TIOCGETP > +#define TIOCGETP TCGETA > +#undef TIOCSETN > +#define TIOCSETN TCSETA > +#undef TIOCSETP > +#define TIOCSETP TCSETAF > +#define TERMINAL struct termio > + > +#else /* sgtty */ > + > +#include > +#include > +#include > +#define TERMINAL struct sgttyb > + > +#endif /* sgtty */ > +#endif > + > +#include > + > +/* Do we have job control? Can be assumed to always be the same > + within a given run of GDB. Use in gdb/inflow.c and > + common/common-inflow.c. */ > +extern int job_control; > + > +extern void new_tty (void); > + > +/* NEW_TTY_PREFORK is called before forking a new child process, > + so we can record the state of ttys in the child to be formed. > + TTYNAME is null if we are to share the terminal with gdb; This is still referencing only gdb, but the code is now shared with gdbserver as well. > + or points to a string containing the name of the desired tty. > + > + NEW_TTY is called in new child processes under Unix, which will > + become debugger target processes. This actually switches to > + the terminal specified in the NEW_TTY_PREFORK call. */ > +extern void new_tty_prefork (const char *ttyname); > + > +/* NEW_TTY_POSTFORK is called after forking a new child process, and > + adding it to the inferior table, to store the TTYNAME being used by > + the child, or null if it sharing the terminal with gdb. */ Here as well. > +extern void new_tty_postfork (void); > + > +/* Create a new session if the inferior will run in a different tty. > + A session is UNIX's way of grouping processes that share a controlling > + terminal, so a new one is needed if the inferior terminal will be > + different from GDB's. And here. > + > + Returns the session id of the new session, 0 if no session was created > + or -1 if an error occurred. */ > +extern pid_t create_tty_session (void); > + > +/* Set the process group of the caller to its own pid, or do nothing > + if we lack job control. */ > +extern int gdb_setpgid (void); > + > +/* Determine whether we have job control, and set variable JOB_CONTROL > + accordingly. */ > +extern void have_job_control (void); > + > +#endif /* ! COMMON_TERMINAL_H */ > diff --git a/gdb/gdbserver/terminal.c b/gdb/gdbserver/terminal.c > new file mode 100644 > index 0000000..42ac651 > --- /dev/null > +++ b/gdb/gdbserver/terminal.c > @@ -0,0 +1,88 @@ > +/* Terminal interface definitions for the GDB remote server. > + Copyright (C) 2016-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 "server.h" > +#include "common-terminal.h" > + > +/* See common/common-terminal.h. */ > + > +void > +new_tty (void) > +{ > + /* Placeholder needed by fork_inferior. For now, this function is > + not needed nor useful to have on gdbserver. When/If we properly > + handle terminal modes, we can revisit and implement the needed > + support. */ > +} > + > +/* See common/common-terminal.h. */ > + > +void > +new_tty_prefork (const char *ttyname) > +{ > + /* Placeholder needed by fork_inferior. For now, this function is > + not needed nor useful to have on gdbserver. When/If we properly > + handle terminal modes, we can revisit and implement the needed > + support. */ > +} > + > +/* See common/common-terminal.h. */ > + > +void > +new_tty_postfork (void) > +{ > + /* Placeholder needed by fork_inferior. For now, this function is > + not needed nor useful to have on gdbserver. When/If we properly > + handle terminal modes, we can revisit and implement the needed > + support. */ > +} > + > +/* See common/common-terminal.h. */ > + > +pid_t > +create_tty_session (void) > +{ > + /* Placeholder needed by fork_inferior. For now, this function is > + not needed nor useful to have on gdbserver. When/If we properly > + handle terminal modes, we can revisit and implement the needed > + support. */ > + return (pid_t) 1; > +} > + > +/* See common/common-inferior.h. */ > + > +void > +set_inferior_io_terminal (const char *terminal_name) > +{ > + /* Placeholder needed by fork_inferior. For now, this function is > + not needed nor useful to have on gdbserver. When/If we properly > + handle terminal modes, we can revisit and implement the needed > + support. */ > +} > + > +/* See common/common-inferior.h. */ > + > +const char * > +get_inferior_io_terminal (void) > +{ > + /* Placeholder needed by fork_inferior. For now, this function is > + not needed nor useful to have on gdbserver. When/If we properly > + handle terminal modes, we can revisit and implement the needed > + support. */ > + return NULL; > +} > diff --git a/gdb/terminal.h b/gdb/terminal.h > index d8691b2..8139319 100644 > --- a/gdb/terminal.h > +++ b/gdb/terminal.h > @@ -19,83 +19,12 @@ > #if !defined (TERMINAL_H) > #define TERMINAL_H 1 > > - > -/* If we're using autoconf, it will define HAVE_TERMIOS_H, > - HAVE_TERMIO_H and HAVE_SGTTY_H for us. One day we can rewrite > - ser-unix.c and inflow.c to inspect those names instead of > - HAVE_TERMIOS, HAVE_TERMIO and the implicit HAVE_SGTTY (when neither > - HAVE_TERMIOS or HAVE_TERMIO is set). Until then, make sure that > - nothing has already defined the one of the names, and do the right > - thing. */ > - > -#if !defined (HAVE_TERMIOS) && !defined(HAVE_TERMIO) && !defined(HAVE_SGTTY) > -#if defined(HAVE_TERMIOS_H) > -#define HAVE_TERMIOS > -#else /* ! defined (HAVE_TERMIOS_H) */ > -#if defined(HAVE_TERMIO_H) > -#define HAVE_TERMIO > -#else /* ! defined (HAVE_TERMIO_H) */ > -#if defined(HAVE_SGTTY_H) > -#define HAVE_SGTTY > -#endif /* ! defined (HAVE_SGTTY_H) */ > -#endif /* ! defined (HAVE_TERMIO_H) */ > -#endif /* ! defined (HAVE_TERMIOS_H) */ > -#endif /* !defined (HAVE_TERMIOS) && !defined (HAVE_TERMIO) && > - !defined (HAVE_SGTTY) */ > - > -#if defined(HAVE_TERMIOS) > -#include > -#endif > - > -#if !defined(_WIN32) && !defined (HAVE_TERMIOS) > - > -/* Define a common set of macros -- BSD based -- and redefine whatever > - the system offers to make it look like that. FIXME: serial.h and > - ser-*.c deal with this in a much cleaner fashion; as soon as stuff > - is converted to use them, can get rid of this crap. */ > - > -#ifdef HAVE_TERMIO > - > -#include > - > -#undef TIOCGETP > -#define TIOCGETP TCGETA > -#undef TIOCSETN > -#define TIOCSETN TCSETA > -#undef TIOCSETP > -#define TIOCSETP TCSETAF > -#define TERMINAL struct termio > - > -#else /* sgtty */ > - > -#include > -#include > -#include > -#define TERMINAL struct sgttyb > - > -#endif /* sgtty */ > -#endif > +#include "common-terminal.h" > > struct inferior; > > -extern void new_tty_prefork (const char *); > - > -extern void new_tty (void); > - > -extern void new_tty_postfork (void); > - > extern void copy_terminal_info (struct inferior *to, struct inferior *from); > > -/* Do we have job control? Can be assumed to always be the same within > - a given run of GDB. In inflow.c. */ > -extern int job_control; > - > -extern pid_t create_tty_session (void); > - > -/* Set the process group of the caller to its own pid, or do nothing if > - we lack job control. */ > -extern int gdb_setpgid (void); > - > /* Set up a serial structure describing standard input. In inflow.c. */ > extern void initialize_stdin_serial (void); > > diff --git a/gdb/utils.c b/gdb/utils.c > index f142ffe..4993145 100644 > --- a/gdb/utils.c > +++ b/gdb/utils.c > @@ -53,6 +53,7 @@ > #include "top.h" > #include "main.h" > #include "solist.h" > +#include "terminal.h" > > #include "inferior.h" /* for signed_pointer_to_address */ > >