aboutsummaryrefslogtreecommitdiff
path: root/gdb/inf-child.h
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/inf-child.h')
-rw-r--r--gdb/inf-child.h113
1 files changed, 94 insertions, 19 deletions
diff --git a/gdb/inf-child.h b/gdb/inf-child.h
index 5fb966d..99173ed 100644
--- a/gdb/inf-child.h
+++ b/gdb/inf-child.h
@@ -20,33 +20,108 @@
#ifndef INF_CHILD_H
#define INF_CHILD_H
-/* Create a prototype child target. The client can override it with
- local methods. */
+#include "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<target_ops>
+{
+public:
+ inf_child_target ();
+ ~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 char *shortname () override
+ { return "native"; }
+
+ const char *longname () override
+ { return _("Native process"); }
+
+ const char *doc () override
+ { return _("Native process (started by the \"run\" command)."); }
+
+ void open (const char *arg, int from_tty) 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_ours_for_output () override;
+ void terminal_ours () override;
+ void terminal_info (const char *, int) override;
+
+ void interrupt () override;
+ void pass_ctrlc () 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 post_startup_inferior (ptid_t) override;
-extern void inf_child_open_target (struct target_ops *target,
- const char *arg, int from_tty);
+ void mourn_inferior () override;
-/* To be called by the native target's to_mourn_inferior routine. */
+ int can_run () override;
-extern void inf_child_mourn_inferior (struct target_ops *ops);
+ bool can_create_inferior () override;
+ void create_inferior (const char *, const std::string &,
+ char **, int) override = 0;
-/* 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. */
+ bool can_attach () override;
+ void attach (const char *, int) override = 0;
-extern void inf_child_maybe_unpush_target (struct target_ops *ops);
+ void post_attach (int) override;
+
+ /* We must default these because they must be implemented by any
+ target that can run. */
+ int can_async_p () override { return 0; }
+ int supports_non_stop () override { return 0; }
+ int supports_disable_randomization () override { return 0; }
+
+ char *pid_to_exec_file (int pid) override;
+
+ int has_all_memory () override;
+ int has_memory () override;
+ int has_stack () override;
+ int has_registers () override;
+ int has_execution (ptid_t) 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;
+ int use_agent (int use) override;
+
+ int 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);
#endif