update copyright year in version output of gdb, gdbserver and gdbreplay
[deliverable/binutils-gdb.git] / gdb / target / target.h
index 6ee0feeec0b47f37ec5c4233027daa3882665aaa..3e90839fa9b75df7dff570d00bb98f103aaec1ac 100644 (file)
@@ -1,6 +1,6 @@
 /* Declarations for common target functions.
 
-   Copyright (C) 1986-2015 Free Software Foundation, Inc.
+   Copyright (C) 1986-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -17,8 +17,8 @@
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
-#ifndef TARGET_COMMON_H
-#define TARGET_COMMON_H
+#ifndef TARGET_TARGET_H
+#define TARGET_TARGET_H
 
 #include "target/waitstatus.h"
 /* This header is a stopgap until more code is shared.  */
@@ -64,10 +64,149 @@ extern int target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr,
 
 extern void target_stop_and_wait (ptid_t ptid);
 
-/* Restart a target previously stopped by target_stop_and_wait.
-   No signal is delivered to the target.  This function must be
-   provided by the client.  */
+/* Restart a target previously stopped.  No signal is delivered to the
+   target.  This function must be provided by the client.  */
 
 extern void target_continue_no_signal (ptid_t ptid);
 
-#endif /* TARGET_COMMON_H */
+/* Restart a target previously stopped.  SIGNAL is delivered to the
+   target.  This function must be provided by the client.  */
+
+extern void target_continue (ptid_t ptid, enum gdb_signal signal);
+
+/* Wait for process pid to do something.  PTID = -1 to wait for any
+   pid to do something.  Return pid of child, or -1 in case of error;
+   store status through argument pointer STATUS.  Note that it is
+   _NOT_ OK to throw_exception() out of target_wait() without popping
+   the debugging target from the stack; GDB isn't prepared to get back
+   to the prompt with a debugging target but without the frame cache,
+   stop_pc, etc., set up.  OPTIONS is a bitwise OR of TARGET_W*
+   options.  */
+
+extern ptid_t target_wait (ptid_t ptid, struct target_waitstatus *status,
+                          int options);
+
+/* The inferior process has died.  Do what is right.  */
+
+extern void target_mourn_inferior (ptid_t ptid);
+
+/* Return 1 if this target can debug multiple processes
+   simultaneously, zero otherwise.  */
+
+extern int target_supports_multi_process (void);
+
+/* Possible terminal states.  */
+
+enum class target_terminal_state
+  {
+    /* The inferior's terminal settings are in effect.  */
+    is_inferior = 0,
+
+    /* Some of our terminal settings are in effect, enough to get
+       proper output.  */
+    is_ours_for_output = 1,
+
+    /* Our terminal settings are in effect, for output and input.  */
+    is_ours = 2
+  };
+
+/* Represents the state of the target terminal.  */
+class target_terminal
+{
+public:
+
+  target_terminal () = delete;
+  ~target_terminal () = delete;
+  DISABLE_COPY_AND_ASSIGN (target_terminal);
+
+  /* Initialize the terminal settings we record for the inferior,
+     before we actually run the inferior.  */
+  static void init ();
+
+  /* Put the current inferior's terminal settings into effect.  This
+     is preparation for starting or resuming the inferior.  This is a
+     no-op unless called with the main UI as current UI.  */
+  static void inferior ();
+
+  /* Put our terminal settings into effect.  First record the inferior's
+     terminal settings so they can be restored properly later.  This is
+     a no-op unless called with the main UI as current UI.  */
+  static void ours ();
+
+  /* Put some of our terminal settings into effect, enough to get proper
+     results from our output, but do not change into or out of RAW mode
+     so that no input is discarded.  This is a no-op if terminal_ours
+     was most recently called.  This is a no-op unless called with the main
+     UI as current UI.  */
+  static void ours_for_output ();
+
+  /* Restore terminal settings of inferiors that are in
+     is_ours_for_output state back to "inferior".  Used when we need
+     to temporarily switch to is_ours_for_output state.  */
+  static void restore_inferior ();
+
+  /* Returns true if the terminal settings of the inferior are in
+     effect.  */
+  static bool is_inferior ()
+  {
+    return m_terminal_state == target_terminal_state::is_inferior;
+  }
+
+  /* Returns true if our terminal settings are in effect.  */
+  static bool is_ours ()
+  {
+    return m_terminal_state == target_terminal_state::is_ours;
+  }
+
+  /* Returns true if our terminal settings are in effect.  */
+  static bool is_ours_for_output ()
+  {
+    return m_terminal_state == target_terminal_state::is_ours_for_output;
+  }
+
+  /* Print useful information about our terminal status, if such a thing
+     exists.  */
+  static void info (const char *arg, int from_tty);
+
+public:
+
+  /* A class that restores the state of the terminal to the current
+     state.  */
+  class scoped_restore_terminal_state
+  {
+  public:
+
+    scoped_restore_terminal_state ()
+      : m_state (m_terminal_state)
+    {
+    }
+
+    ~scoped_restore_terminal_state ()
+    {
+      switch (m_state)
+       {
+       case target_terminal_state::is_ours:
+         ours ();
+         break;
+       case target_terminal_state::is_ours_for_output:
+         ours_for_output ();
+         break;
+       case target_terminal_state::is_inferior:
+         restore_inferior ();
+         break;
+       }
+    }
+
+    DISABLE_COPY_AND_ASSIGN (scoped_restore_terminal_state);
+
+  private:
+
+    target_terminal_state m_state;
+  };
+
+private:
+
+  static target_terminal_state m_terminal_state;
+};
+
+#endif /* TARGET_TARGET_H */
This page took 0.028204 seconds and 4 git commands to generate.