From patchwork Tue Oct 16 03:38:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 29763 Received: (qmail 15550 invoked by alias); 16 Oct 2018 03:38:43 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 15511 invoked by uid 89); 16 Oct 2018 03:38:42 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_SOFTFAIL autolearn=ham version=3.3.2 spammy=beneath, shares, HContent-Transfer-Encoding:8bit X-HELO: barracuda.ebox.ca Received: from barracuda.ebox.ca (HELO barracuda.ebox.ca) (96.127.255.19) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 16 Oct 2018 03:38:38 +0000 Received: from smtp.ebox.ca (smtp.electronicbox.net [96.127.255.82]) by barracuda.ebox.ca with ESMTP id QP0mt1KoSWiIOvMq (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 15 Oct 2018 23:38:36 -0400 (EDT) Received: from simark.lan (unknown [192.222.164.54]) by smtp.ebox.ca (Postfix) with ESMTP id EA0AC441D64; Mon, 15 Oct 2018 23:38:35 -0400 (EDT) From: Simon Marchi To: gdb-patches@sourceware.org Cc: Simon Marchi Subject: [PATCH 1/3] Pass inferior to terminal_save_inferior Date: Mon, 15 Oct 2018 23:38:33 -0400 Message-Id: <20181016033835.17594-1-simon.marchi@polymtl.ca> MIME-Version: 1.0 X-IsSubscribed: yes Instead of relying on the current inferior, pass an inferior pointer to the target implementing terminal_save_inferior. There should be no change in behavior. I added documentation to terminal_save_inferior, as I understand it (maybe I understood it wrong, so please take a look). gdb/ChangeLog: * target.h (struct target_ops) : Add inferior pointer parameter. * target.c (target_terminal_is_ours_kind): Pass inferior to terminal_save_inferior instead of changing current inferior. * target-delegates.c: Re-generate. * inf-child.h (inf_child_target) : Add inferior pointer parameter. * inf-child.c (inf_child_target::terminal_save_inferior): Likewise. * inferior.h (child_terminal_save_inferior): Likewise. * inflow.c (child_terminal_save_inferior): Likewise. --- gdb/inf-child.c | 4 ++-- gdb/inf-child.h | 2 +- gdb/inferior.h | 3 ++- gdb/inflow.c | 3 +-- gdb/target-delegates.c | 15 ++++++++------- gdb/target.c | 5 +---- gdb/target.h | 5 ++++- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/gdb/inf-child.c b/gdb/inf-child.c index 44aa2f66fbfe..94f42ec2adc0 100644 --- a/gdb/inf-child.c +++ b/gdb/inf-child.c @@ -114,9 +114,9 @@ inf_child_target::terminal_inferior () } void -inf_child_target::terminal_save_inferior () +inf_child_target::terminal_save_inferior (inferior *inf) { - child_terminal_save_inferior (this); + child_terminal_save_inferior (this, inf); } void diff --git a/gdb/inf-child.h b/gdb/inf-child.h index 98969bc5fa31..b0625391ebb2 100644 --- a/gdb/inf-child.h +++ b/gdb/inf-child.h @@ -46,7 +46,7 @@ public: bool supports_terminal_ours () override; void terminal_init () override; void terminal_inferior () override; - void terminal_save_inferior () override; + void terminal_save_inferior (inferior *inf) override; void terminal_ours_for_output () override; void terminal_ours () override; void terminal_info (const char *, int) override; diff --git a/gdb/inferior.h b/gdb/inferior.h index af5e92019618..d09263e34bef 100644 --- a/gdb/inferior.h +++ b/gdb/inferior.h @@ -154,7 +154,8 @@ extern void child_terminal_ours_for_output (struct target_ops *self); extern void child_terminal_inferior (struct target_ops *self); -extern void child_terminal_save_inferior (struct target_ops *self); +extern void child_terminal_save_inferior (struct target_ops *self, + inferior *inf); extern void child_terminal_init (struct target_ops *self); diff --git a/gdb/inflow.c b/gdb/inflow.c index caff64620709..372ef7844f01 100644 --- a/gdb/inflow.c +++ b/gdb/inflow.c @@ -454,13 +454,12 @@ child_terminal_ours (struct target_ops *self) cache. */ void -child_terminal_save_inferior (struct target_ops *self) +child_terminal_save_inferior (struct target_ops *self, inferior *inf) { /* Avoid attempting all the ioctl's when running in batch. */ if (!gdb_has_a_terminal ()) return; - inferior *inf = current_inferior (); terminal_info *tinfo = get_inflow_inferior_data (inf); /* No need to save/restore if the inferior is not sharing GDB's diff --git a/gdb/target-delegates.c b/gdb/target-delegates.c index 03136dfacf25..f2b352c44888 100644 --- a/gdb/target-delegates.c +++ b/gdb/target-delegates.c @@ -45,7 +45,7 @@ struct dummy_target : public target_ops bool supports_terminal_ours () override; void terminal_init () override; void terminal_inferior () override; - void terminal_save_inferior () override; + void terminal_save_inferior (inferior *arg0) override; void terminal_ours_for_output () override; void terminal_ours () override; void terminal_info (const char *arg0, int arg1) override; @@ -212,7 +212,7 @@ struct debug_target : public target_ops bool supports_terminal_ours () override; void terminal_init () override; void terminal_inferior () override; - void terminal_save_inferior () override; + void terminal_save_inferior (inferior *arg0) override; void terminal_ours_for_output () override; void terminal_ours () override; void terminal_info (const char *arg0, int arg1) override; @@ -1249,22 +1249,23 @@ debug_target::terminal_inferior () } void -target_ops::terminal_save_inferior () +target_ops::terminal_save_inferior (inferior *arg0) { - this->beneath ()->terminal_save_inferior (); + this->beneath ()->terminal_save_inferior (arg0); } void -dummy_target::terminal_save_inferior () +dummy_target::terminal_save_inferior (inferior *arg0) { } void -debug_target::terminal_save_inferior () +debug_target::terminal_save_inferior (inferior *arg0) { fprintf_unfiltered (gdb_stdlog, "-> %s->terminal_save_inferior (...)\n", this->beneath ()->shortname ()); - this->beneath ()->terminal_save_inferior (); + this->beneath ()->terminal_save_inferior (arg0); fprintf_unfiltered (gdb_stdlog, "<- %s->terminal_save_inferior (", this->beneath ()->shortname ()); + target_debug_print_inferior_p (arg0); fputs_unfiltered (")\n", gdb_stdlog); } diff --git a/gdb/target.c b/gdb/target.c index 2d98954b54ac..93d16b90f179 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -511,10 +511,7 @@ target_terminal_is_ours_kind (target_terminal_state desired_state) ALL_INFERIORS (inf) { if (inf->terminal_state == target_terminal_state::is_inferior) - { - set_current_inferior (inf); - current_top_target ()->terminal_save_inferior (); - } + current_top_target ()->terminal_save_inferior (inf); } ALL_INFERIORS (inf) diff --git a/gdb/target.h b/gdb/target.h index a3000c80c641..c37405205a0a 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -583,7 +583,10 @@ struct target_ops TARGET_DEFAULT_IGNORE (); virtual void terminal_inferior () TARGET_DEFAULT_IGNORE (); - virtual void terminal_save_inferior () + + /* If INF shares a terminal with GDB, save the current terminal settings + in a data structure associated to INF. */ + virtual void terminal_save_inferior (inferior *inf) TARGET_DEFAULT_IGNORE (); virtual void terminal_ours_for_output () TARGET_DEFAULT_IGNORE ();