1 /* Native debugging support for GNU/Linux (LWP layer).
3 Copyright (C) 2000-2018 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 #include "nat/linux-nat.h"
21 #include "inf-ptrace.h"
25 /* A prototype generic GNU/Linux target. A concrete instance should
26 override it with local methods. */
28 class linux_nat_target
: public inf_ptrace_target
32 ~linux_nat_target () override
= 0;
34 thread_control_capabilities
get_thread_control_capabilities () override
35 { return tc_schedlock
; }
37 void create_inferior (const char *, const std::string
&,
38 char **, int) override
;
40 void attach (const char *, int) override
;
42 void detach (inferior
*, int) override
;
44 void resume (ptid_t
, int, enum gdb_signal
) override
;
46 ptid_t
wait (ptid_t
, struct target_waitstatus
*, int) override
;
48 void pass_signals (int, unsigned char *) override
;
50 enum target_xfer_status
xfer_partial (enum target_object object
,
53 const gdb_byte
*writebuf
,
54 ULONGEST offset
, ULONGEST len
,
55 ULONGEST
*xfered_len
) override
;
57 void kill () override
;
59 void mourn_inferior () override
;
60 int thread_alive (ptid_t ptid
) override
;
62 void update_thread_list () override
;
64 const char *pid_to_str (ptid_t
) override
;
66 const char *thread_name (struct thread_info
*) override
;
68 struct address_space
*thread_address_space (ptid_t
) override
;
70 int stopped_by_watchpoint () override
;
72 int stopped_data_address (CORE_ADDR
*) override
;
74 int stopped_by_sw_breakpoint () override
;
75 int supports_stopped_by_sw_breakpoint () override
;
77 int stopped_by_hw_breakpoint () override
;
78 int supports_stopped_by_hw_breakpoint () override
;
80 void thread_events (int) override
;
82 int can_async_p () override
;
83 int is_async_p () override
;
85 int supports_non_stop () override
;
86 int always_non_stop_p () override
;
88 void async (int) override
;
90 void close () override
;
92 void stop (ptid_t
) override
;
94 int supports_multi_process () override
;
96 int supports_disable_randomization () override
;
98 int core_of_thread (ptid_t ptid
) override
;
100 int filesystem_is_local () override
;
102 int fileio_open (struct inferior
*inf
, const char *filename
,
103 int flags
, int mode
, int warn_if_slow
,
104 int *target_errno
) override
;
106 gdb::optional
<std::string
>
107 fileio_readlink (struct inferior
*inf
,
108 const char *filename
,
109 int *target_errno
) override
;
111 int fileio_unlink (struct inferior
*inf
,
112 const char *filename
,
113 int *target_errno
) override
;
115 int insert_fork_catchpoint (int) override
;
116 int remove_fork_catchpoint (int) override
;
117 int insert_vfork_catchpoint (int) override
;
118 int remove_vfork_catchpoint (int) override
;
120 int insert_exec_catchpoint (int) override
;
121 int remove_exec_catchpoint (int) override
;
123 int set_syscall_catchpoint (int pid
, bool needed
, int any_count
,
124 gdb::array_view
<const int> syscall_counts
) override
;
126 char *pid_to_exec_file (int pid
) override
;
128 void post_startup_inferior (ptid_t
) override
;
130 void post_attach (int) override
;
132 int follow_fork (int, int) override
;
134 std::vector
<static_tracepoint_marker
>
135 static_tracepoint_markers_by_strid (const char *id
) override
;
137 /* Methods that are meant to overridden by the concrete
138 arch-specific target instance. */
140 virtual void low_resume (ptid_t ptid
, int step
, enum gdb_signal sig
)
141 { inf_ptrace_target::resume (ptid
, step
, sig
); }
143 virtual int low_stopped_by_watchpoint ()
146 virtual int low_stopped_data_address (CORE_ADDR
*addr_p
)
150 /* The final/concrete instance. */
151 extern linux_nat_target
*linux_target
;
153 struct arch_lwp_info
;
155 /* Structure describing an LWP. This is public only for the purposes
156 of ALL_LWPS; target-specific code should generally not access it
161 /* The process id of the LWP. This is a combination of the LWP id
162 and overall process id. */
165 /* If this flag is set, we need to set the event request flags the
166 next time we see this LWP stop. */
167 int must_set_ptrace_flags
;
169 /* Non-zero if we sent this LWP a SIGSTOP (but the LWP didn't report
173 /* Non-zero if this LWP is stopped. */
176 /* Non-zero if this LWP will be/has been resumed. Note that an LWP
177 can be marked both as stopped and resumed at the same time. This
178 happens if we try to resume an LWP that has a wait status
179 pending. We shouldn't let the LWP run until that wait status has
180 been processed, but we should not report that wait status if GDB
181 didn't try to let the LWP run. */
184 /* The last resume GDB requested on this thread. */
185 enum resume_kind last_resume_kind
;
187 /* If non-zero, a pending wait status. */
190 /* When 'stopped' is set, this is where the lwp last stopped, with
191 decr_pc_after_break already accounted for. If the LWP is
192 running, and stepping, this is the address at which the lwp was
193 resumed (that is, it's the previous stop PC). If the LWP is
194 running and not stepping, this is 0. */
197 /* Non-zero if we were stepping this LWP. */
200 /* The reason the LWP last stopped, if we need to track it
201 (breakpoint, watchpoint, etc.) */
202 enum target_stop_reason stop_reason
;
204 /* On architectures where it is possible to know the data address of
205 a triggered watchpoint, STOPPED_DATA_ADDRESS_P is non-zero, and
206 STOPPED_DATA_ADDRESS contains such data address. Otherwise,
207 STOPPED_DATA_ADDRESS_P is false, and STOPPED_DATA_ADDRESS is
208 undefined. Only valid if STOPPED_BY_WATCHPOINT is true. */
209 int stopped_data_address_p
;
210 CORE_ADDR stopped_data_address
;
212 /* Non-zero if we expect a duplicated SIGINT. */
215 /* If WAITSTATUS->KIND != TARGET_WAITKIND_SPURIOUS, the waitstatus
216 for this LWP's last event. This may correspond to STATUS above,
217 or to a local variable in lin_lwp_wait. */
218 struct target_waitstatus waitstatus
;
220 /* Signal whether we are in a SYSCALL_ENTRY or
221 in a SYSCALL_RETURN event.
223 - TARGET_WAITKIND_SYSCALL_ENTRY
224 - TARGET_WAITKIND_SYSCALL_RETURN */
225 enum target_waitkind syscall_state
;
227 /* The processor core this LWP was last seen on. */
230 /* Arch-specific additions. */
231 struct arch_lwp_info
*arch_private
;
233 /* Previous and next pointers in doubly-linked list of known LWPs,
234 sorted by reverse creation order. */
235 struct lwp_info
*prev
;
236 struct lwp_info
*next
;
239 /* The global list of LWPs, for ALL_LWPS. Unlike the threads list,
240 there is always at least one LWP on the list while the GNU/Linux
241 native target is active. */
242 extern struct lwp_info
*lwp_list
;
244 /* Does the current host support PTRACE_GETREGSET? */
245 extern enum tribool have_ptrace_getregset
;
247 /* Iterate over each active thread (light-weight process). */
248 #define ALL_LWPS(LP) \
249 for ((LP) = lwp_list; \
253 /* Attempt to initialize libthread_db. */
254 void check_for_thread_db (void);
256 /* Called from the LWP layer to inform the thread_db layer that PARENT
257 spawned CHILD. Both LWPs are currently stopped. This function
258 does whatever is required to have the child LWP under the
259 thread_db's control --- e.g., enabling event reporting. Returns
260 true on success, false if the process isn't using libpthread. */
261 extern int thread_db_notice_clone (ptid_t parent
, ptid_t child
);
263 /* Return the set of signals used by the threads library. */
264 extern void lin_thread_get_thread_signals (sigset_t
*mask
);
266 /* Find process PID's pending signal set from /proc/pid/status. */
267 void linux_proc_pending_signals (int pid
, sigset_t
*pending
,
268 sigset_t
*blocked
, sigset_t
*ignored
);
270 /* For linux_stop_lwp see nat/linux-nat.h. */
272 /* Stop all LWPs, synchronously. (Any events that trigger while LWPs
273 are being stopped are left pending.) */
274 extern void linux_stop_and_wait_all_lwps (void);
276 /* Set resumed LWPs running again, as they were before being stopped
277 with linux_stop_and_wait_all_lwps. (LWPS with pending events are
279 extern void linux_unstop_all_lwps (void);
281 /* Register a method to call whenever a new thread is attached. */
282 void linux_nat_set_new_thread (struct target_ops
*, void (*) (struct lwp_info
*));
284 /* Register a method to call whenever a new thread is deleted. */
285 void linux_nat_set_delete_thread (struct target_ops
*,
286 void (*) (struct arch_lwp_info
*));
288 /* Register a method to call whenever a new fork is attached. */
289 typedef void (linux_nat_new_fork_ftype
) (struct lwp_info
*parent
,
291 void linux_nat_set_new_fork (struct target_ops
*ops
,
292 linux_nat_new_fork_ftype
*fn
);
294 /* Register a method to call whenever a process is killed or
296 typedef void (linux_nat_forget_process_ftype
) (pid_t pid
);
297 void linux_nat_set_forget_process (struct target_ops
*ops
,
298 linux_nat_forget_process_ftype
*fn
);
300 /* Call the method registered with the function above. PID is the
301 process to forget about. */
302 void linux_nat_forget_process (pid_t pid
);
304 /* Register a method that converts a siginfo object between the layout
305 that ptrace returns, and the layout in the architecture of the
307 void linux_nat_set_siginfo_fixup (struct target_ops
*,
308 int (*) (siginfo_t
*,
312 /* Register a method to call prior to resuming a thread. */
314 void linux_nat_set_prepare_to_resume (struct target_ops
*,
315 void (*) (struct lwp_info
*));
317 /* Update linux-nat internal state when changing from one fork
319 void linux_nat_switch_fork (ptid_t new_ptid
);
321 /* Store the saved siginfo associated with PTID in *SIGINFO.
322 Return 1 if it was retrieved successfully, 0 otherwise (*SIGINFO is
323 uninitialized in such case). */
324 int linux_nat_get_siginfo (ptid_t ptid
, siginfo_t
*siginfo
);
326 /* Set alternative SIGTRAP-like events recognizer. */
327 void linux_nat_set_status_is_event (struct target_ops
*t
,
328 int (*status_is_event
) (int status
));