This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 1/3] Pass inferior to terminal_save_inferior
- From: Simon Marchi <simon dot marchi at polymtl dot ca>
- To: gdb-patches at sourceware dot org
- Cc: Simon Marchi <simon dot marchi at polymtl dot ca>
- Date: Mon, 15 Oct 2018 23:38:33 -0400
- Subject: [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