gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / inf-child.h
index 99837430e0ffb5e38af4d3c690d90682bdeacfd9..21162cb5b2cfc3c7c5fe56d7da0c2a2f802b4126 100644 (file)
@@ -1,6 +1,6 @@
 /* Base/prototype target for default child (native) targets.
 
-   Copyright (C) 2004-2015 Free Software Foundation, Inc.
+   Copyright (C) 2004-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #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.  */
 
-/* Functions for helping to write a native target.  */
+class inf_child_target
+  : public memory_breakpoint_target<process_stratum_target>
+{
+public:
+  inf_child_target () = default;
+  ~inf_child_target () override = 0;
 
-/* This is for native targets which use a unix/POSIX-style waitstatus.  */
-extern void store_waitstatus (struct target_waitstatus *, int);
+  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;
 
-/* This is to be called by the native target's open routine to push
-   the target, in case it need to override to_open.  */
+  void mourn_inferior () override;
 
-extern void inf_child_open_target (struct target_ops *target,
-                                  const char *arg, int from_tty);
+  bool can_run () override;
 
-/* To be called by the native target's to_mourn_inferior routine.  */
+  bool can_create_inferior () override;
+  void create_inferior (const char *, const std::string &,
+                       char **, int) override = 0;
 
-extern void inf_child_mourn_inferior (struct target_ops *ops);
+  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);
 
-/* 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.  */
+/* 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);
 
-extern void inf_child_maybe_unpush_target (struct target_ops *ops);
+/* 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.039725 seconds and 4 git commands to generate.