X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Finf-ptrace.h;h=dd0733736f2686ad50c46295e29e7f8f6eb7dec6;hb=030a2e78acf66c5c12e073ec3887a167da7a7195;hp=b74ff203e8e6871f427568cd0302ca6002a0e532;hpb=7714d83ad4327316699302e187c28d5c79eccab3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/inf-ptrace.h b/gdb/inf-ptrace.h index b74ff203e8..dd0733736f 100644 --- a/gdb/inf-ptrace.h +++ b/gdb/inf-ptrace.h @@ -1,12 +1,12 @@ /* Low level child interface to ptrace. - Copyright (C) 2004, 2005, 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, @@ -15,24 +15,72 @@ 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_PTRACE_H #define INF_PTRACE_H -/* Create a prototype ptrace target. The client can override it with - local methods. */ +#include "inf-child.h" -extern struct target_ops *inf_ptrace_target (void); +/* An abstract prototype ptrace target. The client can override it + with local methods. */ -/* Create a "traditional" ptrace target. REGISTER_U_OFFSET should be - a function returning the offset within the user area where a - particular register is stored. */ +struct inf_ptrace_target : public inf_child_target +{ + ~inf_ptrace_target () override = 0; -extern struct target_ops * - inf_ptrace_trad_target (CORE_ADDR (*register_u_offset) - (struct gdbarch *, int, int)); + void attach (const char *, int) override; + + void detach (inferior *inf, int) override; + + void resume (ptid_t, int, enum gdb_signal) override; + + ptid_t wait (ptid_t, struct target_waitstatus *, int) override; + + void files_info () override; + + void kill () override; + + void create_inferior (const char *, const std::string &, + char **, int) override; +#ifdef PT_GET_PROCESS_STATE + int follow_fork (int, int) override; + + int insert_fork_catchpoint (int) override; + + int remove_fork_catchpoint (int) override; + + void post_startup_inferior (ptid_t) override; + + void post_attach (int) override; +#endif + + void mourn_inferior () override; + + bool thread_alive (ptid_t ptid) override; + + std::string pid_to_str (ptid_t) 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; + +#if defined (PT_IO) && defined (PIOD_READ_AUXV) + int auxv_parse (gdb_byte **readptr, + gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) override; +#endif + +protected: + /* Cleanup the inferior after a successful ptrace detach. */ + void detach_success (inferior *inf); +}; + +/* Return which PID to pass to ptrace in order to observe/control the + tracee identified by PTID. */ + +extern pid_t get_ptrace_pid (ptid_t); #endif