replace_typedefs: handle templates in namespaces
[deliverable/binutils-gdb.git] / gdb / inf-child.h
index c8cd912240504fe4420de2943daa46ebf7c78756..21162cb5b2cfc3c7c5fe56d7da0c2a2f802b4126 100644 (file)
@@ -1,12 +1,12 @@
-/* Low level Unix child interface, for GDB when running under Unix.
+/* Base/prototype target for default child (native) targets.
 
-   Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2004-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef INF_CHILD_H
 #define INF_CHILD_H
 
-/* Create a prototype child target.  The client can override it with
-   local methods.  */
+#include "target.h"
+#include "process-stratum-target.h"
 
-extern struct target_ops *inf_child_target (void);
+/* A prototype child target.  The client can override it with local
+   methods.  */
+
+class inf_child_target
+  : public memory_breakpoint_target<process_stratum_target>
+{
+public:
+  inf_child_target () = default;
+  ~inf_child_target () override = 0;
+
+  const target_info &info () const override;
+
+  void close () override;
+
+  void disconnect (const char *, int) override;
+
+  void fetch_registers (struct regcache *, int) override = 0;
+  void store_registers (struct regcache *, int) override = 0;
+
+  void prepare_to_store (struct regcache *) override;
+
+  bool supports_terminal_ours () override;
+  void terminal_init () override;
+  void terminal_inferior () override;
+  void terminal_save_inferior () override;
+  void terminal_ours_for_output () override;
+  void terminal_ours () override;
+  void terminal_info (const char *, int) override;
+
+  void interrupt () override;
+  void pass_ctrlc () override;
+
+  void post_startup_inferior (ptid_t) override;
+
+  void mourn_inferior () override;
+
+  bool can_run () override;
+
+  bool can_create_inferior () override;
+  void create_inferior (const char *, const std::string &,
+                       char **, int) override = 0;
+
+  bool can_attach () override;
+  void attach (const char *, int) override = 0;
+
+  void post_attach (int) override;
+
+  char *pid_to_exec_file (int pid) override;
+
+  int fileio_open (struct inferior *inf, const char *filename,
+                  int flags, int mode, int warn_if_slow,
+                  int *target_errno) override;
+  int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
+                    ULONGEST offset, int *target_errno) override;
+  int fileio_pread (int fd, gdb_byte *read_buf, int len,
+                   ULONGEST offset, int *target_errno) override;
+  int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
+  int fileio_close (int fd, int *target_errno) override;
+  int fileio_unlink (struct inferior *inf,
+                    const char *filename,
+                    int *target_errno) override;
+  gdb::optional<std::string> fileio_readlink (struct inferior *inf,
+                                             const char *filename,
+                                             int *target_errno) override;
+  bool use_agent (bool use) override;
+
+  bool can_use_agent () override;
+
+protected:
+  /* Unpush the target if it wasn't explicitly open with "target native"
+     and there are no live inferiors left.  Note: if calling this as a
+     result of a mourn or detach, the current inferior shall already
+     have its PID cleared, so it isn't counted as live.  That's usually
+     done by calling either generic_mourn_inferior or
+     detach_inferior.  */
+  void maybe_unpush_target ();
+};
+
+/* Functions for helping to write a native target.  */
+
+/* This is for native targets which use a unix/POSIX-style waitstatus.  */
+extern void store_waitstatus (struct target_waitstatus *, int);
+
+/* Register TARGET as native target and set it up to respond to the
+   "target native" command.  */
+extern void add_inf_child_target (inf_child_target *target);
+
+/* target_open_ftype callback for inf-child targets.  Used by targets
+   that want to register an alternative target_info object.  Most
+   targets use add_inf_child_target instead.  */
+extern void inf_child_open_target (const char *arg, int from_tty);
 
 #endif
This page took 0.025426 seconds and 4 git commands to generate.