From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by sourceware.org (Postfix) with ESMTPS id EC521397305B for ; Mon, 14 Jun 2021 21:24:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EC521397305B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-f54.google.com with SMTP id r9so15982689wrz.10 for ; Mon, 14 Jun 2021 14:24:25 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HucQ4Gu+yzXN7iR3bKdJrU167K2aCfffaJPyx/w5xDg=; b=YUS1KY3ZlHRqWNzMEuViMF2TIWLsZrc7P99Zoj+LSItz1VLw0qa7aG36+YPunWvfl1 6GCk8kEMKIB75sz03iGcdgc5GdUyEOsUyaJwWjHc6jS/PVSRrK8hkeoYvs+Iv4QT+bo9 d+VpPEfkpRFfza0EeVmoDelq5+dOSy3UtLsRA+8AH5pLQsoEMNm3HTMyuFAMsluJakWk J10ykeVGWcHAG+5DIFjeIrjvyXfWFKgSpjmx2KdWzpWF9Jcul7jyUDddOydt6GrP0rwr bVg9ycl18FxND4lccIrF2NlGIpSopwbinn1ynvo5HRgszddOIaxhKt0WUETlQtAv611M dYkg== X-Gm-Message-State: AOAM531h6mAuNi0My27M4g17PgkWTqwfWC2XBxb2RvUY/izgWHMyNIZX talXd4gTKYxuEocTl96lamxcDF+sJkBk6A== X-Google-Smtp-Source: ABdhPJw6bnUO5Yl76il7riETuIveovIujLisIV6hn+8tAXto49DgvyY3zcaIQtZty4sSzXiY/dmzPg== X-Received: by 2002:adf:f1ca:: with SMTP id z10mr21762000wro.396.1623705864563; Mon, 14 Jun 2021 14:24:24 -0700 (PDT) Received: from localhost ([2001:8a0:f932:6a00:6b6e:c7b6:c5a7:aac3]) by smtp.gmail.com with ESMTPSA id w18sm17207523wrt.55.2021.06.14.14.24.23 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 14 Jun 2021 14:24:23 -0700 (PDT) From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH v2 06/16] Special-case "set inferior-tty /dev/tty" Date: Mon, 14 Jun 2021 22:24:00 +0100 Message-Id: <20210614212410.1612666-7-pedro@palves.net> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210614212410.1612666-1-pedro@palves.net> References: <20210614212410.1612666-1-pedro@palves.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.9 required=5.0 tests=BAYES_00, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, 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: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Jun 2021 21:24:27 -0000 The following patches will make GDB spawn inferiors in their own session and tty by default. Meaning, GDB will create and manage a pty for the inferior instead of the inferior and GDB sharing the same terminal and GDB having to juggle terminal settings depending on whether the inferior running or gdb showing the prompt. For some use cases however, it will still be useful to be able to tell GDB to spawn the inferior in the same terminal & session as GDB, like today. Setting the inferior tty to "/dev/tty" seems like an obvious way to get that, as /dev/tty is a special file that represents the terminal for the current process. This leaves "tty" with no arguments free for a different behavior. This patch hardcodes "/dev/tty" in is_gdb_terminal for that reason. gdb/ChangeLog: yyyy-mm-dd Pedro Alves * inflow.c (is_gdb_terminal): Hardcode "/dev/tty". (new_tty): Don't create a tty if is_gdb_terminal is true. (new_tty_postfork): Always allocate a run_terminal. (create_tty_session): Don't create a session if sharing the terminal with GDB. Change-Id: I4dc7958f823fa4e30c21a2c3fe4d8434a5d5ed40 --- gdb/inflow.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/gdb/inflow.c b/gdb/inflow.c index d241540c4cd..15f29dcd08e 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -222,6 +222,11 @@ is_gdb_terminal (const char *tty) struct stat other_tty; int res; + /* Users can explicitly set the inferior tty to "/dev/tty" to mean + "the GDB terminal". */ + if (strcmp (tty, "/dev/tty") == 0) + return TRIBOOL_TRUE; + res = stat (tty, &other_tty); if (res == -1) return TRIBOOL_UNKNOWN; @@ -796,9 +801,10 @@ check_syscall (const char *msg, int result) #endif void -new_tty (void) +new_tty () { - if (inferior_thisrun_terminal == 0) + if (inferior_thisrun_terminal == nullptr + || is_gdb_terminal (inferior_thisrun_terminal)) return; #if !defined(__GO32__) && !defined(_WIN32) int tty; @@ -862,13 +868,13 @@ new_tty_postfork (void) /* Save the name for later, for determining whether we and the child are sharing a tty. */ - if (inferior_thisrun_terminal) - { - struct inferior *inf = current_inferior (); - struct terminal_info *tinfo = get_inflow_inferior_data (inf); + struct inferior *inf = current_inferior (); + struct terminal_info *tinfo = get_inflow_inferior_data (inf); - tinfo->run_terminal = xstrdup (inferior_thisrun_terminal); - } + if (inferior_thisrun_terminal != nullptr) + tinfo->run_terminal = xstrdup (inferior_thisrun_terminal); + else + tinfo->run_terminal = xstrdup ("/dev/tty"); inferior_thisrun_terminal = NULL; } @@ -927,7 +933,9 @@ create_tty_session (void) #ifdef HAVE_SETSID pid_t ret; - if (!job_control || inferior_thisrun_terminal == 0) + if (!job_control + || inferior_thisrun_terminal == nullptr + || is_gdb_terminal (inferior_thisrun_terminal)) return 0; ret = setsid (); -- 2.26.2