X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Finf-child.h;h=b3e451837c7020ce8f6a4712f0b3d83c7e5678ca;hb=db178f47dd4c9d2882da42a8915018d1fb90ea17;hp=c8cd912240504fe4420de2943daa46ebf7c78756;hpb=6aba47ca06d9150c6196a374b745c2711b46e045;p=deliverable%2Fbinutils-gdb.git
diff --git a/gdb/inf-child.h b/gdb/inf-child.h
index c8cd912240..b3e451837c 100644
--- a/gdb/inf-child.h
+++ b/gdb/inf-child.h
@@ -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-2019 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,
@@ -15,16 +15,104 @@
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 . */
#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
+{
+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 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