This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 1/3] Pass inferior to terminal_save_inferior


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) <terminal_save_inferior>: 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) <terminal_save_inferior>: 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 ();
-- 
2.19.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]