]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/linux-nat.h
Convert struct target_ops to C++
[thirdparty/binutils-gdb.git] / gdb / linux-nat.h
1 /* Native debugging support for GNU/Linux (LWP layer).
2
3 Copyright (C) 2000-2018 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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/>. */
19
20 #include "nat/linux-nat.h"
21 #include "inf-ptrace.h"
22 #include "target.h"
23 #include <signal.h>
24
25 /* A prototype generic GNU/Linux target. A concrete instance should
26 override it with local methods. */
27
28 class linux_nat_target : public inf_ptrace_target
29 {
30 public:
31 linux_nat_target ();
32 ~linux_nat_target () override = 0;
33
34 thread_control_capabilities get_thread_control_capabilities () override
35 { return tc_schedlock; }
36
37 void create_inferior (const char *, const std::string &,
38 char **, int) override;
39
40 void attach (const char *, int) override;
41
42 void detach (inferior *, int) override;
43
44 void resume (ptid_t, int, enum gdb_signal) override;
45
46 ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
47
48 void pass_signals (int, unsigned char *) override;
49
50 enum target_xfer_status xfer_partial (enum target_object object,
51 const char *annex,
52 gdb_byte *readbuf,
53 const gdb_byte *writebuf,
54 ULONGEST offset, ULONGEST len,
55 ULONGEST *xfered_len) override;
56
57 void kill () override;
58
59 void mourn_inferior () override;
60 int thread_alive (ptid_t ptid) override;
61
62 void update_thread_list () override;
63
64 const char *pid_to_str (ptid_t) override;
65
66 const char *thread_name (struct thread_info *) override;
67
68 struct address_space *thread_address_space (ptid_t) override;
69
70 int stopped_by_watchpoint () override;
71
72 int stopped_data_address (CORE_ADDR *) override;
73
74 int stopped_by_sw_breakpoint () override;
75 int supports_stopped_by_sw_breakpoint () override;
76
77 int stopped_by_hw_breakpoint () override;
78 int supports_stopped_by_hw_breakpoint () override;
79
80 void thread_events (int) override;
81
82 int can_async_p () override;
83 int is_async_p () override;
84
85 int supports_non_stop () override;
86 int always_non_stop_p () override;
87
88 void async (int) override;
89
90 void close () override;
91
92 void stop (ptid_t) override;
93
94 int supports_multi_process () override;
95
96 int supports_disable_randomization () override;
97
98 int core_of_thread (ptid_t ptid) override;
99
100 int filesystem_is_local () override;
101
102 int fileio_open (struct inferior *inf, const char *filename,
103 int flags, int mode, int warn_if_slow,
104 int *target_errno) override;
105
106 gdb::optional<std::string>
107 fileio_readlink (struct inferior *inf,
108 const char *filename,
109 int *target_errno) override;
110
111 int fileio_unlink (struct inferior *inf,
112 const char *filename,
113 int *target_errno) override;
114
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;
119
120 int insert_exec_catchpoint (int) override;
121 int remove_exec_catchpoint (int) override;
122
123 int set_syscall_catchpoint (int pid, bool needed, int any_count,
124 gdb::array_view<const int> syscall_counts) override;
125
126 char *pid_to_exec_file (int pid) override;
127
128 void post_startup_inferior (ptid_t) override;
129
130 void post_attach (int) override;
131
132 int follow_fork (int, int) override;
133
134 std::vector<static_tracepoint_marker>
135 static_tracepoint_markers_by_strid (const char *id) override;
136
137 /* Methods that are meant to overridden by the concrete
138 arch-specific target instance. */
139
140 virtual void low_resume (ptid_t ptid, int step, enum gdb_signal sig)
141 { inf_ptrace_target::resume (ptid, step, sig); }
142
143 virtual int low_stopped_by_watchpoint ()
144 { return 0; }
145
146 virtual int low_stopped_data_address (CORE_ADDR *addr_p)
147 { return 0; }
148 };
149
150 /* The final/concrete instance. */
151 extern linux_nat_target *linux_target;
152
153 struct arch_lwp_info;
154
155 /* Structure describing an LWP. This is public only for the purposes
156 of ALL_LWPS; target-specific code should generally not access it
157 directly. */
158
159 struct lwp_info
160 {
161 /* The process id of the LWP. This is a combination of the LWP id
162 and overall process id. */
163 ptid_t ptid;
164
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;
168
169 /* Non-zero if we sent this LWP a SIGSTOP (but the LWP didn't report
170 it back yet). */
171 int signalled;
172
173 /* Non-zero if this LWP is stopped. */
174 int stopped;
175
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. */
182 int resumed;
183
184 /* The last resume GDB requested on this thread. */
185 enum resume_kind last_resume_kind;
186
187 /* If non-zero, a pending wait status. */
188 int status;
189
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. */
195 CORE_ADDR stop_pc;
196
197 /* Non-zero if we were stepping this LWP. */
198 int step;
199
200 /* The reason the LWP last stopped, if we need to track it
201 (breakpoint, watchpoint, etc.) */
202 enum target_stop_reason stop_reason;
203
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;
211
212 /* Non-zero if we expect a duplicated SIGINT. */
213 int ignore_sigint;
214
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;
219
220 /* Signal whether we are in a SYSCALL_ENTRY or
221 in a SYSCALL_RETURN event.
222 Values:
223 - TARGET_WAITKIND_SYSCALL_ENTRY
224 - TARGET_WAITKIND_SYSCALL_RETURN */
225 enum target_waitkind syscall_state;
226
227 /* The processor core this LWP was last seen on. */
228 int core;
229
230 /* Arch-specific additions. */
231 struct arch_lwp_info *arch_private;
232
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;
237 };
238
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;
243
244 /* Does the current host support PTRACE_GETREGSET? */
245 extern enum tribool have_ptrace_getregset;
246
247 /* Iterate over each active thread (light-weight process). */
248 #define ALL_LWPS(LP) \
249 for ((LP) = lwp_list; \
250 (LP) != NULL; \
251 (LP) = (LP)->next)
252
253 /* Attempt to initialize libthread_db. */
254 void check_for_thread_db (void);
255
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);
262
263 /* Return the set of signals used by the threads library. */
264 extern void lin_thread_get_thread_signals (sigset_t *mask);
265
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);
269
270 /* For linux_stop_lwp see nat/linux-nat.h. */
271
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);
275
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
278 left stopped.) */
279 extern void linux_unstop_all_lwps (void);
280
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 *));
283
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 *));
287
288 /* Register a method to call whenever a new fork is attached. */
289 typedef void (linux_nat_new_fork_ftype) (struct lwp_info *parent,
290 pid_t child_pid);
291 void linux_nat_set_new_fork (struct target_ops *ops,
292 linux_nat_new_fork_ftype *fn);
293
294 /* Register a method to call whenever a process is killed or
295 detached. */
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);
299
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);
303
304 /* Register a method that converts a siginfo object between the layout
305 that ptrace returns, and the layout in the architecture of the
306 inferior. */
307 void linux_nat_set_siginfo_fixup (struct target_ops *,
308 int (*) (siginfo_t *,
309 gdb_byte *,
310 int));
311
312 /* Register a method to call prior to resuming a thread. */
313
314 void linux_nat_set_prepare_to_resume (struct target_ops *,
315 void (*) (struct lwp_info *));
316
317 /* Update linux-nat internal state when changing from one fork
318 to another. */
319 void linux_nat_switch_fork (ptid_t new_ptid);
320
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);
325
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));