+#include <signal.h>
+
+/* A prototype generic GNU/Linux target. A concrete instance should
+ override it with local methods. */
+
+class linux_nat_target : public inf_ptrace_target
+{
+public:
+ linux_nat_target ();
+ ~linux_nat_target () override = 0;
+
+ thread_control_capabilities get_thread_control_capabilities () override
+ { return tc_schedlock; }
+
+ void create_inferior (const char *, const std::string &,
+ char **, int) override;
+
+ void attach (const char *, int) override;
+
+ void detach (inferior *, int) override;
+
+ void resume (ptid_t, int, enum gdb_signal) override;
+
+ ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
+
+ void pass_signals (gdb::array_view<const unsigned char>) override;
+
+ enum target_xfer_status xfer_partial (enum target_object object,
+ const char *annex,
+ gdb_byte *readbuf,
+ const gdb_byte *writebuf,
+ ULONGEST offset, ULONGEST len,
+ ULONGEST *xfered_len) override;
+
+ void kill () override;
+
+ void mourn_inferior () override;
+ bool thread_alive (ptid_t ptid) override;
+
+ void update_thread_list () override;
+
+ std::string pid_to_str (ptid_t) override;
+
+ const char *thread_name (struct thread_info *) override;
+
+ struct address_space *thread_address_space (ptid_t) override;
+
+ bool stopped_by_watchpoint () override;
+
+ bool stopped_data_address (CORE_ADDR *) override;
+
+ bool stopped_by_sw_breakpoint () override;
+ bool supports_stopped_by_sw_breakpoint () override;
+
+ bool stopped_by_hw_breakpoint () override;
+ bool supports_stopped_by_hw_breakpoint () override;
+
+ void thread_events (int) override;
+
+ bool can_async_p () override;
+ bool is_async_p () override;
+
+ bool supports_non_stop () override;
+ bool always_non_stop_p () override;
+
+ void async (int) override;
+
+ void close () override;
+
+ void stop (ptid_t) override;
+
+ bool supports_multi_process () override;
+
+ bool supports_disable_randomization () override;
+
+ int core_of_thread (ptid_t ptid) override;
+
+ bool filesystem_is_local () override;
+
+ int fileio_open (struct inferior *inf, const char *filename,
+ int flags, int mode, int warn_if_slow,
+ int *target_errno) override;
+
+ gdb::optional<std::string>
+ fileio_readlink (struct inferior *inf,
+ const char *filename,
+ int *target_errno) override;
+
+ int fileio_unlink (struct inferior *inf,
+ const char *filename,
+ int *target_errno) override;
+
+ int insert_fork_catchpoint (int) override;
+ int remove_fork_catchpoint (int) override;
+ int insert_vfork_catchpoint (int) override;
+ int remove_vfork_catchpoint (int) override;
+
+ int insert_exec_catchpoint (int) override;
+ int remove_exec_catchpoint (int) override;
+
+ int set_syscall_catchpoint (int pid, bool needed, int any_count,
+ gdb::array_view<const int> syscall_counts) override;