]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdbserver/linux-low.cc
gdbserver: turn target op 'supports_software_single_step' into a method
[thirdparty/binutils-gdb.git] / gdbserver / linux-low.cc
CommitLineData
da6d8c04 1/* Low level interface to ptrace, for the remote server for GDB.
b811d2c2 2 Copyright (C) 1995-2020 Free Software Foundation, Inc.
da6d8c04
DJ
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
a9762ec7 8 the Free Software Foundation; either version 3 of the License, or
da6d8c04
DJ
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
a9762ec7 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
da6d8c04
DJ
18
19#include "server.h"
58caa3dc 20#include "linux-low.h"
125f8a3d 21#include "nat/linux-osdata.h"
268a13a5 22#include "gdbsupport/agent.h"
de0d863e 23#include "tdesc.h"
268a13a5
TT
24#include "gdbsupport/rsp-low.h"
25#include "gdbsupport/signals-state-save-restore.h"
96d7229d
LM
26#include "nat/linux-nat.h"
27#include "nat/linux-waitpid.h"
268a13a5 28#include "gdbsupport/gdb_wait.h"
5826e159 29#include "nat/gdb_ptrace.h"
125f8a3d
GB
30#include "nat/linux-ptrace.h"
31#include "nat/linux-procfs.h"
8cc73a39 32#include "nat/linux-personality.h"
da6d8c04
DJ
33#include <signal.h>
34#include <sys/ioctl.h>
35#include <fcntl.h>
0a30fbc4 36#include <unistd.h>
fd500816 37#include <sys/syscall.h>
f9387fc3 38#include <sched.h>
07e059b5
VP
39#include <ctype.h>
40#include <pwd.h>
41#include <sys/types.h>
42#include <dirent.h>
53ce3c39 43#include <sys/stat.h>
efcbbd14 44#include <sys/vfs.h>
1570b33e 45#include <sys/uio.h>
268a13a5 46#include "gdbsupport/filestuff.h"
c144c7a0 47#include "tracepoint.h"
276d4552 48#include <inttypes.h>
268a13a5 49#include "gdbsupport/common-inferior.h"
2090129c 50#include "nat/fork-inferior.h"
268a13a5 51#include "gdbsupport/environ.h"
21987b9c 52#include "gdbsupport/gdb-sigmask.h"
268a13a5 53#include "gdbsupport/scoped_restore.h"
957f3f49
DE
54#ifndef ELFMAG0
55/* Don't include <linux/elf.h> here. If it got included by gdb_proc_service.h
56 then ELFMAG0 will have been defined. If it didn't get included by
57 gdb_proc_service.h then including it will likely introduce a duplicate
58 definition of elf_fpregset_t. */
59#include <elf.h>
60#endif
14d2069a 61#include "nat/linux-namespaces.h"
efcbbd14 62
03583c20
UW
63#ifdef HAVE_PERSONALITY
64# include <sys/personality.h>
65# if !HAVE_DECL_ADDR_NO_RANDOMIZE
66# define ADDR_NO_RANDOMIZE 0x0040000
67# endif
68#endif
69
fd462a61
DJ
70#ifndef O_LARGEFILE
71#define O_LARGEFILE 0
72#endif
1a981360 73
69f4c9cc
AH
74#ifndef AT_HWCAP2
75#define AT_HWCAP2 26
76#endif
77
db0dfaa0
LM
78/* Some targets did not define these ptrace constants from the start,
79 so gdbserver defines them locally here. In the future, these may
80 be removed after they are added to asm/ptrace.h. */
81#if !(defined(PT_TEXT_ADDR) \
82 || defined(PT_DATA_ADDR) \
83 || defined(PT_TEXT_END_ADDR))
84#if defined(__mcoldfire__)
85/* These are still undefined in 3.10 kernels. */
86#define PT_TEXT_ADDR 49*4
87#define PT_DATA_ADDR 50*4
88#define PT_TEXT_END_ADDR 51*4
89/* BFIN already defines these since at least 2.6.32 kernels. */
90#elif defined(BFIN)
91#define PT_TEXT_ADDR 220
92#define PT_TEXT_END_ADDR 224
93#define PT_DATA_ADDR 228
94/* These are still undefined in 3.10 kernels. */
95#elif defined(__TMS320C6X__)
96#define PT_TEXT_ADDR (0x10000*4)
97#define PT_DATA_ADDR (0x10004*4)
98#define PT_TEXT_END_ADDR (0x10008*4)
99#endif
100#endif
101
5203ae1e
TBA
102#if (defined(__UCLIBC__) \
103 && defined(HAS_NOMMU) \
104 && defined(PT_TEXT_ADDR) \
105 && defined(PT_DATA_ADDR) \
106 && defined(PT_TEXT_END_ADDR))
107#define SUPPORTS_READ_OFFSETS
108#endif
109
9accd112 110#ifdef HAVE_LINUX_BTRACE
125f8a3d 111# include "nat/linux-btrace.h"
268a13a5 112# include "gdbsupport/btrace-common.h"
9accd112
MM
113#endif
114
8365dcf5
TJB
115#ifndef HAVE_ELF32_AUXV_T
116/* Copied from glibc's elf.h. */
117typedef struct
118{
119 uint32_t a_type; /* Entry type */
120 union
121 {
122 uint32_t a_val; /* Integer value */
123 /* We use to have pointer elements added here. We cannot do that,
124 though, since it does not work when using 32-bit definitions
125 on 64-bit platforms and vice versa. */
126 } a_un;
127} Elf32_auxv_t;
128#endif
129
130#ifndef HAVE_ELF64_AUXV_T
131/* Copied from glibc's elf.h. */
132typedef struct
133{
134 uint64_t a_type; /* Entry type */
135 union
136 {
137 uint64_t a_val; /* Integer value */
138 /* We use to have pointer elements added here. We cannot do that,
139 though, since it does not work when using 32-bit definitions
140 on 64-bit platforms and vice versa. */
141 } a_un;
142} Elf64_auxv_t;
143#endif
144
ded48a5e
YQ
145/* Does the current host support PTRACE_GETREGSET? */
146int have_ptrace_getregset = -1;
147
cff068da
GB
148/* LWP accessors. */
149
150/* See nat/linux-nat.h. */
151
152ptid_t
153ptid_of_lwp (struct lwp_info *lwp)
154{
155 return ptid_of (get_lwp_thread (lwp));
156}
157
158/* See nat/linux-nat.h. */
159
4b134ca1
GB
160void
161lwp_set_arch_private_info (struct lwp_info *lwp,
162 struct arch_lwp_info *info)
163{
164 lwp->arch_private = info;
165}
166
167/* See nat/linux-nat.h. */
168
169struct arch_lwp_info *
170lwp_arch_private_info (struct lwp_info *lwp)
171{
172 return lwp->arch_private;
173}
174
175/* See nat/linux-nat.h. */
176
cff068da
GB
177int
178lwp_is_stopped (struct lwp_info *lwp)
179{
180 return lwp->stopped;
181}
182
183/* See nat/linux-nat.h. */
184
185enum target_stop_reason
186lwp_stop_reason (struct lwp_info *lwp)
187{
188 return lwp->stop_reason;
189}
190
0e00e962
AA
191/* See nat/linux-nat.h. */
192
193int
194lwp_is_stepping (struct lwp_info *lwp)
195{
196 return lwp->stepping;
197}
198
05044653
PA
199/* A list of all unknown processes which receive stop signals. Some
200 other process will presumably claim each of these as forked
201 children momentarily. */
24a09b5f 202
05044653
PA
203struct simple_pid_list
204{
205 /* The process ID. */
206 int pid;
207
208 /* The status as reported by waitpid. */
209 int status;
210
211 /* Next in chain. */
212 struct simple_pid_list *next;
213};
214struct simple_pid_list *stopped_pids;
215
216/* Trivial list manipulation functions to keep track of a list of new
217 stopped processes. */
218
219static void
220add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
221{
8d749320 222 struct simple_pid_list *new_pid = XNEW (struct simple_pid_list);
05044653
PA
223
224 new_pid->pid = pid;
225 new_pid->status = status;
226 new_pid->next = *listp;
227 *listp = new_pid;
228}
229
230static int
231pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
232{
233 struct simple_pid_list **p;
234
235 for (p = listp; *p != NULL; p = &(*p)->next)
236 if ((*p)->pid == pid)
237 {
238 struct simple_pid_list *next = (*p)->next;
239
240 *statusp = (*p)->status;
241 xfree (*p);
242 *p = next;
243 return 1;
244 }
245 return 0;
246}
24a09b5f 247
bde24c0a
PA
248enum stopping_threads_kind
249 {
250 /* Not stopping threads presently. */
251 NOT_STOPPING_THREADS,
252
253 /* Stopping threads. */
254 STOPPING_THREADS,
255
256 /* Stopping and suspending threads. */
257 STOPPING_AND_SUSPENDING_THREADS
258 };
259
260/* This is set while stop_all_lwps is in effect. */
261enum stopping_threads_kind stopping_threads = NOT_STOPPING_THREADS;
0d62e5e8
DJ
262
263/* FIXME make into a target method? */
24a09b5f 264int using_threads = 1;
24a09b5f 265
fa593d66
PA
266/* True if we're presently stabilizing threads (moving them out of
267 jump pads). */
268static int stabilizing_threads;
269
2acc282a 270static void linux_resume_one_lwp (struct lwp_info *lwp,
54a0b537 271 int step, int signal, siginfo_t *info);
7984d532
PA
272static void stop_all_lwps (int suspend, struct lwp_info *except);
273static void unstop_all_lwps (int unsuspend, struct lwp_info *except);
f50bf8e5 274static void unsuspend_all_lwps (struct lwp_info *except);
fa96cb38
PA
275static int linux_wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid,
276 int *wstat, int options);
95954743 277static int linux_wait_for_event (ptid_t ptid, int *wstat, int options);
b3312d80 278static struct lwp_info *add_lwp (ptid_t ptid);
95954743 279static void mark_lwp_dead (struct lwp_info *lwp, int wstat);
00db26fa 280static int lwp_is_marked_dead (struct lwp_info *lwp);
d50171e4 281static void proceed_all_lwps (void);
d50171e4 282static int finish_step_over (struct lwp_info *lwp);
d50171e4 283static int kill_lwp (unsigned long lwpid, int signo);
863d01bd
PA
284static void enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info);
285static void complete_ongoing_step_over (void);
ece66d65 286static int linux_low_ptrace_options (int attached);
ced2dffb 287static int check_ptrace_stopped_lwp_gone (struct lwp_info *lp);
e2b44075 288static void proceed_one_lwp (thread_info *thread, lwp_info *except);
d50171e4 289
582511be
PA
290/* When the event-loop is doing a step-over, this points at the thread
291 being stepped. */
292ptid_t step_over_bkpt;
293
7d00775e 294/* True if the low target can hardware single-step. */
d50171e4
PA
295
296static int
297can_hardware_single_step (void)
298{
7d00775e
AT
299 if (the_low_target.supports_hardware_single_step != NULL)
300 return the_low_target.supports_hardware_single_step ();
301 else
302 return 0;
303}
304
305/* True if the low target can software single-step. Such targets
fa5308bd 306 implement the GET_NEXT_PCS callback. */
7d00775e
AT
307
308static int
309can_software_single_step (void)
310{
fa5308bd 311 return (the_low_target.get_next_pcs != NULL);
d50171e4
PA
312}
313
314/* True if the low target supports memory breakpoints. If so, we'll
315 have a GET_PC implementation. */
316
317static int
318supports_breakpoints (void)
319{
320 return (the_low_target.get_pc != NULL);
321}
0d62e5e8 322
fa593d66
PA
323/* Returns true if this target can support fast tracepoints. This
324 does not mean that the in-process agent has been loaded in the
325 inferior. */
326
327static int
328supports_fast_tracepoints (void)
329{
330 return the_low_target.install_fast_tracepoint_jump_pad != NULL;
331}
332
c2d6af84
PA
333/* True if LWP is stopped in its stepping range. */
334
335static int
336lwp_in_step_range (struct lwp_info *lwp)
337{
338 CORE_ADDR pc = lwp->stop_pc;
339
340 return (pc >= lwp->step_range_start && pc < lwp->step_range_end);
341}
342
0d62e5e8
DJ
343struct pending_signals
344{
345 int signal;
32ca6d61 346 siginfo_t info;
0d62e5e8
DJ
347 struct pending_signals *prev;
348};
611cb4a5 349
bd99dc85
PA
350/* The read/write ends of the pipe registered as waitable file in the
351 event loop. */
352static int linux_event_pipe[2] = { -1, -1 };
353
354/* True if we're currently in async mode. */
355#define target_is_async_p() (linux_event_pipe[0] != -1)
356
02fc4de7 357static void send_sigstop (struct lwp_info *lwp);
fa96cb38 358static void wait_for_sigstop (void);
bd99dc85 359
d0722149
DE
360/* Return non-zero if HEADER is a 64-bit ELF file. */
361
362static int
214d508e 363elf_64_header_p (const Elf64_Ehdr *header, unsigned int *machine)
d0722149 364{
214d508e
L
365 if (header->e_ident[EI_MAG0] == ELFMAG0
366 && header->e_ident[EI_MAG1] == ELFMAG1
367 && header->e_ident[EI_MAG2] == ELFMAG2
368 && header->e_ident[EI_MAG3] == ELFMAG3)
369 {
370 *machine = header->e_machine;
371 return header->e_ident[EI_CLASS] == ELFCLASS64;
372
373 }
374 *machine = EM_NONE;
375 return -1;
d0722149
DE
376}
377
378/* Return non-zero if FILE is a 64-bit ELF file,
379 zero if the file is not a 64-bit ELF file,
380 and -1 if the file is not accessible or doesn't exist. */
381
be07f1a2 382static int
214d508e 383elf_64_file_p (const char *file, unsigned int *machine)
d0722149 384{
957f3f49 385 Elf64_Ehdr header;
d0722149
DE
386 int fd;
387
388 fd = open (file, O_RDONLY);
389 if (fd < 0)
390 return -1;
391
392 if (read (fd, &header, sizeof (header)) != sizeof (header))
393 {
394 close (fd);
395 return 0;
396 }
397 close (fd);
398
214d508e 399 return elf_64_header_p (&header, machine);
d0722149
DE
400}
401
be07f1a2
PA
402/* Accepts an integer PID; Returns true if the executable PID is
403 running is a 64-bit ELF file.. */
404
405int
214d508e 406linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine)
be07f1a2 407{
d8d2a3ee 408 char file[PATH_MAX];
be07f1a2
PA
409
410 sprintf (file, "/proc/%d/exe", pid);
214d508e 411 return elf_64_file_p (file, machine);
be07f1a2
PA
412}
413
bd99dc85
PA
414static void
415delete_lwp (struct lwp_info *lwp)
416{
fa96cb38
PA
417 struct thread_info *thr = get_lwp_thread (lwp);
418
419 if (debug_threads)
420 debug_printf ("deleting %ld\n", lwpid_of (thr));
421
422 remove_thread (thr);
466eecee
SM
423
424 if (the_low_target.delete_thread != NULL)
425 the_low_target.delete_thread (lwp->arch_private);
426 else
427 gdb_assert (lwp->arch_private == NULL);
428
bd99dc85
PA
429 free (lwp);
430}
431
95954743
PA
432/* Add a process to the common process list, and set its private
433 data. */
434
435static struct process_info *
436linux_add_process (int pid, int attached)
437{
438 struct process_info *proc;
439
95954743 440 proc = add_process (pid, attached);
8d749320 441 proc->priv = XCNEW (struct process_info_private);
95954743 442
aa5ca48f 443 if (the_low_target.new_process != NULL)
fe978cb0 444 proc->priv->arch_private = the_low_target.new_process ();
aa5ca48f 445
95954743
PA
446 return proc;
447}
448
582511be
PA
449static CORE_ADDR get_pc (struct lwp_info *lwp);
450
ece66d65 451/* Call the target arch_setup function on the current thread. */
94585166
DB
452
453static void
454linux_arch_setup (void)
455{
456 the_low_target.arch_setup ();
457}
458
459/* Call the target arch_setup function on THREAD. */
460
461static void
462linux_arch_setup_thread (struct thread_info *thread)
463{
464 struct thread_info *saved_thread;
465
466 saved_thread = current_thread;
467 current_thread = thread;
468
469 linux_arch_setup ();
470
471 current_thread = saved_thread;
472}
473
474/* Handle a GNU/Linux extended wait response. If we see a clone,
475 fork, or vfork event, we need to add the new LWP to our list
476 (and return 0 so as not to report the trap to higher layers).
477 If we see an exec event, we will modify ORIG_EVENT_LWP to point
478 to a new LWP representing the new program. */
0d62e5e8 479
de0d863e 480static int
94585166 481handle_extended_wait (struct lwp_info **orig_event_lwp, int wstat)
24a09b5f 482{
c12a5089 483 client_state &cs = get_client_state ();
94585166 484 struct lwp_info *event_lwp = *orig_event_lwp;
89a5711c 485 int event = linux_ptrace_get_extended_event (wstat);
de0d863e 486 struct thread_info *event_thr = get_lwp_thread (event_lwp);
54a0b537 487 struct lwp_info *new_lwp;
24a09b5f 488
65706a29
PA
489 gdb_assert (event_lwp->waitstatus.kind == TARGET_WAITKIND_IGNORE);
490
82075af2
JS
491 /* All extended events we currently use are mid-syscall. Only
492 PTRACE_EVENT_STOP is delivered more like a signal-stop, but
493 you have to be using PTRACE_SEIZE to get that. */
494 event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY;
495
c269dbdb
DB
496 if ((event == PTRACE_EVENT_FORK) || (event == PTRACE_EVENT_VFORK)
497 || (event == PTRACE_EVENT_CLONE))
24a09b5f 498 {
95954743 499 ptid_t ptid;
24a09b5f 500 unsigned long new_pid;
05044653 501 int ret, status;
24a09b5f 502
de0d863e 503 /* Get the pid of the new lwp. */
d86d4aaf 504 ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_thr), (PTRACE_TYPE_ARG3) 0,
56f7af9c 505 &new_pid);
24a09b5f
DJ
506
507 /* If we haven't already seen the new PID stop, wait for it now. */
05044653 508 if (!pull_pid_from_list (&stopped_pids, new_pid, &status))
24a09b5f
DJ
509 {
510 /* The new child has a pending SIGSTOP. We can't affect it until it
511 hits the SIGSTOP, but we're already attached. */
512
97438e3f 513 ret = my_waitpid (new_pid, &status, __WALL);
24a09b5f
DJ
514
515 if (ret == -1)
516 perror_with_name ("waiting for new child");
517 else if (ret != new_pid)
518 warning ("wait returned unexpected PID %d", ret);
da5898ce 519 else if (!WIFSTOPPED (status))
24a09b5f
DJ
520 warning ("wait returned unexpected status 0x%x", status);
521 }
522
c269dbdb 523 if (event == PTRACE_EVENT_FORK || event == PTRACE_EVENT_VFORK)
de0d863e
DB
524 {
525 struct process_info *parent_proc;
526 struct process_info *child_proc;
527 struct lwp_info *child_lwp;
bfacd19d 528 struct thread_info *child_thr;
de0d863e
DB
529 struct target_desc *tdesc;
530
fd79271b 531 ptid = ptid_t (new_pid, new_pid, 0);
de0d863e
DB
532
533 if (debug_threads)
534 {
535 debug_printf ("HEW: Got fork event from LWP %ld, "
536 "new child is %d\n",
e38504b3 537 ptid_of (event_thr).lwp (),
e99b03dc 538 ptid.pid ());
de0d863e
DB
539 }
540
541 /* Add the new process to the tables and clone the breakpoint
542 lists of the parent. We need to do this even if the new process
543 will be detached, since we will need the process object and the
544 breakpoints to remove any breakpoints from memory when we
545 detach, and the client side will access registers. */
546 child_proc = linux_add_process (new_pid, 0);
547 gdb_assert (child_proc != NULL);
548 child_lwp = add_lwp (ptid);
549 gdb_assert (child_lwp != NULL);
550 child_lwp->stopped = 1;
bfacd19d
DB
551 child_lwp->must_set_ptrace_flags = 1;
552 child_lwp->status_pending_p = 0;
553 child_thr = get_lwp_thread (child_lwp);
554 child_thr->last_resume_kind = resume_stop;
998d452a
PA
555 child_thr->last_status.kind = TARGET_WAITKIND_STOPPED;
556
863d01bd 557 /* If we're suspending all threads, leave this one suspended
0f8288ae
YQ
558 too. If the fork/clone parent is stepping over a breakpoint,
559 all other threads have been suspended already. Leave the
560 child suspended too. */
561 if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS
562 || event_lwp->bp_reinsert != 0)
863d01bd
PA
563 {
564 if (debug_threads)
565 debug_printf ("HEW: leaving child suspended\n");
566 child_lwp->suspended = 1;
567 }
568
de0d863e
DB
569 parent_proc = get_thread_process (event_thr);
570 child_proc->attached = parent_proc->attached;
2e7b624b
YQ
571
572 if (event_lwp->bp_reinsert != 0
573 && can_software_single_step ()
574 && event == PTRACE_EVENT_VFORK)
575 {
3b9a79ef
YQ
576 /* If we leave single-step breakpoints there, child will
577 hit it, so uninsert single-step breakpoints from parent
2e7b624b
YQ
578 (and child). Once vfork child is done, reinsert
579 them back to parent. */
3b9a79ef 580 uninsert_single_step_breakpoints (event_thr);
2e7b624b
YQ
581 }
582
63c40ec7 583 clone_all_breakpoints (child_thr, event_thr);
de0d863e 584
cc397f3a 585 tdesc = allocate_target_description ();
de0d863e
DB
586 copy_target_description (tdesc, parent_proc->tdesc);
587 child_proc->tdesc = tdesc;
de0d863e 588
3a8a0396
DB
589 /* Clone arch-specific process data. */
590 if (the_low_target.new_fork != NULL)
591 the_low_target.new_fork (parent_proc, child_proc);
592
de0d863e 593 /* Save fork info in the parent thread. */
c269dbdb
DB
594 if (event == PTRACE_EVENT_FORK)
595 event_lwp->waitstatus.kind = TARGET_WAITKIND_FORKED;
596 else if (event == PTRACE_EVENT_VFORK)
597 event_lwp->waitstatus.kind = TARGET_WAITKIND_VFORKED;
598
de0d863e 599 event_lwp->waitstatus.value.related_pid = ptid;
c269dbdb 600
de0d863e
DB
601 /* The status_pending field contains bits denoting the
602 extended event, so when the pending event is handled,
603 the handler will look at lwp->waitstatus. */
604 event_lwp->status_pending_p = 1;
605 event_lwp->status_pending = wstat;
606
5a04c4cf
PA
607 /* Link the threads until the parent event is passed on to
608 higher layers. */
609 event_lwp->fork_relative = child_lwp;
610 child_lwp->fork_relative = event_lwp;
611
3b9a79ef
YQ
612 /* If the parent thread is doing step-over with single-step
613 breakpoints, the list of single-step breakpoints are cloned
2e7b624b
YQ
614 from the parent's. Remove them from the child process.
615 In case of vfork, we'll reinsert them back once vforked
616 child is done. */
8a81c5d7 617 if (event_lwp->bp_reinsert != 0
2e7b624b 618 && can_software_single_step ())
8a81c5d7 619 {
8a81c5d7
YQ
620 /* The child process is forked and stopped, so it is safe
621 to access its memory without stopping all other threads
622 from other processes. */
3b9a79ef 623 delete_single_step_breakpoints (child_thr);
8a81c5d7 624
3b9a79ef
YQ
625 gdb_assert (has_single_step_breakpoints (event_thr));
626 gdb_assert (!has_single_step_breakpoints (child_thr));
8a81c5d7
YQ
627 }
628
de0d863e
DB
629 /* Report the event. */
630 return 0;
631 }
632
fa96cb38
PA
633 if (debug_threads)
634 debug_printf ("HEW: Got clone event "
635 "from LWP %ld, new child is LWP %ld\n",
636 lwpid_of (event_thr), new_pid);
637
fd79271b 638 ptid = ptid_t (pid_of (event_thr), new_pid, 0);
b3312d80 639 new_lwp = add_lwp (ptid);
24a09b5f 640
e27d73f6
DE
641 /* Either we're going to immediately resume the new thread
642 or leave it stopped. linux_resume_one_lwp is a nop if it
643 thinks the thread is currently running, so set this first
644 before calling linux_resume_one_lwp. */
645 new_lwp->stopped = 1;
646
0f8288ae
YQ
647 /* If we're suspending all threads, leave this one suspended
648 too. If the fork/clone parent is stepping over a breakpoint,
649 all other threads have been suspended already. Leave the
650 child suspended too. */
651 if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS
652 || event_lwp->bp_reinsert != 0)
bde24c0a
PA
653 new_lwp->suspended = 1;
654
da5898ce
DJ
655 /* Normally we will get the pending SIGSTOP. But in some cases
656 we might get another signal delivered to the group first.
f21cc1a2 657 If we do get another signal, be sure not to lose it. */
20ba1ce6 658 if (WSTOPSIG (status) != SIGSTOP)
da5898ce 659 {
54a0b537 660 new_lwp->stop_expected = 1;
20ba1ce6
PA
661 new_lwp->status_pending_p = 1;
662 new_lwp->status_pending = status;
da5898ce 663 }
c12a5089 664 else if (cs.report_thread_events)
65706a29
PA
665 {
666 new_lwp->waitstatus.kind = TARGET_WAITKIND_THREAD_CREATED;
667 new_lwp->status_pending_p = 1;
668 new_lwp->status_pending = status;
669 }
de0d863e 670
a0aad537 671#ifdef USE_THREAD_DB
94c207e0 672 thread_db_notice_clone (event_thr, ptid);
a0aad537 673#endif
86299109 674
de0d863e
DB
675 /* Don't report the event. */
676 return 1;
24a09b5f 677 }
c269dbdb
DB
678 else if (event == PTRACE_EVENT_VFORK_DONE)
679 {
680 event_lwp->waitstatus.kind = TARGET_WAITKIND_VFORK_DONE;
681
2e7b624b
YQ
682 if (event_lwp->bp_reinsert != 0 && can_software_single_step ())
683 {
3b9a79ef 684 reinsert_single_step_breakpoints (event_thr);
2e7b624b 685
3b9a79ef 686 gdb_assert (has_single_step_breakpoints (event_thr));
2e7b624b
YQ
687 }
688
c269dbdb
DB
689 /* Report the event. */
690 return 0;
691 }
c12a5089 692 else if (event == PTRACE_EVENT_EXEC && cs.report_exec_events)
94585166
DB
693 {
694 struct process_info *proc;
f27866ba 695 std::vector<int> syscalls_to_catch;
94585166
DB
696 ptid_t event_ptid;
697 pid_t event_pid;
698
699 if (debug_threads)
700 {
701 debug_printf ("HEW: Got exec event from LWP %ld\n",
702 lwpid_of (event_thr));
703 }
704
705 /* Get the event ptid. */
706 event_ptid = ptid_of (event_thr);
e99b03dc 707 event_pid = event_ptid.pid ();
94585166 708
82075af2 709 /* Save the syscall list from the execing process. */
94585166 710 proc = get_thread_process (event_thr);
f27866ba 711 syscalls_to_catch = std::move (proc->syscalls_to_catch);
82075af2
JS
712
713 /* Delete the execing process and all its threads. */
8adb37b9 714 the_target->pt->mourn (proc);
94585166
DB
715 current_thread = NULL;
716
717 /* Create a new process/lwp/thread. */
718 proc = linux_add_process (event_pid, 0);
719 event_lwp = add_lwp (event_ptid);
720 event_thr = get_lwp_thread (event_lwp);
721 gdb_assert (current_thread == event_thr);
722 linux_arch_setup_thread (event_thr);
723
724 /* Set the event status. */
725 event_lwp->waitstatus.kind = TARGET_WAITKIND_EXECD;
726 event_lwp->waitstatus.value.execd_pathname
727 = xstrdup (linux_proc_pid_to_exec_file (lwpid_of (event_thr)));
728
729 /* Mark the exec status as pending. */
730 event_lwp->stopped = 1;
731 event_lwp->status_pending_p = 1;
732 event_lwp->status_pending = wstat;
733 event_thr->last_resume_kind = resume_continue;
734 event_thr->last_status.kind = TARGET_WAITKIND_IGNORE;
735
82075af2
JS
736 /* Update syscall state in the new lwp, effectively mid-syscall too. */
737 event_lwp->syscall_state = TARGET_WAITKIND_SYSCALL_ENTRY;
738
739 /* Restore the list to catch. Don't rely on the client, which is free
740 to avoid sending a new list when the architecture doesn't change.
741 Also, for ANY_SYSCALL, the architecture doesn't really matter. */
f27866ba 742 proc->syscalls_to_catch = std::move (syscalls_to_catch);
82075af2 743
94585166
DB
744 /* Report the event. */
745 *orig_event_lwp = event_lwp;
746 return 0;
747 }
de0d863e
DB
748
749 internal_error (__FILE__, __LINE__, _("unknown ptrace event %d"), event);
24a09b5f
DJ
750}
751
d50171e4
PA
752/* Return the PC as read from the regcache of LWP, without any
753 adjustment. */
754
755static CORE_ADDR
756get_pc (struct lwp_info *lwp)
757{
0bfdf32f 758 struct thread_info *saved_thread;
d50171e4
PA
759 struct regcache *regcache;
760 CORE_ADDR pc;
761
762 if (the_low_target.get_pc == NULL)
763 return 0;
764
0bfdf32f
GB
765 saved_thread = current_thread;
766 current_thread = get_lwp_thread (lwp);
d50171e4 767
0bfdf32f 768 regcache = get_thread_regcache (current_thread, 1);
d50171e4
PA
769 pc = (*the_low_target.get_pc) (regcache);
770
771 if (debug_threads)
87ce2a04 772 debug_printf ("pc is 0x%lx\n", (long) pc);
d50171e4 773
0bfdf32f 774 current_thread = saved_thread;
d50171e4
PA
775 return pc;
776}
777
82075af2 778/* This function should only be called if LWP got a SYSCALL_SIGTRAP.
4cc32bec 779 Fill *SYSNO with the syscall nr trapped. */
82075af2
JS
780
781static void
4cc32bec 782get_syscall_trapinfo (struct lwp_info *lwp, int *sysno)
82075af2
JS
783{
784 struct thread_info *saved_thread;
785 struct regcache *regcache;
786
787 if (the_low_target.get_syscall_trapinfo == NULL)
788 {
789 /* If we cannot get the syscall trapinfo, report an unknown
4cc32bec 790 system call number. */
82075af2 791 *sysno = UNKNOWN_SYSCALL;
82075af2
JS
792 return;
793 }
794
795 saved_thread = current_thread;
796 current_thread = get_lwp_thread (lwp);
797
798 regcache = get_thread_regcache (current_thread, 1);
4cc32bec 799 (*the_low_target.get_syscall_trapinfo) (regcache, sysno);
82075af2
JS
800
801 if (debug_threads)
4cc32bec 802 debug_printf ("get_syscall_trapinfo sysno %d\n", *sysno);
82075af2
JS
803
804 current_thread = saved_thread;
805}
806
e7ad2f14 807static int check_stopped_by_watchpoint (struct lwp_info *child);
0d62e5e8 808
e7ad2f14
PA
809/* Called when the LWP stopped for a signal/trap. If it stopped for a
810 trap check what caused it (breakpoint, watchpoint, trace, etc.),
811 and save the result in the LWP's stop_reason field. If it stopped
812 for a breakpoint, decrement the PC if necessary on the lwp's
813 architecture. Returns true if we now have the LWP's stop PC. */
0d62e5e8 814
582511be 815static int
e7ad2f14 816save_stop_reason (struct lwp_info *lwp)
0d62e5e8 817{
582511be
PA
818 CORE_ADDR pc;
819 CORE_ADDR sw_breakpoint_pc;
820 struct thread_info *saved_thread;
3e572f71
PA
821#if USE_SIGTRAP_SIGINFO
822 siginfo_t siginfo;
823#endif
d50171e4
PA
824
825 if (the_low_target.get_pc == NULL)
826 return 0;
0d62e5e8 827
582511be
PA
828 pc = get_pc (lwp);
829 sw_breakpoint_pc = pc - the_low_target.decr_pc_after_break;
d50171e4 830
582511be
PA
831 /* breakpoint_at reads from the current thread. */
832 saved_thread = current_thread;
833 current_thread = get_lwp_thread (lwp);
47c0c975 834
3e572f71
PA
835#if USE_SIGTRAP_SIGINFO
836 if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread),
837 (PTRACE_TYPE_ARG3) 0, &siginfo) == 0)
838 {
839 if (siginfo.si_signo == SIGTRAP)
840 {
e7ad2f14
PA
841 if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code)
842 && GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code))
3e572f71 843 {
e7ad2f14
PA
844 /* The si_code is ambiguous on this arch -- check debug
845 registers. */
846 if (!check_stopped_by_watchpoint (lwp))
847 lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
848 }
849 else if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code))
850 {
851 /* If we determine the LWP stopped for a SW breakpoint,
852 trust it. Particularly don't check watchpoint
853 registers, because at least on s390, we'd find
854 stopped-by-watchpoint as long as there's a watchpoint
855 set. */
3e572f71 856 lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
3e572f71 857 }
e7ad2f14 858 else if (GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code))
3e572f71 859 {
e7ad2f14
PA
860 /* This can indicate either a hardware breakpoint or
861 hardware watchpoint. Check debug registers. */
862 if (!check_stopped_by_watchpoint (lwp))
863 lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
3e572f71 864 }
2bf6fb9d
PA
865 else if (siginfo.si_code == TRAP_TRACE)
866 {
e7ad2f14
PA
867 /* We may have single stepped an instruction that
868 triggered a watchpoint. In that case, on some
869 architectures (such as x86), instead of TRAP_HWBKPT,
870 si_code indicates TRAP_TRACE, and we need to check
871 the debug registers separately. */
872 if (!check_stopped_by_watchpoint (lwp))
873 lwp->stop_reason = TARGET_STOPPED_BY_SINGLE_STEP;
2bf6fb9d 874 }
3e572f71
PA
875 }
876 }
877#else
582511be
PA
878 /* We may have just stepped a breakpoint instruction. E.g., in
879 non-stop mode, GDB first tells the thread A to step a range, and
880 then the user inserts a breakpoint inside the range. In that
8090aef2
PA
881 case we need to report the breakpoint PC. */
882 if ((!lwp->stepping || lwp->stop_pc == sw_breakpoint_pc)
582511be 883 && (*the_low_target.breakpoint_at) (sw_breakpoint_pc))
e7ad2f14
PA
884 lwp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
885
886 if (hardware_breakpoint_inserted_here (pc))
887 lwp->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
888
889 if (lwp->stop_reason == TARGET_STOPPED_BY_NO_REASON)
890 check_stopped_by_watchpoint (lwp);
891#endif
892
893 if (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT)
582511be
PA
894 {
895 if (debug_threads)
896 {
897 struct thread_info *thr = get_lwp_thread (lwp);
898
899 debug_printf ("CSBB: %s stopped by software breakpoint\n",
900 target_pid_to_str (ptid_of (thr)));
901 }
902
903 /* Back up the PC if necessary. */
904 if (pc != sw_breakpoint_pc)
e7ad2f14 905 {
582511be
PA
906 struct regcache *regcache
907 = get_thread_regcache (current_thread, 1);
908 (*the_low_target.set_pc) (regcache, sw_breakpoint_pc);
909 }
910
e7ad2f14
PA
911 /* Update this so we record the correct stop PC below. */
912 pc = sw_breakpoint_pc;
582511be 913 }
e7ad2f14 914 else if (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT)
582511be
PA
915 {
916 if (debug_threads)
917 {
918 struct thread_info *thr = get_lwp_thread (lwp);
919
920 debug_printf ("CSBB: %s stopped by hardware breakpoint\n",
921 target_pid_to_str (ptid_of (thr)));
922 }
e7ad2f14
PA
923 }
924 else if (lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
925 {
926 if (debug_threads)
927 {
928 struct thread_info *thr = get_lwp_thread (lwp);
47c0c975 929
e7ad2f14
PA
930 debug_printf ("CSBB: %s stopped by hardware watchpoint\n",
931 target_pid_to_str (ptid_of (thr)));
932 }
582511be 933 }
e7ad2f14
PA
934 else if (lwp->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP)
935 {
936 if (debug_threads)
937 {
938 struct thread_info *thr = get_lwp_thread (lwp);
582511be 939
e7ad2f14
PA
940 debug_printf ("CSBB: %s stopped by trace\n",
941 target_pid_to_str (ptid_of (thr)));
942 }
943 }
944
945 lwp->stop_pc = pc;
582511be 946 current_thread = saved_thread;
e7ad2f14 947 return 1;
0d62e5e8 948}
ce3a066d 949
b3312d80 950static struct lwp_info *
95954743 951add_lwp (ptid_t ptid)
611cb4a5 952{
54a0b537 953 struct lwp_info *lwp;
0d62e5e8 954
8d749320 955 lwp = XCNEW (struct lwp_info);
00db26fa
PA
956
957 lwp->waitstatus.kind = TARGET_WAITKIND_IGNORE;
0d62e5e8 958
754e3168
AH
959 lwp->thread = add_thread (ptid, lwp);
960
aa5ca48f 961 if (the_low_target.new_thread != NULL)
34c703da 962 the_low_target.new_thread (lwp);
aa5ca48f 963
54a0b537 964 return lwp;
0d62e5e8 965}
611cb4a5 966
2090129c
SDJ
967/* Callback to be used when calling fork_inferior, responsible for
968 actually initiating the tracing of the inferior. */
969
970static void
971linux_ptrace_fun ()
972{
973 if (ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0,
974 (PTRACE_TYPE_ARG4) 0) < 0)
50fa3001 975 trace_start_error_with_name ("ptrace");
2090129c
SDJ
976
977 if (setpgid (0, 0) < 0)
978 trace_start_error_with_name ("setpgid");
979
980 /* If GDBserver is connected to gdb via stdio, redirect the inferior's
981 stdout to stderr so that inferior i/o doesn't corrupt the connection.
982 Also, redirect stdin to /dev/null. */
983 if (remote_connection_is_stdio ())
984 {
985 if (close (0) < 0)
986 trace_start_error_with_name ("close");
987 if (open ("/dev/null", O_RDONLY) < 0)
988 trace_start_error_with_name ("open");
989 if (dup2 (2, 1) < 0)
990 trace_start_error_with_name ("dup2");
991 if (write (2, "stdin/stdout redirected\n",
992 sizeof ("stdin/stdout redirected\n") - 1) < 0)
993 {
994 /* Errors ignored. */;
995 }
996 }
997}
998
da6d8c04 999/* Start an inferior process and returns its pid.
2090129c
SDJ
1000 PROGRAM is the name of the program to be started, and PROGRAM_ARGS
1001 are its arguments. */
da6d8c04 1002
15295543
TBA
1003int
1004linux_process_target::create_inferior (const char *program,
1005 const std::vector<char *> &program_args)
da6d8c04 1006{
c12a5089 1007 client_state &cs = get_client_state ();
a6dbe5df 1008 struct lwp_info *new_lwp;
da6d8c04 1009 int pid;
95954743 1010 ptid_t ptid;
03583c20 1011
41272101
TT
1012 {
1013 maybe_disable_address_space_randomization restore_personality
c12a5089 1014 (cs.disable_randomization);
41272101
TT
1015 std::string str_program_args = stringify_argv (program_args);
1016
1017 pid = fork_inferior (program,
1018 str_program_args.c_str (),
1019 get_environ ()->envp (), linux_ptrace_fun,
1020 NULL, NULL, NULL, NULL);
1021 }
03583c20 1022
55d7b841 1023 linux_add_process (pid, 0);
95954743 1024
fd79271b 1025 ptid = ptid_t (pid, pid, 0);
95954743 1026 new_lwp = add_lwp (ptid);
a6dbe5df 1027 new_lwp->must_set_ptrace_flags = 1;
611cb4a5 1028
2090129c
SDJ
1029 post_fork_inferior (pid, program);
1030
a9fa9f7d 1031 return pid;
da6d8c04
DJ
1032}
1033
ece66d65
JS
1034/* Implement the post_create_inferior target_ops method. */
1035
6dee9afb
TBA
1036void
1037linux_process_target::post_create_inferior ()
ece66d65
JS
1038{
1039 struct lwp_info *lwp = get_thread_lwp (current_thread);
1040
1041 linux_arch_setup ();
1042
1043 if (lwp->must_set_ptrace_flags)
1044 {
1045 struct process_info *proc = current_process ();
1046 int options = linux_low_ptrace_options (proc->attached);
1047
1048 linux_enable_event_reporting (lwpid_of (current_thread), options);
1049 lwp->must_set_ptrace_flags = 0;
1050 }
1051}
1052
8784d563
PA
1053/* Attach to an inferior process. Returns 0 on success, ERRNO on
1054 error. */
da6d8c04 1055
7ae1a6a6
PA
1056int
1057linux_attach_lwp (ptid_t ptid)
da6d8c04 1058{
54a0b537 1059 struct lwp_info *new_lwp;
e38504b3 1060 int lwpid = ptid.lwp ();
611cb4a5 1061
b8e1b30e 1062 if (ptrace (PTRACE_ATTACH, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0)
56f7af9c 1063 != 0)
7ae1a6a6 1064 return errno;
24a09b5f 1065
b3312d80 1066 new_lwp = add_lwp (ptid);
0d62e5e8 1067
a6dbe5df
PA
1068 /* We need to wait for SIGSTOP before being able to make the next
1069 ptrace call on this LWP. */
1070 new_lwp->must_set_ptrace_flags = 1;
1071
644cebc9 1072 if (linux_proc_pid_is_stopped (lwpid))
c14d7ab2
PA
1073 {
1074 if (debug_threads)
87ce2a04 1075 debug_printf ("Attached to a stopped process\n");
c14d7ab2
PA
1076
1077 /* The process is definitely stopped. It is in a job control
1078 stop, unless the kernel predates the TASK_STOPPED /
1079 TASK_TRACED distinction, in which case it might be in a
1080 ptrace stop. Make sure it is in a ptrace stop; from there we
1081 can kill it, signal it, et cetera.
1082
1083 First make sure there is a pending SIGSTOP. Since we are
1084 already attached, the process can not transition from stopped
1085 to running without a PTRACE_CONT; so we know this signal will
1086 go into the queue. The SIGSTOP generated by PTRACE_ATTACH is
1087 probably already in the queue (unless this kernel is old
1088 enough to use TASK_STOPPED for ptrace stops); but since
1089 SIGSTOP is not an RT signal, it can only be queued once. */
1090 kill_lwp (lwpid, SIGSTOP);
1091
1092 /* Finally, resume the stopped process. This will deliver the
1093 SIGSTOP (or a higher priority signal, just like normal
1094 PTRACE_ATTACH), which we'll catch later on. */
b8e1b30e 1095 ptrace (PTRACE_CONT, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
c14d7ab2
PA
1096 }
1097
0d62e5e8 1098 /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
0e21c1ec
DE
1099 brings it to a halt.
1100
1101 There are several cases to consider here:
1102
1103 1) gdbserver has already attached to the process and is being notified
1b3f6016 1104 of a new thread that is being created.
d50171e4
PA
1105 In this case we should ignore that SIGSTOP and resume the
1106 process. This is handled below by setting stop_expected = 1,
8336d594 1107 and the fact that add_thread sets last_resume_kind ==
d50171e4 1108 resume_continue.
0e21c1ec
DE
1109
1110 2) This is the first thread (the process thread), and we're attaching
1b3f6016
PA
1111 to it via attach_inferior.
1112 In this case we want the process thread to stop.
d50171e4
PA
1113 This is handled by having linux_attach set last_resume_kind ==
1114 resume_stop after we return.
e3deef73
LM
1115
1116 If the pid we are attaching to is also the tgid, we attach to and
1117 stop all the existing threads. Otherwise, we attach to pid and
1118 ignore any other threads in the same group as this pid.
0e21c1ec
DE
1119
1120 3) GDB is connecting to gdbserver and is requesting an enumeration of all
1b3f6016
PA
1121 existing threads.
1122 In this case we want the thread to stop.
1123 FIXME: This case is currently not properly handled.
1124 We should wait for the SIGSTOP but don't. Things work apparently
1125 because enough time passes between when we ptrace (ATTACH) and when
1126 gdb makes the next ptrace call on the thread.
0d62e5e8
DJ
1127
1128 On the other hand, if we are currently trying to stop all threads, we
1129 should treat the new thread as if we had sent it a SIGSTOP. This works
54a0b537 1130 because we are guaranteed that the add_lwp call above added us to the
0e21c1ec
DE
1131 end of the list, and so the new thread has not yet reached
1132 wait_for_sigstop (but will). */
d50171e4 1133 new_lwp->stop_expected = 1;
0d62e5e8 1134
7ae1a6a6 1135 return 0;
95954743
PA
1136}
1137
8784d563
PA
1138/* Callback for linux_proc_attach_tgid_threads. Attach to PTID if not
1139 already attached. Returns true if a new LWP is found, false
1140 otherwise. */
1141
1142static int
1143attach_proc_task_lwp_callback (ptid_t ptid)
1144{
1145 /* Is this a new thread? */
1146 if (find_thread_ptid (ptid) == NULL)
1147 {
e38504b3 1148 int lwpid = ptid.lwp ();
8784d563
PA
1149 int err;
1150
1151 if (debug_threads)
1152 debug_printf ("Found new lwp %d\n", lwpid);
1153
1154 err = linux_attach_lwp (ptid);
1155
1156 /* Be quiet if we simply raced with the thread exiting. EPERM
1157 is returned if the thread's task still exists, and is marked
1158 as exited or zombie, as well as other conditions, so in that
1159 case, confirm the status in /proc/PID/status. */
1160 if (err == ESRCH
1161 || (err == EPERM && linux_proc_pid_is_gone (lwpid)))
1162 {
1163 if (debug_threads)
1164 {
1165 debug_printf ("Cannot attach to lwp %d: "
1166 "thread is gone (%d: %s)\n",
6d91ce9a 1167 lwpid, err, safe_strerror (err));
8784d563
PA
1168 }
1169 }
1170 else if (err != 0)
1171 {
4d9b86e1 1172 std::string reason
50fa3001 1173 = linux_ptrace_attach_fail_reason_string (ptid, err);
4d9b86e1
SM
1174
1175 warning (_("Cannot attach to lwp %d: %s"), lwpid, reason.c_str ());
8784d563
PA
1176 }
1177
1178 return 1;
1179 }
1180 return 0;
1181}
1182
500c1d85
PA
1183static void async_file_mark (void);
1184
e3deef73
LM
1185/* Attach to PID. If PID is the tgid, attach to it and all
1186 of its threads. */
1187
ef03dad8
TBA
1188int
1189linux_process_target::attach (unsigned long pid)
0d62e5e8 1190{
500c1d85
PA
1191 struct process_info *proc;
1192 struct thread_info *initial_thread;
fd79271b 1193 ptid_t ptid = ptid_t (pid, pid, 0);
7ae1a6a6
PA
1194 int err;
1195
df0da8a2
AH
1196 proc = linux_add_process (pid, 1);
1197
e3deef73
LM
1198 /* Attach to PID. We will check for other threads
1199 soon. */
7ae1a6a6
PA
1200 err = linux_attach_lwp (ptid);
1201 if (err != 0)
4d9b86e1 1202 {
df0da8a2 1203 remove_process (proc);
4d9b86e1 1204
50fa3001
SDJ
1205 std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err);
1206 error ("Cannot attach to process %ld: %s", pid, reason.c_str ());
4d9b86e1 1207 }
7ae1a6a6 1208
500c1d85
PA
1209 /* Don't ignore the initial SIGSTOP if we just attached to this
1210 process. It will be collected by wait shortly. */
fd79271b 1211 initial_thread = find_thread_ptid (ptid_t (pid, pid, 0));
500c1d85 1212 initial_thread->last_resume_kind = resume_stop;
0d62e5e8 1213
8784d563
PA
1214 /* We must attach to every LWP. If /proc is mounted, use that to
1215 find them now. On the one hand, the inferior may be using raw
1216 clone instead of using pthreads. On the other hand, even if it
1217 is using pthreads, GDB may not be connected yet (thread_db needs
1218 to do symbol lookups, through qSymbol). Also, thread_db walks
1219 structures in the inferior's address space to find the list of
1220 threads/LWPs, and those structures may well be corrupted. Note
1221 that once thread_db is loaded, we'll still use it to list threads
1222 and associate pthread info with each LWP. */
1223 linux_proc_attach_tgid_threads (pid, attach_proc_task_lwp_callback);
500c1d85
PA
1224
1225 /* GDB will shortly read the xml target description for this
1226 process, to figure out the process' architecture. But the target
1227 description is only filled in when the first process/thread in
1228 the thread group reports its initial PTRACE_ATTACH SIGSTOP. Do
1229 that now, otherwise, if GDB is fast enough, it could read the
1230 target description _before_ that initial stop. */
1231 if (non_stop)
1232 {
1233 struct lwp_info *lwp;
1234 int wstat, lwpid;
f2907e49 1235 ptid_t pid_ptid = ptid_t (pid);
500c1d85
PA
1236
1237 lwpid = linux_wait_for_event_filtered (pid_ptid, pid_ptid,
1238 &wstat, __WALL);
1239 gdb_assert (lwpid > 0);
1240
f2907e49 1241 lwp = find_lwp_pid (ptid_t (lwpid));
500c1d85
PA
1242
1243 if (!WIFSTOPPED (wstat) || WSTOPSIG (wstat) != SIGSTOP)
1244 {
1245 lwp->status_pending_p = 1;
1246 lwp->status_pending = wstat;
1247 }
1248
1249 initial_thread->last_resume_kind = resume_continue;
1250
1251 async_file_mark ();
1252
1253 gdb_assert (proc->tdesc != NULL);
1254 }
1255
95954743
PA
1256 return 0;
1257}
1258
95954743 1259static int
e4eb0dec 1260last_thread_of_process_p (int pid)
95954743 1261{
e4eb0dec 1262 bool seen_one = false;
95954743 1263
da4ae14a 1264 thread_info *thread = find_thread (pid, [&] (thread_info *thr_arg)
95954743 1265 {
e4eb0dec
SM
1266 if (!seen_one)
1267 {
1268 /* This is the first thread of this process we see. */
1269 seen_one = true;
1270 return false;
1271 }
1272 else
1273 {
1274 /* This is the second thread of this process we see. */
1275 return true;
1276 }
1277 });
da6d8c04 1278
e4eb0dec 1279 return thread == NULL;
95954743
PA
1280}
1281
da84f473
PA
1282/* Kill LWP. */
1283
1284static void
1285linux_kill_one_lwp (struct lwp_info *lwp)
1286{
d86d4aaf
DE
1287 struct thread_info *thr = get_lwp_thread (lwp);
1288 int pid = lwpid_of (thr);
da84f473
PA
1289
1290 /* PTRACE_KILL is unreliable. After stepping into a signal handler,
1291 there is no signal context, and ptrace(PTRACE_KILL) (or
1292 ptrace(PTRACE_CONT, SIGKILL), pretty much the same) acts like
1293 ptrace(CONT, pid, 0,0) and just resumes the tracee. A better
1294 alternative is to kill with SIGKILL. We only need one SIGKILL
1295 per process, not one for each thread. But since we still support
4a6ed09b
PA
1296 support debugging programs using raw clone without CLONE_THREAD,
1297 we send one for each thread. For years, we used PTRACE_KILL
1298 only, so we're being a bit paranoid about some old kernels where
1299 PTRACE_KILL might work better (dubious if there are any such, but
1300 that's why it's paranoia), so we try SIGKILL first, PTRACE_KILL
1301 second, and so we're fine everywhere. */
da84f473
PA
1302
1303 errno = 0;
69ff6be5 1304 kill_lwp (pid, SIGKILL);
da84f473 1305 if (debug_threads)
ce9e3fe7
PA
1306 {
1307 int save_errno = errno;
1308
1309 debug_printf ("LKL: kill_lwp (SIGKILL) %s, 0, 0 (%s)\n",
1310 target_pid_to_str (ptid_of (thr)),
6d91ce9a 1311 save_errno ? safe_strerror (save_errno) : "OK");
ce9e3fe7 1312 }
da84f473
PA
1313
1314 errno = 0;
b8e1b30e 1315 ptrace (PTRACE_KILL, pid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
da84f473 1316 if (debug_threads)
ce9e3fe7
PA
1317 {
1318 int save_errno = errno;
1319
1320 debug_printf ("LKL: PTRACE_KILL %s, 0, 0 (%s)\n",
1321 target_pid_to_str (ptid_of (thr)),
6d91ce9a 1322 save_errno ? safe_strerror (save_errno) : "OK");
ce9e3fe7 1323 }
da84f473
PA
1324}
1325
e76126e8
PA
1326/* Kill LWP and wait for it to die. */
1327
1328static void
1329kill_wait_lwp (struct lwp_info *lwp)
1330{
1331 struct thread_info *thr = get_lwp_thread (lwp);
e99b03dc 1332 int pid = ptid_of (thr).pid ();
e38504b3 1333 int lwpid = ptid_of (thr).lwp ();
e76126e8
PA
1334 int wstat;
1335 int res;
1336
1337 if (debug_threads)
1338 debug_printf ("kwl: killing lwp %d, for pid: %d\n", lwpid, pid);
1339
1340 do
1341 {
1342 linux_kill_one_lwp (lwp);
1343
1344 /* Make sure it died. Notes:
1345
1346 - The loop is most likely unnecessary.
1347
1348 - We don't use linux_wait_for_event as that could delete lwps
1349 while we're iterating over them. We're not interested in
1350 any pending status at this point, only in making sure all
1351 wait status on the kernel side are collected until the
1352 process is reaped.
1353
1354 - We don't use __WALL here as the __WALL emulation relies on
1355 SIGCHLD, and killing a stopped process doesn't generate
1356 one, nor an exit status.
1357 */
1358 res = my_waitpid (lwpid, &wstat, 0);
1359 if (res == -1 && errno == ECHILD)
1360 res = my_waitpid (lwpid, &wstat, __WCLONE);
1361 } while (res > 0 && WIFSTOPPED (wstat));
1362
586b02a9
PA
1363 /* Even if it was stopped, the child may have already disappeared.
1364 E.g., if it was killed by SIGKILL. */
1365 if (res < 0 && errno != ECHILD)
1366 perror_with_name ("kill_wait_lwp");
e76126e8
PA
1367}
1368
578290ec 1369/* Callback for `for_each_thread'. Kills an lwp of a given process,
da84f473 1370 except the leader. */
95954743 1371
578290ec
SM
1372static void
1373kill_one_lwp_callback (thread_info *thread, int pid)
da6d8c04 1374{
54a0b537 1375 struct lwp_info *lwp = get_thread_lwp (thread);
0d62e5e8 1376
fd500816
DJ
1377 /* We avoid killing the first thread here, because of a Linux kernel (at
1378 least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
1379 the children get a chance to be reaped, it will remain a zombie
1380 forever. */
95954743 1381
d86d4aaf 1382 if (lwpid_of (thread) == pid)
95954743
PA
1383 {
1384 if (debug_threads)
87ce2a04 1385 debug_printf ("lkop: is last of process %s\n",
9c80ecd6 1386 target_pid_to_str (thread->id));
578290ec 1387 return;
95954743 1388 }
fd500816 1389
e76126e8 1390 kill_wait_lwp (lwp);
da6d8c04
DJ
1391}
1392
c6885a57
TBA
1393int
1394linux_process_target::kill (process_info *process)
0d62e5e8 1395{
a780ef4f 1396 int pid = process->pid;
9d606399 1397
f9e39928
PA
1398 /* If we're killing a running inferior, make sure it is stopped
1399 first, as PTRACE_KILL will not work otherwise. */
7984d532 1400 stop_all_lwps (0, NULL);
f9e39928 1401
578290ec
SM
1402 for_each_thread (pid, [&] (thread_info *thread)
1403 {
1404 kill_one_lwp_callback (thread, pid);
1405 });
fd500816 1406
54a0b537 1407 /* See the comment in linux_kill_one_lwp. We did not kill the first
fd500816 1408 thread in the list, so do so now. */
a780ef4f 1409 lwp_info *lwp = find_lwp_pid (ptid_t (pid));
bd99dc85 1410
784867a5 1411 if (lwp == NULL)
fd500816 1412 {
784867a5 1413 if (debug_threads)
d86d4aaf
DE
1414 debug_printf ("lk_1: cannot find lwp for pid: %d\n",
1415 pid);
784867a5
JK
1416 }
1417 else
e76126e8 1418 kill_wait_lwp (lwp);
2d717e4f 1419
8adb37b9 1420 mourn (process);
f9e39928
PA
1421
1422 /* Since we presently can only stop all lwps of all processes, we
1423 need to unstop lwps of other processes. */
7984d532 1424 unstop_all_lwps (0, NULL);
95954743 1425 return 0;
0d62e5e8
DJ
1426}
1427
9b224c5e
PA
1428/* Get pending signal of THREAD, for detaching purposes. This is the
1429 signal the thread last stopped for, which we need to deliver to the
1430 thread when detaching, otherwise, it'd be suppressed/lost. */
1431
1432static int
1433get_detach_signal (struct thread_info *thread)
1434{
c12a5089 1435 client_state &cs = get_client_state ();
a493e3e2 1436 enum gdb_signal signo = GDB_SIGNAL_0;
9b224c5e
PA
1437 int status;
1438 struct lwp_info *lp = get_thread_lwp (thread);
1439
1440 if (lp->status_pending_p)
1441 status = lp->status_pending;
1442 else
1443 {
1444 /* If the thread had been suspended by gdbserver, and it stopped
1445 cleanly, then it'll have stopped with SIGSTOP. But we don't
1446 want to deliver that SIGSTOP. */
1447 if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
a493e3e2 1448 || thread->last_status.value.sig == GDB_SIGNAL_0)
9b224c5e
PA
1449 return 0;
1450
1451 /* Otherwise, we may need to deliver the signal we
1452 intercepted. */
1453 status = lp->last_status;
1454 }
1455
1456 if (!WIFSTOPPED (status))
1457 {
1458 if (debug_threads)
87ce2a04 1459 debug_printf ("GPS: lwp %s hasn't stopped: no pending signal\n",
d86d4aaf 1460 target_pid_to_str (ptid_of (thread)));
9b224c5e
PA
1461 return 0;
1462 }
1463
1464 /* Extended wait statuses aren't real SIGTRAPs. */
89a5711c 1465 if (WSTOPSIG (status) == SIGTRAP && linux_is_extended_waitstatus (status))
9b224c5e
PA
1466 {
1467 if (debug_threads)
87ce2a04
DE
1468 debug_printf ("GPS: lwp %s had stopped with extended "
1469 "status: no pending signal\n",
d86d4aaf 1470 target_pid_to_str (ptid_of (thread)));
9b224c5e
PA
1471 return 0;
1472 }
1473
2ea28649 1474 signo = gdb_signal_from_host (WSTOPSIG (status));
9b224c5e 1475
c12a5089 1476 if (cs.program_signals_p && !cs.program_signals[signo])
9b224c5e
PA
1477 {
1478 if (debug_threads)
87ce2a04 1479 debug_printf ("GPS: lwp %s had signal %s, but it is in nopass state\n",
d86d4aaf 1480 target_pid_to_str (ptid_of (thread)),
87ce2a04 1481 gdb_signal_to_string (signo));
9b224c5e
PA
1482 return 0;
1483 }
c12a5089 1484 else if (!cs.program_signals_p
9b224c5e
PA
1485 /* If we have no way to know which signals GDB does not
1486 want to have passed to the program, assume
1487 SIGTRAP/SIGINT, which is GDB's default. */
a493e3e2 1488 && (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT))
9b224c5e
PA
1489 {
1490 if (debug_threads)
87ce2a04
DE
1491 debug_printf ("GPS: lwp %s had signal %s, "
1492 "but we don't know if we should pass it. "
1493 "Default to not.\n",
d86d4aaf 1494 target_pid_to_str (ptid_of (thread)),
87ce2a04 1495 gdb_signal_to_string (signo));
9b224c5e
PA
1496 return 0;
1497 }
1498 else
1499 {
1500 if (debug_threads)
87ce2a04 1501 debug_printf ("GPS: lwp %s has pending signal %s: delivering it.\n",
d86d4aaf 1502 target_pid_to_str (ptid_of (thread)),
87ce2a04 1503 gdb_signal_to_string (signo));
9b224c5e
PA
1504
1505 return WSTOPSIG (status);
1506 }
1507}
1508
ced2dffb
PA
1509/* Detach from LWP. */
1510
1511static void
1512linux_detach_one_lwp (struct lwp_info *lwp)
6ad8ae5c 1513{
ced2dffb 1514 struct thread_info *thread = get_lwp_thread (lwp);
9b224c5e 1515 int sig;
ced2dffb 1516 int lwpid;
6ad8ae5c 1517
9b224c5e 1518 /* If there is a pending SIGSTOP, get rid of it. */
54a0b537 1519 if (lwp->stop_expected)
ae13219e 1520 {
9b224c5e 1521 if (debug_threads)
87ce2a04 1522 debug_printf ("Sending SIGCONT to %s\n",
d86d4aaf 1523 target_pid_to_str (ptid_of (thread)));
9b224c5e 1524
d86d4aaf 1525 kill_lwp (lwpid_of (thread), SIGCONT);
54a0b537 1526 lwp->stop_expected = 0;
ae13219e
DJ
1527 }
1528
9b224c5e
PA
1529 /* Pass on any pending signal for this thread. */
1530 sig = get_detach_signal (thread);
1531
ced2dffb
PA
1532 /* Preparing to resume may try to write registers, and fail if the
1533 lwp is zombie. If that happens, ignore the error. We'll handle
1534 it below, when detach fails with ESRCH. */
a70b8144 1535 try
ced2dffb
PA
1536 {
1537 /* Flush any pending changes to the process's registers. */
1538 regcache_invalidate_thread (thread);
1539
1540 /* Finally, let it resume. */
1541 if (the_low_target.prepare_to_resume != NULL)
1542 the_low_target.prepare_to_resume (lwp);
1543 }
230d2906 1544 catch (const gdb_exception_error &ex)
ced2dffb
PA
1545 {
1546 if (!check_ptrace_stopped_lwp_gone (lwp))
eedc3f4f 1547 throw;
ced2dffb 1548 }
ced2dffb
PA
1549
1550 lwpid = lwpid_of (thread);
1551 if (ptrace (PTRACE_DETACH, lwpid, (PTRACE_TYPE_ARG3) 0,
b8e1b30e 1552 (PTRACE_TYPE_ARG4) (long) sig) < 0)
ced2dffb
PA
1553 {
1554 int save_errno = errno;
1555
1556 /* We know the thread exists, so ESRCH must mean the lwp is
1557 zombie. This can happen if one of the already-detached
1558 threads exits the whole thread group. In that case we're
1559 still attached, and must reap the lwp. */
1560 if (save_errno == ESRCH)
1561 {
1562 int ret, status;
1563
1564 ret = my_waitpid (lwpid, &status, __WALL);
1565 if (ret == -1)
1566 {
1567 warning (_("Couldn't reap LWP %d while detaching: %s"),
6d91ce9a 1568 lwpid, safe_strerror (errno));
ced2dffb
PA
1569 }
1570 else if (!WIFEXITED (status) && !WIFSIGNALED (status))
1571 {
1572 warning (_("Reaping LWP %d while detaching "
1573 "returned unexpected status 0x%x"),
1574 lwpid, status);
1575 }
1576 }
1577 else
1578 {
1579 error (_("Can't detach %s: %s"),
1580 target_pid_to_str (ptid_of (thread)),
6d91ce9a 1581 safe_strerror (save_errno));
ced2dffb
PA
1582 }
1583 }
1584 else if (debug_threads)
1585 {
1586 debug_printf ("PTRACE_DETACH (%s, %s, 0) (OK)\n",
1587 target_pid_to_str (ptid_of (thread)),
1588 strsignal (sig));
1589 }
bd99dc85
PA
1590
1591 delete_lwp (lwp);
ced2dffb
PA
1592}
1593
798a38e8 1594/* Callback for for_each_thread. Detaches from non-leader threads of a
ced2dffb
PA
1595 given process. */
1596
798a38e8
SM
1597static void
1598linux_detach_lwp_callback (thread_info *thread)
ced2dffb 1599{
ced2dffb
PA
1600 /* We don't actually detach from the thread group leader just yet.
1601 If the thread group exits, we must reap the zombie clone lwps
1602 before we're able to reap the leader. */
798a38e8
SM
1603 if (thread->id.pid () == thread->id.lwp ())
1604 return;
ced2dffb 1605
798a38e8 1606 lwp_info *lwp = get_thread_lwp (thread);
ced2dffb 1607 linux_detach_one_lwp (lwp);
6ad8ae5c
DJ
1608}
1609
9061c9cf
TBA
1610int
1611linux_process_target::detach (process_info *process)
95954743 1612{
ced2dffb 1613 struct lwp_info *main_lwp;
95954743 1614
863d01bd
PA
1615 /* As there's a step over already in progress, let it finish first,
1616 otherwise nesting a stabilize_threads operation on top gets real
1617 messy. */
1618 complete_ongoing_step_over ();
1619
f9e39928 1620 /* Stop all threads before detaching. First, ptrace requires that
30baf67b 1621 the thread is stopped to successfully detach. Second, thread_db
f9e39928
PA
1622 may need to uninstall thread event breakpoints from memory, which
1623 only works with a stopped process anyway. */
7984d532 1624 stop_all_lwps (0, NULL);
f9e39928 1625
ca5c370d 1626#ifdef USE_THREAD_DB
8336d594 1627 thread_db_detach (process);
ca5c370d
PA
1628#endif
1629
fa593d66 1630 /* Stabilize threads (move out of jump pads). */
5c9eb2f2 1631 target_stabilize_threads ();
fa593d66 1632
ced2dffb
PA
1633 /* Detach from the clone lwps first. If the thread group exits just
1634 while we're detaching, we must reap the clone lwps before we're
1635 able to reap the leader. */
ef2ddb33 1636 for_each_thread (process->pid, linux_detach_lwp_callback);
ced2dffb 1637
ef2ddb33 1638 main_lwp = find_lwp_pid (ptid_t (process->pid));
ced2dffb 1639 linux_detach_one_lwp (main_lwp);
8336d594 1640
8adb37b9 1641 mourn (process);
f9e39928
PA
1642
1643 /* Since we presently can only stop all lwps of all processes, we
1644 need to unstop lwps of other processes. */
7984d532 1645 unstop_all_lwps (0, NULL);
f9e39928
PA
1646 return 0;
1647}
1648
1649/* Remove all LWPs that belong to process PROC from the lwp list. */
1650
8adb37b9
TBA
1651void
1652linux_process_target::mourn (process_info *process)
8336d594
PA
1653{
1654 struct process_info_private *priv;
1655
1656#ifdef USE_THREAD_DB
1657 thread_db_mourn (process);
1658#endif
1659
6b2a85da
SM
1660 for_each_thread (process->pid, [] (thread_info *thread)
1661 {
1662 delete_lwp (get_thread_lwp (thread));
1663 });
f9e39928 1664
8336d594 1665 /* Freeing all private data. */
fe978cb0 1666 priv = process->priv;
04ec7890
SM
1667 if (the_low_target.delete_process != NULL)
1668 the_low_target.delete_process (priv->arch_private);
1669 else
1670 gdb_assert (priv->arch_private == NULL);
8336d594 1671 free (priv);
fe978cb0 1672 process->priv = NULL;
505106cd
PA
1673
1674 remove_process (process);
8336d594
PA
1675}
1676
95a49a39
TBA
1677void
1678linux_process_target::join (int pid)
444d6139 1679{
444d6139
PA
1680 int status, ret;
1681
1682 do {
d105de22 1683 ret = my_waitpid (pid, &status, 0);
444d6139
PA
1684 if (WIFEXITED (status) || WIFSIGNALED (status))
1685 break;
1686 } while (ret != -1 || errno != ECHILD);
1687}
1688
13d3d99b
TBA
1689/* Return true if the given thread is still alive. */
1690
1691bool
1692linux_process_target::thread_alive (ptid_t ptid)
0d62e5e8 1693{
95954743
PA
1694 struct lwp_info *lwp = find_lwp_pid (ptid);
1695
1696 /* We assume we always know if a thread exits. If a whole process
1697 exited but we still haven't been able to report it to GDB, we'll
1698 hold on to the last lwp of the dead process. */
1699 if (lwp != NULL)
00db26fa 1700 return !lwp_is_marked_dead (lwp);
0d62e5e8
DJ
1701 else
1702 return 0;
1703}
1704
582511be
PA
1705/* Return 1 if this lwp still has an interesting status pending. If
1706 not (e.g., it had stopped for a breakpoint that is gone), return
1707 false. */
1708
1709static int
1710thread_still_has_status_pending_p (struct thread_info *thread)
1711{
1712 struct lwp_info *lp = get_thread_lwp (thread);
1713
1714 if (!lp->status_pending_p)
1715 return 0;
1716
582511be 1717 if (thread->last_resume_kind != resume_stop
15c66dd6
PA
1718 && (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
1719 || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT))
582511be
PA
1720 {
1721 struct thread_info *saved_thread;
1722 CORE_ADDR pc;
1723 int discard = 0;
1724
1725 gdb_assert (lp->last_status != 0);
1726
1727 pc = get_pc (lp);
1728
1729 saved_thread = current_thread;
1730 current_thread = thread;
1731
1732 if (pc != lp->stop_pc)
1733 {
1734 if (debug_threads)
1735 debug_printf ("PC of %ld changed\n",
1736 lwpid_of (thread));
1737 discard = 1;
1738 }
3e572f71
PA
1739
1740#if !USE_SIGTRAP_SIGINFO
15c66dd6 1741 else if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
582511be
PA
1742 && !(*the_low_target.breakpoint_at) (pc))
1743 {
1744 if (debug_threads)
1745 debug_printf ("previous SW breakpoint of %ld gone\n",
1746 lwpid_of (thread));
1747 discard = 1;
1748 }
15c66dd6 1749 else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT
582511be
PA
1750 && !hardware_breakpoint_inserted_here (pc))
1751 {
1752 if (debug_threads)
1753 debug_printf ("previous HW breakpoint of %ld gone\n",
1754 lwpid_of (thread));
1755 discard = 1;
1756 }
3e572f71 1757#endif
582511be
PA
1758
1759 current_thread = saved_thread;
1760
1761 if (discard)
1762 {
1763 if (debug_threads)
1764 debug_printf ("discarding pending breakpoint status\n");
1765 lp->status_pending_p = 0;
1766 return 0;
1767 }
1768 }
1769
1770 return 1;
1771}
1772
a681f9c9
PA
1773/* Returns true if LWP is resumed from the client's perspective. */
1774
1775static int
1776lwp_resumed (struct lwp_info *lwp)
1777{
1778 struct thread_info *thread = get_lwp_thread (lwp);
1779
1780 if (thread->last_resume_kind != resume_stop)
1781 return 1;
1782
1783 /* Did gdb send us a `vCont;t', but we haven't reported the
1784 corresponding stop to gdb yet? If so, the thread is still
1785 resumed/running from gdb's perspective. */
1786 if (thread->last_resume_kind == resume_stop
1787 && thread->last_status.kind == TARGET_WAITKIND_IGNORE)
1788 return 1;
1789
1790 return 0;
1791}
1792
83e1b6c1
SM
1793/* Return true if this lwp has an interesting status pending. */
1794static bool
1795status_pending_p_callback (thread_info *thread, ptid_t ptid)
0d62e5e8 1796{
582511be 1797 struct lwp_info *lp = get_thread_lwp (thread);
95954743
PA
1798
1799 /* Check if we're only interested in events from a specific process
afa8d396 1800 or a specific LWP. */
83e1b6c1 1801 if (!thread->id.matches (ptid))
95954743 1802 return 0;
0d62e5e8 1803
a681f9c9
PA
1804 if (!lwp_resumed (lp))
1805 return 0;
1806
582511be
PA
1807 if (lp->status_pending_p
1808 && !thread_still_has_status_pending_p (thread))
1809 {
1810 linux_resume_one_lwp (lp, lp->stepping, GDB_SIGNAL_0, NULL);
1811 return 0;
1812 }
0d62e5e8 1813
582511be 1814 return lp->status_pending_p;
0d62e5e8
DJ
1815}
1816
95954743
PA
1817struct lwp_info *
1818find_lwp_pid (ptid_t ptid)
1819{
da4ae14a 1820 thread_info *thread = find_thread ([&] (thread_info *thr_arg)
454296a2
SM
1821 {
1822 int lwp = ptid.lwp () != 0 ? ptid.lwp () : ptid.pid ();
da4ae14a 1823 return thr_arg->id.lwp () == lwp;
454296a2 1824 });
d86d4aaf
DE
1825
1826 if (thread == NULL)
1827 return NULL;
1828
9c80ecd6 1829 return get_thread_lwp (thread);
95954743
PA
1830}
1831
fa96cb38 1832/* Return the number of known LWPs in the tgid given by PID. */
0d62e5e8 1833
fa96cb38
PA
1834static int
1835num_lwps (int pid)
1836{
fa96cb38 1837 int count = 0;
0d62e5e8 1838
4d3bb80e
SM
1839 for_each_thread (pid, [&] (thread_info *thread)
1840 {
9c80ecd6 1841 count++;
4d3bb80e 1842 });
3aee8918 1843
fa96cb38
PA
1844 return count;
1845}
d61ddec4 1846
6d4ee8c6
GB
1847/* See nat/linux-nat.h. */
1848
1849struct lwp_info *
1850iterate_over_lwps (ptid_t filter,
d3a70e03 1851 gdb::function_view<iterate_over_lwps_ftype> callback)
6d4ee8c6 1852{
da4ae14a 1853 thread_info *thread = find_thread (filter, [&] (thread_info *thr_arg)
6d1e5673 1854 {
da4ae14a 1855 lwp_info *lwp = get_thread_lwp (thr_arg);
6d1e5673 1856
d3a70e03 1857 return callback (lwp);
6d1e5673 1858 });
6d4ee8c6 1859
9c80ecd6 1860 if (thread == NULL)
6d4ee8c6
GB
1861 return NULL;
1862
9c80ecd6 1863 return get_thread_lwp (thread);
6d4ee8c6
GB
1864}
1865
fa96cb38
PA
1866/* Detect zombie thread group leaders, and "exit" them. We can't reap
1867 their exits until all other threads in the group have exited. */
c3adc08c 1868
fa96cb38
PA
1869static void
1870check_zombie_leaders (void)
1871{
9179355e
SM
1872 for_each_process ([] (process_info *proc) {
1873 pid_t leader_pid = pid_of (proc);
1874 struct lwp_info *leader_lp;
1875
f2907e49 1876 leader_lp = find_lwp_pid (ptid_t (leader_pid));
9179355e
SM
1877
1878 if (debug_threads)
1879 debug_printf ("leader_pid=%d, leader_lp!=NULL=%d, "
1880 "num_lwps=%d, zombie=%d\n",
1881 leader_pid, leader_lp!= NULL, num_lwps (leader_pid),
1882 linux_proc_pid_is_zombie (leader_pid));
1883
1884 if (leader_lp != NULL && !leader_lp->stopped
1885 /* Check if there are other threads in the group, as we may
1886 have raced with the inferior simply exiting. */
1887 && !last_thread_of_process_p (leader_pid)
1888 && linux_proc_pid_is_zombie (leader_pid))
1889 {
1890 /* A leader zombie can mean one of two things:
1891
1892 - It exited, and there's an exit status pending
1893 available, or only the leader exited (not the whole
1894 program). In the latter case, we can't waitpid the
1895 leader's exit status until all other threads are gone.
1896
1897 - There are 3 or more threads in the group, and a thread
1898 other than the leader exec'd. On an exec, the Linux
1899 kernel destroys all other threads (except the execing
1900 one) in the thread group, and resets the execing thread's
1901 tid to the tgid. No exit notification is sent for the
1902 execing thread -- from the ptracer's perspective, it
1903 appears as though the execing thread just vanishes.
1904 Until we reap all other threads except the leader and the
1905 execing thread, the leader will be zombie, and the
1906 execing thread will be in `D (disc sleep)'. As soon as
1907 all other threads are reaped, the execing thread changes
1908 it's tid to the tgid, and the previous (zombie) leader
1909 vanishes, giving place to the "new" leader. We could try
1910 distinguishing the exit and exec cases, by waiting once
1911 more, and seeing if something comes out, but it doesn't
1912 sound useful. The previous leader _does_ go away, and
1913 we'll re-add the new one once we see the exec event
1914 (which is just the same as what would happen if the
1915 previous leader did exit voluntarily before some other
1916 thread execs). */
1917
1918 if (debug_threads)
1919 debug_printf ("CZL: Thread group leader %d zombie "
1920 "(it exited, or another thread execd).\n",
1921 leader_pid);
1922
1923 delete_lwp (leader_lp);
1924 }
1925 });
fa96cb38 1926}
c3adc08c 1927
a1385b7b
SM
1928/* Callback for `find_thread'. Returns the first LWP that is not
1929 stopped. */
d50171e4 1930
a1385b7b
SM
1931static bool
1932not_stopped_callback (thread_info *thread, ptid_t filter)
fa96cb38 1933{
a1385b7b
SM
1934 if (!thread->id.matches (filter))
1935 return false;
47c0c975 1936
a1385b7b 1937 lwp_info *lwp = get_thread_lwp (thread);
fa96cb38 1938
a1385b7b 1939 return !lwp->stopped;
0d62e5e8 1940}
611cb4a5 1941
863d01bd
PA
1942/* Increment LWP's suspend count. */
1943
1944static void
1945lwp_suspended_inc (struct lwp_info *lwp)
1946{
1947 lwp->suspended++;
1948
1949 if (debug_threads && lwp->suspended > 4)
1950 {
1951 struct thread_info *thread = get_lwp_thread (lwp);
1952
1953 debug_printf ("LWP %ld has a suspiciously high suspend count,"
1954 " suspended=%d\n", lwpid_of (thread), lwp->suspended);
1955 }
1956}
1957
1958/* Decrement LWP's suspend count. */
1959
1960static void
1961lwp_suspended_decr (struct lwp_info *lwp)
1962{
1963 lwp->suspended--;
1964
1965 if (lwp->suspended < 0)
1966 {
1967 struct thread_info *thread = get_lwp_thread (lwp);
1968
1969 internal_error (__FILE__, __LINE__,
1970 "unsuspend LWP %ld, suspended=%d\n", lwpid_of (thread),
1971 lwp->suspended);
1972 }
1973}
1974
219f2f23
PA
1975/* This function should only be called if the LWP got a SIGTRAP.
1976
1977 Handle any tracepoint steps or hits. Return true if a tracepoint
1978 event was handled, 0 otherwise. */
1979
1980static int
1981handle_tracepoints (struct lwp_info *lwp)
1982{
1983 struct thread_info *tinfo = get_lwp_thread (lwp);
1984 int tpoint_related_event = 0;
1985
582511be
PA
1986 gdb_assert (lwp->suspended == 0);
1987
7984d532
PA
1988 /* If this tracepoint hit causes a tracing stop, we'll immediately
1989 uninsert tracepoints. To do this, we temporarily pause all
1990 threads, unpatch away, and then unpause threads. We need to make
1991 sure the unpausing doesn't resume LWP too. */
863d01bd 1992 lwp_suspended_inc (lwp);
7984d532 1993
219f2f23
PA
1994 /* And we need to be sure that any all-threads-stopping doesn't try
1995 to move threads out of the jump pads, as it could deadlock the
1996 inferior (LWP could be in the jump pad, maybe even holding the
1997 lock.) */
1998
1999 /* Do any necessary step collect actions. */
2000 tpoint_related_event |= tracepoint_finished_step (tinfo, lwp->stop_pc);
2001
fa593d66
PA
2002 tpoint_related_event |= handle_tracepoint_bkpts (tinfo, lwp->stop_pc);
2003
219f2f23
PA
2004 /* See if we just hit a tracepoint and do its main collect
2005 actions. */
2006 tpoint_related_event |= tracepoint_was_hit (tinfo, lwp->stop_pc);
2007
863d01bd 2008 lwp_suspended_decr (lwp);
7984d532
PA
2009
2010 gdb_assert (lwp->suspended == 0);
229d26fc
SM
2011 gdb_assert (!stabilizing_threads
2012 || (lwp->collecting_fast_tracepoint
2013 != fast_tpoint_collect_result::not_collecting));
7984d532 2014
219f2f23
PA
2015 if (tpoint_related_event)
2016 {
2017 if (debug_threads)
87ce2a04 2018 debug_printf ("got a tracepoint event\n");
219f2f23
PA
2019 return 1;
2020 }
2021
2022 return 0;
2023}
2024
229d26fc
SM
2025/* Convenience wrapper. Returns information about LWP's fast tracepoint
2026 collection status. */
fa593d66 2027
229d26fc 2028static fast_tpoint_collect_result
fa593d66
PA
2029linux_fast_tracepoint_collecting (struct lwp_info *lwp,
2030 struct fast_tpoint_collect_status *status)
2031{
2032 CORE_ADDR thread_area;
d86d4aaf 2033 struct thread_info *thread = get_lwp_thread (lwp);
fa593d66
PA
2034
2035 if (the_low_target.get_thread_area == NULL)
229d26fc 2036 return fast_tpoint_collect_result::not_collecting;
fa593d66
PA
2037
2038 /* Get the thread area address. This is used to recognize which
2039 thread is which when tracing with the in-process agent library.
2040 We don't read anything from the address, and treat it as opaque;
2041 it's the address itself that we assume is unique per-thread. */
d86d4aaf 2042 if ((*the_low_target.get_thread_area) (lwpid_of (thread), &thread_area) == -1)
229d26fc 2043 return fast_tpoint_collect_result::not_collecting;
fa593d66
PA
2044
2045 return fast_tracepoint_collecting (thread_area, lwp->stop_pc, status);
2046}
2047
2048/* The reason we resume in the caller, is because we want to be able
2049 to pass lwp->status_pending as WSTAT, and we need to clear
2050 status_pending_p before resuming, otherwise, linux_resume_one_lwp
2051 refuses to resume. */
2052
2053static int
2054maybe_move_out_of_jump_pad (struct lwp_info *lwp, int *wstat)
2055{
0bfdf32f 2056 struct thread_info *saved_thread;
fa593d66 2057
0bfdf32f
GB
2058 saved_thread = current_thread;
2059 current_thread = get_lwp_thread (lwp);
fa593d66
PA
2060
2061 if ((wstat == NULL
2062 || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP))
2063 && supports_fast_tracepoints ()
58b4daa5 2064 && agent_loaded_p ())
fa593d66
PA
2065 {
2066 struct fast_tpoint_collect_status status;
fa593d66
PA
2067
2068 if (debug_threads)
87ce2a04
DE
2069 debug_printf ("Checking whether LWP %ld needs to move out of the "
2070 "jump pad.\n",
0bfdf32f 2071 lwpid_of (current_thread));
fa593d66 2072
229d26fc
SM
2073 fast_tpoint_collect_result r
2074 = linux_fast_tracepoint_collecting (lwp, &status);
fa593d66
PA
2075
2076 if (wstat == NULL
2077 || (WSTOPSIG (*wstat) != SIGILL
2078 && WSTOPSIG (*wstat) != SIGFPE
2079 && WSTOPSIG (*wstat) != SIGSEGV
2080 && WSTOPSIG (*wstat) != SIGBUS))
2081 {
2082 lwp->collecting_fast_tracepoint = r;
2083
229d26fc 2084 if (r != fast_tpoint_collect_result::not_collecting)
fa593d66 2085 {
229d26fc
SM
2086 if (r == fast_tpoint_collect_result::before_insn
2087 && lwp->exit_jump_pad_bkpt == NULL)
fa593d66
PA
2088 {
2089 /* Haven't executed the original instruction yet.
2090 Set breakpoint there, and wait till it's hit,
2091 then single-step until exiting the jump pad. */
2092 lwp->exit_jump_pad_bkpt
2093 = set_breakpoint_at (status.adjusted_insn_addr, NULL);
2094 }
2095
2096 if (debug_threads)
87ce2a04
DE
2097 debug_printf ("Checking whether LWP %ld needs to move out of "
2098 "the jump pad...it does\n",
0bfdf32f
GB
2099 lwpid_of (current_thread));
2100 current_thread = saved_thread;
fa593d66
PA
2101
2102 return 1;
2103 }
2104 }
2105 else
2106 {
2107 /* If we get a synchronous signal while collecting, *and*
2108 while executing the (relocated) original instruction,
2109 reset the PC to point at the tpoint address, before
2110 reporting to GDB. Otherwise, it's an IPA lib bug: just
2111 report the signal to GDB, and pray for the best. */
2112
229d26fc
SM
2113 lwp->collecting_fast_tracepoint
2114 = fast_tpoint_collect_result::not_collecting;
fa593d66 2115
229d26fc 2116 if (r != fast_tpoint_collect_result::not_collecting
fa593d66
PA
2117 && (status.adjusted_insn_addr <= lwp->stop_pc
2118 && lwp->stop_pc < status.adjusted_insn_addr_end))
2119 {
2120 siginfo_t info;
2121 struct regcache *regcache;
2122
2123 /* The si_addr on a few signals references the address
2124 of the faulting instruction. Adjust that as
2125 well. */
2126 if ((WSTOPSIG (*wstat) == SIGILL
2127 || WSTOPSIG (*wstat) == SIGFPE
2128 || WSTOPSIG (*wstat) == SIGBUS
2129 || WSTOPSIG (*wstat) == SIGSEGV)
0bfdf32f 2130 && ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread),
b8e1b30e 2131 (PTRACE_TYPE_ARG3) 0, &info) == 0
fa593d66
PA
2132 /* Final check just to make sure we don't clobber
2133 the siginfo of non-kernel-sent signals. */
2134 && (uintptr_t) info.si_addr == lwp->stop_pc)
2135 {
2136 info.si_addr = (void *) (uintptr_t) status.tpoint_addr;
0bfdf32f 2137 ptrace (PTRACE_SETSIGINFO, lwpid_of (current_thread),
b8e1b30e 2138 (PTRACE_TYPE_ARG3) 0, &info);
fa593d66
PA
2139 }
2140
0bfdf32f 2141 regcache = get_thread_regcache (current_thread, 1);
fa593d66
PA
2142 (*the_low_target.set_pc) (regcache, status.tpoint_addr);
2143 lwp->stop_pc = status.tpoint_addr;
2144
2145 /* Cancel any fast tracepoint lock this thread was
2146 holding. */
2147 force_unlock_trace_buffer ();
2148 }
2149
2150 if (lwp->exit_jump_pad_bkpt != NULL)
2151 {
2152 if (debug_threads)
87ce2a04
DE
2153 debug_printf ("Cancelling fast exit-jump-pad: removing bkpt. "
2154 "stopping all threads momentarily.\n");
fa593d66
PA
2155
2156 stop_all_lwps (1, lwp);
fa593d66
PA
2157
2158 delete_breakpoint (lwp->exit_jump_pad_bkpt);
2159 lwp->exit_jump_pad_bkpt = NULL;
2160
2161 unstop_all_lwps (1, lwp);
2162
2163 gdb_assert (lwp->suspended >= 0);
2164 }
2165 }
2166 }
2167
2168 if (debug_threads)
87ce2a04
DE
2169 debug_printf ("Checking whether LWP %ld needs to move out of the "
2170 "jump pad...no\n",
0bfdf32f 2171 lwpid_of (current_thread));
0cccb683 2172
0bfdf32f 2173 current_thread = saved_thread;
fa593d66
PA
2174 return 0;
2175}
2176
2177/* Enqueue one signal in the "signals to report later when out of the
2178 jump pad" list. */
2179
2180static void
2181enqueue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
2182{
2183 struct pending_signals *p_sig;
d86d4aaf 2184 struct thread_info *thread = get_lwp_thread (lwp);
fa593d66
PA
2185
2186 if (debug_threads)
87ce2a04 2187 debug_printf ("Deferring signal %d for LWP %ld.\n",
d86d4aaf 2188 WSTOPSIG (*wstat), lwpid_of (thread));
fa593d66
PA
2189
2190 if (debug_threads)
2191 {
2192 struct pending_signals *sig;
2193
2194 for (sig = lwp->pending_signals_to_report;
2195 sig != NULL;
2196 sig = sig->prev)
87ce2a04
DE
2197 debug_printf (" Already queued %d\n",
2198 sig->signal);
fa593d66 2199
87ce2a04 2200 debug_printf (" (no more currently queued signals)\n");
fa593d66
PA
2201 }
2202
1a981360
PA
2203 /* Don't enqueue non-RT signals if they are already in the deferred
2204 queue. (SIGSTOP being the easiest signal to see ending up here
2205 twice) */
2206 if (WSTOPSIG (*wstat) < __SIGRTMIN)
2207 {
2208 struct pending_signals *sig;
2209
2210 for (sig = lwp->pending_signals_to_report;
2211 sig != NULL;
2212 sig = sig->prev)
2213 {
2214 if (sig->signal == WSTOPSIG (*wstat))
2215 {
2216 if (debug_threads)
87ce2a04
DE
2217 debug_printf ("Not requeuing already queued non-RT signal %d"
2218 " for LWP %ld\n",
2219 sig->signal,
d86d4aaf 2220 lwpid_of (thread));
1a981360
PA
2221 return;
2222 }
2223 }
2224 }
2225
8d749320 2226 p_sig = XCNEW (struct pending_signals);
fa593d66
PA
2227 p_sig->prev = lwp->pending_signals_to_report;
2228 p_sig->signal = WSTOPSIG (*wstat);
8d749320 2229
d86d4aaf 2230 ptrace (PTRACE_GETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
56f7af9c 2231 &p_sig->info);
fa593d66
PA
2232
2233 lwp->pending_signals_to_report = p_sig;
2234}
2235
2236/* Dequeue one signal from the "signals to report later when out of
2237 the jump pad" list. */
2238
2239static int
2240dequeue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
2241{
d86d4aaf
DE
2242 struct thread_info *thread = get_lwp_thread (lwp);
2243
fa593d66
PA
2244 if (lwp->pending_signals_to_report != NULL)
2245 {
2246 struct pending_signals **p_sig;
2247
2248 p_sig = &lwp->pending_signals_to_report;
2249 while ((*p_sig)->prev != NULL)
2250 p_sig = &(*p_sig)->prev;
2251
2252 *wstat = W_STOPCODE ((*p_sig)->signal);
2253 if ((*p_sig)->info.si_signo != 0)
d86d4aaf 2254 ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
56f7af9c 2255 &(*p_sig)->info);
fa593d66
PA
2256 free (*p_sig);
2257 *p_sig = NULL;
2258
2259 if (debug_threads)
87ce2a04 2260 debug_printf ("Reporting deferred signal %d for LWP %ld.\n",
d86d4aaf 2261 WSTOPSIG (*wstat), lwpid_of (thread));
fa593d66
PA
2262
2263 if (debug_threads)
2264 {
2265 struct pending_signals *sig;
2266
2267 for (sig = lwp->pending_signals_to_report;
2268 sig != NULL;
2269 sig = sig->prev)
87ce2a04
DE
2270 debug_printf (" Still queued %d\n",
2271 sig->signal);
fa593d66 2272
87ce2a04 2273 debug_printf (" (no more queued signals)\n");
fa593d66
PA
2274 }
2275
2276 return 1;
2277 }
2278
2279 return 0;
2280}
2281
582511be
PA
2282/* Fetch the possibly triggered data watchpoint info and store it in
2283 CHILD.
d50171e4 2284
582511be
PA
2285 On some archs, like x86, that use debug registers to set
2286 watchpoints, it's possible that the way to know which watched
2287 address trapped, is to check the register that is used to select
2288 which address to watch. Problem is, between setting the watchpoint
2289 and reading back which data address trapped, the user may change
2290 the set of watchpoints, and, as a consequence, GDB changes the
2291 debug registers in the inferior. To avoid reading back a stale
2292 stopped-data-address when that happens, we cache in LP the fact
2293 that a watchpoint trapped, and the corresponding data address, as
2294 soon as we see CHILD stop with a SIGTRAP. If GDB changes the debug
2295 registers meanwhile, we have the cached data we can rely on. */
d50171e4 2296
582511be
PA
2297static int
2298check_stopped_by_watchpoint (struct lwp_info *child)
2299{
2300 if (the_low_target.stopped_by_watchpoint != NULL)
d50171e4 2301 {
582511be 2302 struct thread_info *saved_thread;
d50171e4 2303
582511be
PA
2304 saved_thread = current_thread;
2305 current_thread = get_lwp_thread (child);
2306
2307 if (the_low_target.stopped_by_watchpoint ())
d50171e4 2308 {
15c66dd6 2309 child->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
582511be
PA
2310
2311 if (the_low_target.stopped_data_address != NULL)
2312 child->stopped_data_address
2313 = the_low_target.stopped_data_address ();
2314 else
2315 child->stopped_data_address = 0;
d50171e4
PA
2316 }
2317
0bfdf32f 2318 current_thread = saved_thread;
d50171e4
PA
2319 }
2320
15c66dd6 2321 return child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
c4d9ceb6
YQ
2322}
2323
de0d863e
DB
2324/* Return the ptrace options that we want to try to enable. */
2325
2326static int
2327linux_low_ptrace_options (int attached)
2328{
c12a5089 2329 client_state &cs = get_client_state ();
de0d863e
DB
2330 int options = 0;
2331
2332 if (!attached)
2333 options |= PTRACE_O_EXITKILL;
2334
c12a5089 2335 if (cs.report_fork_events)
de0d863e
DB
2336 options |= PTRACE_O_TRACEFORK;
2337
c12a5089 2338 if (cs.report_vfork_events)
c269dbdb
DB
2339 options |= (PTRACE_O_TRACEVFORK | PTRACE_O_TRACEVFORKDONE);
2340
c12a5089 2341 if (cs.report_exec_events)
94585166
DB
2342 options |= PTRACE_O_TRACEEXEC;
2343
82075af2
JS
2344 options |= PTRACE_O_TRACESYSGOOD;
2345
de0d863e
DB
2346 return options;
2347}
2348
fa96cb38
PA
2349/* Do low-level handling of the event, and check if we should go on
2350 and pass it to caller code. Return the affected lwp if we are, or
2351 NULL otherwise. */
2352
2353static struct lwp_info *
582511be 2354linux_low_filter_event (int lwpid, int wstat)
fa96cb38 2355{
c12a5089 2356 client_state &cs = get_client_state ();
fa96cb38
PA
2357 struct lwp_info *child;
2358 struct thread_info *thread;
582511be 2359 int have_stop_pc = 0;
fa96cb38 2360
f2907e49 2361 child = find_lwp_pid (ptid_t (lwpid));
fa96cb38 2362
94585166
DB
2363 /* Check for stop events reported by a process we didn't already
2364 know about - anything not already in our LWP list.
2365
2366 If we're expecting to receive stopped processes after
2367 fork, vfork, and clone events, then we'll just add the
2368 new one to our list and go back to waiting for the event
2369 to be reported - the stopped process might be returned
2370 from waitpid before or after the event is.
2371
2372 But note the case of a non-leader thread exec'ing after the
2373 leader having exited, and gone from our lists (because
2374 check_zombie_leaders deleted it). The non-leader thread
2375 changes its tid to the tgid. */
2376
2377 if (WIFSTOPPED (wstat) && child == NULL && WSTOPSIG (wstat) == SIGTRAP
2378 && linux_ptrace_get_extended_event (wstat) == PTRACE_EVENT_EXEC)
2379 {
2380 ptid_t child_ptid;
2381
2382 /* A multi-thread exec after we had seen the leader exiting. */
2383 if (debug_threads)
2384 {
2385 debug_printf ("LLW: Re-adding thread group leader LWP %d"
2386 "after exec.\n", lwpid);
2387 }
2388
fd79271b 2389 child_ptid = ptid_t (lwpid, lwpid, 0);
94585166
DB
2390 child = add_lwp (child_ptid);
2391 child->stopped = 1;
2392 current_thread = child->thread;
2393 }
2394
fa96cb38
PA
2395 /* If we didn't find a process, one of two things presumably happened:
2396 - A process we started and then detached from has exited. Ignore it.
2397 - A process we are controlling has forked and the new child's stop
2398 was reported to us by the kernel. Save its PID. */
2399 if (child == NULL && WIFSTOPPED (wstat))
2400 {
2401 add_to_pid_list (&stopped_pids, lwpid, wstat);
2402 return NULL;
2403 }
2404 else if (child == NULL)
2405 return NULL;
2406
2407 thread = get_lwp_thread (child);
2408
2409 child->stopped = 1;
2410
2411 child->last_status = wstat;
2412
582511be
PA
2413 /* Check if the thread has exited. */
2414 if ((WIFEXITED (wstat) || WIFSIGNALED (wstat)))
2415 {
2416 if (debug_threads)
2417 debug_printf ("LLFE: %d exited.\n", lwpid);
f50bf8e5
YQ
2418
2419 if (finish_step_over (child))
2420 {
2421 /* Unsuspend all other LWPs, and set them back running again. */
2422 unsuspend_all_lwps (child);
2423 }
2424
65706a29
PA
2425 /* If there is at least one more LWP, then the exit signal was
2426 not the end of the debugged application and should be
2427 ignored, unless GDB wants to hear about thread exits. */
c12a5089 2428 if (cs.report_thread_events
65706a29 2429 || last_thread_of_process_p (pid_of (thread)))
582511be 2430 {
65706a29
PA
2431 /* Since events are serialized to GDB core, and we can't
2432 report this one right now. Leave the status pending for
2433 the next time we're able to report it. */
2434 mark_lwp_dead (child, wstat);
2435 return child;
582511be
PA
2436 }
2437 else
2438 {
65706a29
PA
2439 delete_lwp (child);
2440 return NULL;
582511be
PA
2441 }
2442 }
2443
2444 gdb_assert (WIFSTOPPED (wstat));
2445
fa96cb38
PA
2446 if (WIFSTOPPED (wstat))
2447 {
2448 struct process_info *proc;
2449
c06cbd92 2450 /* Architecture-specific setup after inferior is running. */
fa96cb38 2451 proc = find_process_pid (pid_of (thread));
c06cbd92 2452 if (proc->tdesc == NULL)
fa96cb38 2453 {
c06cbd92
YQ
2454 if (proc->attached)
2455 {
c06cbd92
YQ
2456 /* This needs to happen after we have attached to the
2457 inferior and it is stopped for the first time, but
2458 before we access any inferior registers. */
94585166 2459 linux_arch_setup_thread (thread);
c06cbd92
YQ
2460 }
2461 else
2462 {
2463 /* The process is started, but GDBserver will do
2464 architecture-specific setup after the program stops at
2465 the first instruction. */
2466 child->status_pending_p = 1;
2467 child->status_pending = wstat;
2468 return child;
2469 }
fa96cb38
PA
2470 }
2471 }
2472
fa96cb38
PA
2473 if (WIFSTOPPED (wstat) && child->must_set_ptrace_flags)
2474 {
beed38b8 2475 struct process_info *proc = find_process_pid (pid_of (thread));
de0d863e 2476 int options = linux_low_ptrace_options (proc->attached);
beed38b8 2477
de0d863e 2478 linux_enable_event_reporting (lwpid, options);
fa96cb38
PA
2479 child->must_set_ptrace_flags = 0;
2480 }
2481
82075af2
JS
2482 /* Always update syscall_state, even if it will be filtered later. */
2483 if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SYSCALL_SIGTRAP)
2484 {
2485 child->syscall_state
2486 = (child->syscall_state == TARGET_WAITKIND_SYSCALL_ENTRY
2487 ? TARGET_WAITKIND_SYSCALL_RETURN
2488 : TARGET_WAITKIND_SYSCALL_ENTRY);
2489 }
2490 else
2491 {
2492 /* Almost all other ptrace-stops are known to be outside of system
2493 calls, with further exceptions in handle_extended_wait. */
2494 child->syscall_state = TARGET_WAITKIND_IGNORE;
2495 }
2496
e7ad2f14
PA
2497 /* Be careful to not overwrite stop_pc until save_stop_reason is
2498 called. */
fa96cb38 2499 if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGTRAP
89a5711c 2500 && linux_is_extended_waitstatus (wstat))
fa96cb38 2501 {
582511be 2502 child->stop_pc = get_pc (child);
94585166 2503 if (handle_extended_wait (&child, wstat))
de0d863e
DB
2504 {
2505 /* The event has been handled, so just return without
2506 reporting it. */
2507 return NULL;
2508 }
fa96cb38
PA
2509 }
2510
80aea927 2511 if (linux_wstatus_maybe_breakpoint (wstat))
582511be 2512 {
e7ad2f14 2513 if (save_stop_reason (child))
582511be
PA
2514 have_stop_pc = 1;
2515 }
2516
2517 if (!have_stop_pc)
2518 child->stop_pc = get_pc (child);
2519
fa96cb38
PA
2520 if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGSTOP
2521 && child->stop_expected)
2522 {
2523 if (debug_threads)
2524 debug_printf ("Expected stop.\n");
2525 child->stop_expected = 0;
2526
2527 if (thread->last_resume_kind == resume_stop)
2528 {
2529 /* We want to report the stop to the core. Treat the
2530 SIGSTOP as a normal event. */
2bf6fb9d
PA
2531 if (debug_threads)
2532 debug_printf ("LLW: resume_stop SIGSTOP caught for %s.\n",
2533 target_pid_to_str (ptid_of (thread)));
fa96cb38
PA
2534 }
2535 else if (stopping_threads != NOT_STOPPING_THREADS)
2536 {
2537 /* Stopping threads. We don't want this SIGSTOP to end up
582511be 2538 pending. */
2bf6fb9d
PA
2539 if (debug_threads)
2540 debug_printf ("LLW: SIGSTOP caught for %s "
2541 "while stopping threads.\n",
2542 target_pid_to_str (ptid_of (thread)));
fa96cb38
PA
2543 return NULL;
2544 }
2545 else
2546 {
2bf6fb9d
PA
2547 /* This is a delayed SIGSTOP. Filter out the event. */
2548 if (debug_threads)
2549 debug_printf ("LLW: %s %s, 0, 0 (discard delayed SIGSTOP)\n",
2550 child->stepping ? "step" : "continue",
2551 target_pid_to_str (ptid_of (thread)));
2552
fa96cb38
PA
2553 linux_resume_one_lwp (child, child->stepping, 0, NULL);
2554 return NULL;
2555 }
2556 }
2557
582511be
PA
2558 child->status_pending_p = 1;
2559 child->status_pending = wstat;
fa96cb38
PA
2560 return child;
2561}
2562
f79b145d
YQ
2563/* Return true if THREAD is doing hardware single step. */
2564
2565static int
2566maybe_hw_step (struct thread_info *thread)
2567{
2568 if (can_hardware_single_step ())
2569 return 1;
2570 else
2571 {
3b9a79ef 2572 /* GDBserver must insert single-step breakpoint for software
f79b145d 2573 single step. */
3b9a79ef 2574 gdb_assert (has_single_step_breakpoints (thread));
f79b145d
YQ
2575 return 0;
2576 }
2577}
2578
20ba1ce6
PA
2579/* Resume LWPs that are currently stopped without any pending status
2580 to report, but are resumed from the core's perspective. */
2581
2582static void
9c80ecd6 2583resume_stopped_resumed_lwps (thread_info *thread)
20ba1ce6 2584{
20ba1ce6
PA
2585 struct lwp_info *lp = get_thread_lwp (thread);
2586
2587 if (lp->stopped
863d01bd 2588 && !lp->suspended
20ba1ce6 2589 && !lp->status_pending_p
20ba1ce6
PA
2590 && thread->last_status.kind == TARGET_WAITKIND_IGNORE)
2591 {
8901d193
YQ
2592 int step = 0;
2593
2594 if (thread->last_resume_kind == resume_step)
2595 step = maybe_hw_step (thread);
20ba1ce6
PA
2596
2597 if (debug_threads)
2598 debug_printf ("RSRL: resuming stopped-resumed LWP %s at %s: step=%d\n",
2599 target_pid_to_str (ptid_of (thread)),
2600 paddress (lp->stop_pc),
2601 step);
2602
2603 linux_resume_one_lwp (lp, step, GDB_SIGNAL_0, NULL);
2604 }
2605}
2606
fa96cb38
PA
2607/* Wait for an event from child(ren) WAIT_PTID, and return any that
2608 match FILTER_PTID (leaving others pending). The PTIDs can be:
2609 minus_one_ptid, to specify any child; a pid PTID, specifying all
2610 lwps of a thread group; or a PTID representing a single lwp. Store
2611 the stop status through the status pointer WSTAT. OPTIONS is
2612 passed to the waitpid call. Return 0 if no event was found and
2613 OPTIONS contains WNOHANG. Return -1 if no unwaited-for children
2614 was found. Return the PID of the stopped child otherwise. */
bd99dc85 2615
0d62e5e8 2616static int
fa96cb38
PA
2617linux_wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid,
2618 int *wstatp, int options)
0d62e5e8 2619{
d86d4aaf 2620 struct thread_info *event_thread;
d50171e4 2621 struct lwp_info *event_child, *requested_child;
fa96cb38 2622 sigset_t block_mask, prev_mask;
d50171e4 2623
fa96cb38 2624 retry:
d86d4aaf
DE
2625 /* N.B. event_thread points to the thread_info struct that contains
2626 event_child. Keep them in sync. */
2627 event_thread = NULL;
d50171e4
PA
2628 event_child = NULL;
2629 requested_child = NULL;
0d62e5e8 2630
95954743 2631 /* Check for a lwp with a pending status. */
bd99dc85 2632
d7e15655 2633 if (filter_ptid == minus_one_ptid || filter_ptid.is_pid ())
0d62e5e8 2634 {
83e1b6c1
SM
2635 event_thread = find_thread_in_random ([&] (thread_info *thread)
2636 {
2637 return status_pending_p_callback (thread, filter_ptid);
2638 });
2639
d86d4aaf
DE
2640 if (event_thread != NULL)
2641 event_child = get_thread_lwp (event_thread);
2642 if (debug_threads && event_thread)
2643 debug_printf ("Got a pending child %ld\n", lwpid_of (event_thread));
0d62e5e8 2644 }
d7e15655 2645 else if (filter_ptid != null_ptid)
0d62e5e8 2646 {
fa96cb38 2647 requested_child = find_lwp_pid (filter_ptid);
d50171e4 2648
bde24c0a 2649 if (stopping_threads == NOT_STOPPING_THREADS
fa593d66 2650 && requested_child->status_pending_p
229d26fc
SM
2651 && (requested_child->collecting_fast_tracepoint
2652 != fast_tpoint_collect_result::not_collecting))
fa593d66
PA
2653 {
2654 enqueue_one_deferred_signal (requested_child,
2655 &requested_child->status_pending);
2656 requested_child->status_pending_p = 0;
2657 requested_child->status_pending = 0;
2658 linux_resume_one_lwp (requested_child, 0, 0, NULL);
2659 }
2660
2661 if (requested_child->suspended
2662 && requested_child->status_pending_p)
38e08fca
GB
2663 {
2664 internal_error (__FILE__, __LINE__,
2665 "requesting an event out of a"
2666 " suspended child?");
2667 }
fa593d66 2668
d50171e4 2669 if (requested_child->status_pending_p)
d86d4aaf
DE
2670 {
2671 event_child = requested_child;
2672 event_thread = get_lwp_thread (event_child);
2673 }
0d62e5e8 2674 }
611cb4a5 2675
0d62e5e8
DJ
2676 if (event_child != NULL)
2677 {
bd99dc85 2678 if (debug_threads)
87ce2a04 2679 debug_printf ("Got an event from pending child %ld (%04x)\n",
d86d4aaf 2680 lwpid_of (event_thread), event_child->status_pending);
fa96cb38 2681 *wstatp = event_child->status_pending;
bd99dc85
PA
2682 event_child->status_pending_p = 0;
2683 event_child->status_pending = 0;
0bfdf32f 2684 current_thread = event_thread;
d86d4aaf 2685 return lwpid_of (event_thread);
0d62e5e8
DJ
2686 }
2687
fa96cb38
PA
2688 /* But if we don't find a pending event, we'll have to wait.
2689
2690 We only enter this loop if no process has a pending wait status.
2691 Thus any action taken in response to a wait status inside this
2692 loop is responding as soon as we detect the status, not after any
2693 pending events. */
d8301ad1 2694
fa96cb38
PA
2695 /* Make sure SIGCHLD is blocked until the sigsuspend below. Block
2696 all signals while here. */
2697 sigfillset (&block_mask);
21987b9c 2698 gdb_sigmask (SIG_BLOCK, &block_mask, &prev_mask);
fa96cb38 2699
582511be
PA
2700 /* Always pull all events out of the kernel. We'll randomly select
2701 an event LWP out of all that have events, to prevent
2702 starvation. */
fa96cb38 2703 while (event_child == NULL)
0d62e5e8 2704 {
fa96cb38 2705 pid_t ret = 0;
0d62e5e8 2706
fa96cb38
PA
2707 /* Always use -1 and WNOHANG, due to couple of a kernel/ptrace
2708 quirks:
0d62e5e8 2709
fa96cb38
PA
2710 - If the thread group leader exits while other threads in the
2711 thread group still exist, waitpid(TGID, ...) hangs. That
2712 waitpid won't return an exit status until the other threads
2713 in the group are reaped.
611cb4a5 2714
fa96cb38
PA
2715 - When a non-leader thread execs, that thread just vanishes
2716 without reporting an exit (so we'd hang if we waited for it
2717 explicitly in that case). The exec event is reported to
94585166 2718 the TGID pid. */
fa96cb38
PA
2719 errno = 0;
2720 ret = my_waitpid (-1, wstatp, options | WNOHANG);
d8301ad1 2721
fa96cb38
PA
2722 if (debug_threads)
2723 debug_printf ("LWFE: waitpid(-1, ...) returned %d, %s\n",
6d91ce9a 2724 ret, errno ? safe_strerror (errno) : "ERRNO-OK");
0d62e5e8 2725
fa96cb38 2726 if (ret > 0)
0d62e5e8 2727 {
89be2091 2728 if (debug_threads)
bd99dc85 2729 {
fa96cb38
PA
2730 debug_printf ("LLW: waitpid %ld received %s\n",
2731 (long) ret, status_to_str (*wstatp));
bd99dc85 2732 }
89be2091 2733
582511be
PA
2734 /* Filter all events. IOW, leave all events pending. We'll
2735 randomly select an event LWP out of all that have events
2736 below. */
2737 linux_low_filter_event (ret, *wstatp);
fa96cb38
PA
2738 /* Retry until nothing comes out of waitpid. A single
2739 SIGCHLD can indicate more than one child stopped. */
89be2091
DJ
2740 continue;
2741 }
2742
20ba1ce6
PA
2743 /* Now that we've pulled all events out of the kernel, resume
2744 LWPs that don't have an interesting event to report. */
2745 if (stopping_threads == NOT_STOPPING_THREADS)
f0045347 2746 for_each_thread (resume_stopped_resumed_lwps);
20ba1ce6
PA
2747
2748 /* ... and find an LWP with a status to report to the core, if
2749 any. */
83e1b6c1
SM
2750 event_thread = find_thread_in_random ([&] (thread_info *thread)
2751 {
2752 return status_pending_p_callback (thread, filter_ptid);
2753 });
2754
582511be
PA
2755 if (event_thread != NULL)
2756 {
2757 event_child = get_thread_lwp (event_thread);
2758 *wstatp = event_child->status_pending;
2759 event_child->status_pending_p = 0;
2760 event_child->status_pending = 0;
2761 break;
2762 }
2763
fa96cb38
PA
2764 /* Check for zombie thread group leaders. Those can't be reaped
2765 until all other threads in the thread group are. */
2766 check_zombie_leaders ();
2767
a1385b7b
SM
2768 auto not_stopped = [&] (thread_info *thread)
2769 {
2770 return not_stopped_callback (thread, wait_ptid);
2771 };
2772
fa96cb38
PA
2773 /* If there are no resumed children left in the set of LWPs we
2774 want to wait for, bail. We can't just block in
2775 waitpid/sigsuspend, because lwps might have been left stopped
2776 in trace-stop state, and we'd be stuck forever waiting for
2777 their status to change (which would only happen if we resumed
2778 them). Even if WNOHANG is set, this return code is preferred
2779 over 0 (below), as it is more detailed. */
a1385b7b 2780 if (find_thread (not_stopped) == NULL)
a6dbe5df 2781 {
fa96cb38
PA
2782 if (debug_threads)
2783 debug_printf ("LLW: exit (no unwaited-for LWP)\n");
21987b9c 2784 gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
fa96cb38 2785 return -1;
a6dbe5df
PA
2786 }
2787
fa96cb38
PA
2788 /* No interesting event to report to the caller. */
2789 if ((options & WNOHANG))
24a09b5f 2790 {
fa96cb38
PA
2791 if (debug_threads)
2792 debug_printf ("WNOHANG set, no event found\n");
2793
21987b9c 2794 gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
fa96cb38 2795 return 0;
24a09b5f
DJ
2796 }
2797
fa96cb38
PA
2798 /* Block until we get an event reported with SIGCHLD. */
2799 if (debug_threads)
2800 debug_printf ("sigsuspend'ing\n");
d50171e4 2801
fa96cb38 2802 sigsuspend (&prev_mask);
21987b9c 2803 gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
fa96cb38
PA
2804 goto retry;
2805 }
d50171e4 2806
21987b9c 2807 gdb_sigmask (SIG_SETMASK, &prev_mask, NULL);
d50171e4 2808
0bfdf32f 2809 current_thread = event_thread;
d50171e4 2810
fa96cb38
PA
2811 return lwpid_of (event_thread);
2812}
2813
2814/* Wait for an event from child(ren) PTID. PTIDs can be:
2815 minus_one_ptid, to specify any child; a pid PTID, specifying all
2816 lwps of a thread group; or a PTID representing a single lwp. Store
2817 the stop status through the status pointer WSTAT. OPTIONS is
2818 passed to the waitpid call. Return 0 if no event was found and
2819 OPTIONS contains WNOHANG. Return -1 if no unwaited-for children
2820 was found. Return the PID of the stopped child otherwise. */
2821
2822static int
2823linux_wait_for_event (ptid_t ptid, int *wstatp, int options)
2824{
2825 return linux_wait_for_event_filtered (ptid, ptid, wstatp, options);
611cb4a5
DJ
2826}
2827
6bf5e0ba
PA
2828/* Select one LWP out of those that have events pending. */
2829
2830static void
2831select_event_lwp (struct lwp_info **orig_lp)
2832{
582511be
PA
2833 struct thread_info *event_thread = NULL;
2834
2835 /* In all-stop, give preference to the LWP that is being
2836 single-stepped. There will be at most one, and it's the LWP that
2837 the core is most interested in. If we didn't do this, then we'd
2838 have to handle pending step SIGTRAPs somehow in case the core
2839 later continues the previously-stepped thread, otherwise we'd
2840 report the pending SIGTRAP, and the core, not having stepped the
2841 thread, wouldn't understand what the trap was for, and therefore
2842 would report it to the user as a random signal. */
2843 if (!non_stop)
6bf5e0ba 2844 {
39a64da5
SM
2845 event_thread = find_thread ([] (thread_info *thread)
2846 {
2847 lwp_info *lp = get_thread_lwp (thread);
2848
2849 return (thread->last_status.kind == TARGET_WAITKIND_IGNORE
2850 && thread->last_resume_kind == resume_step
2851 && lp->status_pending_p);
2852 });
2853
582511be
PA
2854 if (event_thread != NULL)
2855 {
2856 if (debug_threads)
2857 debug_printf ("SEL: Select single-step %s\n",
2858 target_pid_to_str (ptid_of (event_thread)));
2859 }
6bf5e0ba 2860 }
582511be 2861 if (event_thread == NULL)
6bf5e0ba
PA
2862 {
2863 /* No single-stepping LWP. Select one at random, out of those
b90fc188 2864 which have had events. */
6bf5e0ba 2865
b0319eaa 2866 event_thread = find_thread_in_random ([&] (thread_info *thread)
39a64da5
SM
2867 {
2868 lwp_info *lp = get_thread_lwp (thread);
2869
b0319eaa
TT
2870 /* Only resumed LWPs that have an event pending. */
2871 return (thread->last_status.kind == TARGET_WAITKIND_IGNORE
2872 && lp->status_pending_p);
39a64da5 2873 });
6bf5e0ba
PA
2874 }
2875
d86d4aaf 2876 if (event_thread != NULL)
6bf5e0ba 2877 {
d86d4aaf
DE
2878 struct lwp_info *event_lp = get_thread_lwp (event_thread);
2879
6bf5e0ba
PA
2880 /* Switch the event LWP. */
2881 *orig_lp = event_lp;
2882 }
2883}
2884
7984d532
PA
2885/* Decrement the suspend count of all LWPs, except EXCEPT, if non
2886 NULL. */
2887
2888static void
2889unsuspend_all_lwps (struct lwp_info *except)
2890{
139720c5
SM
2891 for_each_thread ([&] (thread_info *thread)
2892 {
2893 lwp_info *lwp = get_thread_lwp (thread);
2894
2895 if (lwp != except)
2896 lwp_suspended_decr (lwp);
2897 });
7984d532
PA
2898}
2899
9c80ecd6 2900static void move_out_of_jump_pad_callback (thread_info *thread);
fcb056a5 2901static bool stuck_in_jump_pad_callback (thread_info *thread);
5a6b0a41 2902static bool lwp_running (thread_info *thread);
fa593d66
PA
2903static ptid_t linux_wait_1 (ptid_t ptid,
2904 struct target_waitstatus *ourstatus,
2905 int target_options);
2906
2907/* Stabilize threads (move out of jump pads).
2908
2909 If a thread is midway collecting a fast tracepoint, we need to
2910 finish the collection and move it out of the jump pad before
2911 reporting the signal.
2912
2913 This avoids recursion while collecting (when a signal arrives
2914 midway, and the signal handler itself collects), which would trash
2915 the trace buffer. In case the user set a breakpoint in a signal
2916 handler, this avoids the backtrace showing the jump pad, etc..
2917 Most importantly, there are certain things we can't do safely if
2918 threads are stopped in a jump pad (or in its callee's). For
2919 example:
2920
2921 - starting a new trace run. A thread still collecting the
2922 previous run, could trash the trace buffer when resumed. The trace
2923 buffer control structures would have been reset but the thread had
2924 no way to tell. The thread could even midway memcpy'ing to the
2925 buffer, which would mean that when resumed, it would clobber the
2926 trace buffer that had been set for a new run.
2927
2928 - we can't rewrite/reuse the jump pads for new tracepoints
2929 safely. Say you do tstart while a thread is stopped midway while
2930 collecting. When the thread is later resumed, it finishes the
2931 collection, and returns to the jump pad, to execute the original
2932 instruction that was under the tracepoint jump at the time the
2933 older run had been started. If the jump pad had been rewritten
2934 since for something else in the new run, the thread would now
2935 execute the wrong / random instructions. */
2936
5c9eb2f2
TBA
2937void
2938linux_process_target::stabilize_threads ()
fa593d66 2939{
fcb056a5 2940 thread_info *thread_stuck = find_thread (stuck_in_jump_pad_callback);
fa593d66 2941
d86d4aaf 2942 if (thread_stuck != NULL)
fa593d66 2943 {
b4d51a55 2944 if (debug_threads)
87ce2a04 2945 debug_printf ("can't stabilize, LWP %ld is stuck in jump pad\n",
d86d4aaf 2946 lwpid_of (thread_stuck));
fa593d66
PA
2947 return;
2948 }
2949
fcb056a5 2950 thread_info *saved_thread = current_thread;
fa593d66
PA
2951
2952 stabilizing_threads = 1;
2953
2954 /* Kick 'em all. */
f0045347 2955 for_each_thread (move_out_of_jump_pad_callback);
fa593d66
PA
2956
2957 /* Loop until all are stopped out of the jump pads. */
5a6b0a41 2958 while (find_thread (lwp_running) != NULL)
fa593d66
PA
2959 {
2960 struct target_waitstatus ourstatus;
2961 struct lwp_info *lwp;
fa593d66
PA
2962 int wstat;
2963
2964 /* Note that we go through the full wait even loop. While
2965 moving threads out of jump pad, we need to be able to step
2966 over internal breakpoints and such. */
32fcada3 2967 linux_wait_1 (minus_one_ptid, &ourstatus, 0);
fa593d66
PA
2968
2969 if (ourstatus.kind == TARGET_WAITKIND_STOPPED)
2970 {
0bfdf32f 2971 lwp = get_thread_lwp (current_thread);
fa593d66
PA
2972
2973 /* Lock it. */
863d01bd 2974 lwp_suspended_inc (lwp);
fa593d66 2975
a493e3e2 2976 if (ourstatus.value.sig != GDB_SIGNAL_0
0bfdf32f 2977 || current_thread->last_resume_kind == resume_stop)
fa593d66 2978 {
2ea28649 2979 wstat = W_STOPCODE (gdb_signal_to_host (ourstatus.value.sig));
fa593d66
PA
2980 enqueue_one_deferred_signal (lwp, &wstat);
2981 }
2982 }
2983 }
2984
fcdad592 2985 unsuspend_all_lwps (NULL);
fa593d66
PA
2986
2987 stabilizing_threads = 0;
2988
0bfdf32f 2989 current_thread = saved_thread;
fa593d66 2990
b4d51a55 2991 if (debug_threads)
fa593d66 2992 {
fcb056a5
SM
2993 thread_stuck = find_thread (stuck_in_jump_pad_callback);
2994
d86d4aaf 2995 if (thread_stuck != NULL)
87ce2a04 2996 debug_printf ("couldn't stabilize, LWP %ld got stuck in jump pad\n",
d86d4aaf 2997 lwpid_of (thread_stuck));
fa593d66
PA
2998 }
2999}
3000
582511be
PA
3001/* Convenience function that is called when the kernel reports an
3002 event that is not passed out to GDB. */
3003
3004static ptid_t
3005ignore_event (struct target_waitstatus *ourstatus)
3006{
3007 /* If we got an event, there may still be others, as a single
3008 SIGCHLD can indicate more than one child stopped. This forces
3009 another target_wait call. */
3010 async_file_mark ();
3011
3012 ourstatus->kind = TARGET_WAITKIND_IGNORE;
3013 return null_ptid;
3014}
3015
65706a29
PA
3016/* Convenience function that is called when the kernel reports an exit
3017 event. This decides whether to report the event to GDB as a
3018 process exit event, a thread exit event, or to suppress the
3019 event. */
3020
3021static ptid_t
3022filter_exit_event (struct lwp_info *event_child,
3023 struct target_waitstatus *ourstatus)
3024{
c12a5089 3025 client_state &cs = get_client_state ();
65706a29
PA
3026 struct thread_info *thread = get_lwp_thread (event_child);
3027 ptid_t ptid = ptid_of (thread);
3028
3029 if (!last_thread_of_process_p (pid_of (thread)))
3030 {
c12a5089 3031 if (cs.report_thread_events)
65706a29
PA
3032 ourstatus->kind = TARGET_WAITKIND_THREAD_EXITED;
3033 else
3034 ourstatus->kind = TARGET_WAITKIND_IGNORE;
3035
3036 delete_lwp (event_child);
3037 }
3038 return ptid;
3039}
3040
82075af2
JS
3041/* Returns 1 if GDB is interested in any event_child syscalls. */
3042
3043static int
3044gdb_catching_syscalls_p (struct lwp_info *event_child)
3045{
3046 struct thread_info *thread = get_lwp_thread (event_child);
3047 struct process_info *proc = get_thread_process (thread);
3048
f27866ba 3049 return !proc->syscalls_to_catch.empty ();
82075af2
JS
3050}
3051
3052/* Returns 1 if GDB is interested in the event_child syscall.
3053 Only to be called when stopped reason is SYSCALL_SIGTRAP. */
3054
3055static int
3056gdb_catch_this_syscall_p (struct lwp_info *event_child)
3057{
4cc32bec 3058 int sysno;
82075af2
JS
3059 struct thread_info *thread = get_lwp_thread (event_child);
3060 struct process_info *proc = get_thread_process (thread);
3061
f27866ba 3062 if (proc->syscalls_to_catch.empty ())
82075af2
JS
3063 return 0;
3064
f27866ba 3065 if (proc->syscalls_to_catch[0] == ANY_SYSCALL)
82075af2
JS
3066 return 1;
3067
4cc32bec 3068 get_syscall_trapinfo (event_child, &sysno);
f27866ba
SM
3069
3070 for (int iter : proc->syscalls_to_catch)
82075af2
JS
3071 if (iter == sysno)
3072 return 1;
3073
3074 return 0;
3075}
3076
0d62e5e8 3077/* Wait for process, returns status. */
da6d8c04 3078
95954743
PA
3079static ptid_t
3080linux_wait_1 (ptid_t ptid,
3081 struct target_waitstatus *ourstatus, int target_options)
da6d8c04 3082{
c12a5089 3083 client_state &cs = get_client_state ();
e5f1222d 3084 int w;
fc7238bb 3085 struct lwp_info *event_child;
bd99dc85 3086 int options;
bd99dc85 3087 int pid;
6bf5e0ba
PA
3088 int step_over_finished;
3089 int bp_explains_trap;
3090 int maybe_internal_trap;
3091 int report_to_gdb;
219f2f23 3092 int trace_event;
c2d6af84 3093 int in_step_range;
f2faf941 3094 int any_resumed;
bd99dc85 3095
87ce2a04
DE
3096 if (debug_threads)
3097 {
3098 debug_enter ();
3099 debug_printf ("linux_wait_1: [%s]\n", target_pid_to_str (ptid));
3100 }
3101
bd99dc85
PA
3102 /* Translate generic target options into linux options. */
3103 options = __WALL;
3104 if (target_options & TARGET_WNOHANG)
3105 options |= WNOHANG;
0d62e5e8 3106
fa593d66
PA
3107 bp_explains_trap = 0;
3108 trace_event = 0;
c2d6af84 3109 in_step_range = 0;
bd99dc85
PA
3110 ourstatus->kind = TARGET_WAITKIND_IGNORE;
3111
83e1b6c1
SM
3112 auto status_pending_p_any = [&] (thread_info *thread)
3113 {
3114 return status_pending_p_callback (thread, minus_one_ptid);
3115 };
3116
a1385b7b
SM
3117 auto not_stopped = [&] (thread_info *thread)
3118 {
3119 return not_stopped_callback (thread, minus_one_ptid);
3120 };
3121
f2faf941 3122 /* Find a resumed LWP, if any. */
83e1b6c1 3123 if (find_thread (status_pending_p_any) != NULL)
f2faf941 3124 any_resumed = 1;
a1385b7b 3125 else if (find_thread (not_stopped) != NULL)
f2faf941
PA
3126 any_resumed = 1;
3127 else
3128 any_resumed = 0;
3129
d7e15655 3130 if (step_over_bkpt == null_ptid)
6bf5e0ba
PA
3131 pid = linux_wait_for_event (ptid, &w, options);
3132 else
3133 {
3134 if (debug_threads)
87ce2a04
DE
3135 debug_printf ("step_over_bkpt set [%s], doing a blocking wait\n",
3136 target_pid_to_str (step_over_bkpt));
6bf5e0ba
PA
3137 pid = linux_wait_for_event (step_over_bkpt, &w, options & ~WNOHANG);
3138 }
3139
f2faf941 3140 if (pid == 0 || (pid == -1 && !any_resumed))
87ce2a04 3141 {
fa96cb38
PA
3142 gdb_assert (target_options & TARGET_WNOHANG);
3143
87ce2a04
DE
3144 if (debug_threads)
3145 {
fa96cb38
PA
3146 debug_printf ("linux_wait_1 ret = null_ptid, "
3147 "TARGET_WAITKIND_IGNORE\n");
87ce2a04
DE
3148 debug_exit ();
3149 }
fa96cb38
PA
3150
3151 ourstatus->kind = TARGET_WAITKIND_IGNORE;
87ce2a04
DE
3152 return null_ptid;
3153 }
fa96cb38
PA
3154 else if (pid == -1)
3155 {
3156 if (debug_threads)
3157 {
3158 debug_printf ("linux_wait_1 ret = null_ptid, "
3159 "TARGET_WAITKIND_NO_RESUMED\n");
3160 debug_exit ();
3161 }
bd99dc85 3162
fa96cb38
PA
3163 ourstatus->kind = TARGET_WAITKIND_NO_RESUMED;
3164 return null_ptid;
3165 }
0d62e5e8 3166
0bfdf32f 3167 event_child = get_thread_lwp (current_thread);
0d62e5e8 3168
fa96cb38
PA
3169 /* linux_wait_for_event only returns an exit status for the last
3170 child of a process. Report it. */
3171 if (WIFEXITED (w) || WIFSIGNALED (w))
da6d8c04 3172 {
fa96cb38 3173 if (WIFEXITED (w))
0d62e5e8 3174 {
fa96cb38
PA
3175 ourstatus->kind = TARGET_WAITKIND_EXITED;
3176 ourstatus->value.integer = WEXITSTATUS (w);
bd99dc85 3177
fa96cb38 3178 if (debug_threads)
bd99dc85 3179 {
fa96cb38
PA
3180 debug_printf ("linux_wait_1 ret = %s, exited with "
3181 "retcode %d\n",
0bfdf32f 3182 target_pid_to_str (ptid_of (current_thread)),
fa96cb38
PA
3183 WEXITSTATUS (w));
3184 debug_exit ();
bd99dc85 3185 }
fa96cb38
PA
3186 }
3187 else
3188 {
3189 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
3190 ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w));
5b1c542e 3191
fa96cb38
PA
3192 if (debug_threads)
3193 {
3194 debug_printf ("linux_wait_1 ret = %s, terminated with "
3195 "signal %d\n",
0bfdf32f 3196 target_pid_to_str (ptid_of (current_thread)),
fa96cb38
PA
3197 WTERMSIG (w));
3198 debug_exit ();
3199 }
0d62e5e8 3200 }
fa96cb38 3201
65706a29
PA
3202 if (ourstatus->kind == TARGET_WAITKIND_EXITED)
3203 return filter_exit_event (event_child, ourstatus);
3204
0bfdf32f 3205 return ptid_of (current_thread);
da6d8c04
DJ
3206 }
3207
2d97cd35
AT
3208 /* If step-over executes a breakpoint instruction, in the case of a
3209 hardware single step it means a gdb/gdbserver breakpoint had been
3210 planted on top of a permanent breakpoint, in the case of a software
3211 single step it may just mean that gdbserver hit the reinsert breakpoint.
e7ad2f14 3212 The PC has been adjusted by save_stop_reason to point at
2d97cd35
AT
3213 the breakpoint address.
3214 So in the case of the hardware single step advance the PC manually
3215 past the breakpoint and in the case of software single step advance only
3b9a79ef 3216 if it's not the single_step_breakpoint we are hitting.
2d97cd35
AT
3217 This avoids that a program would keep trapping a permanent breakpoint
3218 forever. */
d7e15655 3219 if (step_over_bkpt != null_ptid
2d97cd35
AT
3220 && event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
3221 && (event_child->stepping
3b9a79ef 3222 || !single_step_breakpoint_inserted_here (event_child->stop_pc)))
8090aef2 3223 {
dd373349
AT
3224 int increment_pc = 0;
3225 int breakpoint_kind = 0;
3226 CORE_ADDR stop_pc = event_child->stop_pc;
3227
769ef81f 3228 breakpoint_kind =
d367006f
TBA
3229 the_target->pt->breakpoint_kind_from_current_state (&stop_pc);
3230 the_target->pt->sw_breakpoint_from_kind (breakpoint_kind, &increment_pc);
8090aef2
PA
3231
3232 if (debug_threads)
3233 {
3234 debug_printf ("step-over for %s executed software breakpoint\n",
3235 target_pid_to_str (ptid_of (current_thread)));
3236 }
3237
3238 if (increment_pc != 0)
3239 {
3240 struct regcache *regcache
3241 = get_thread_regcache (current_thread, 1);
3242
3243 event_child->stop_pc += increment_pc;
3244 (*the_low_target.set_pc) (regcache, event_child->stop_pc);
3245
3246 if (!(*the_low_target.breakpoint_at) (event_child->stop_pc))
15c66dd6 3247 event_child->stop_reason = TARGET_STOPPED_BY_NO_REASON;
8090aef2
PA
3248 }
3249 }
3250
6bf5e0ba
PA
3251 /* If this event was not handled before, and is not a SIGTRAP, we
3252 report it. SIGILL and SIGSEGV are also treated as traps in case
3253 a breakpoint is inserted at the current PC. If this target does
3254 not support internal breakpoints at all, we also report the
3255 SIGTRAP without further processing; it's of no concern to us. */
3256 maybe_internal_trap
3257 = (supports_breakpoints ()
3258 && (WSTOPSIG (w) == SIGTRAP
3259 || ((WSTOPSIG (w) == SIGILL
3260 || WSTOPSIG (w) == SIGSEGV)
3261 && (*the_low_target.breakpoint_at) (event_child->stop_pc))));
3262
3263 if (maybe_internal_trap)
3264 {
3265 /* Handle anything that requires bookkeeping before deciding to
3266 report the event or continue waiting. */
3267
3268 /* First check if we can explain the SIGTRAP with an internal
3269 breakpoint, or if we should possibly report the event to GDB.
3270 Do this before anything that may remove or insert a
3271 breakpoint. */
3272 bp_explains_trap = breakpoint_inserted_here (event_child->stop_pc);
3273
3274 /* We have a SIGTRAP, possibly a step-over dance has just
3275 finished. If so, tweak the state machine accordingly,
3b9a79ef
YQ
3276 reinsert breakpoints and delete any single-step
3277 breakpoints. */
6bf5e0ba
PA
3278 step_over_finished = finish_step_over (event_child);
3279
3280 /* Now invoke the callbacks of any internal breakpoints there. */
3281 check_breakpoints (event_child->stop_pc);
3282
219f2f23
PA
3283 /* Handle tracepoint data collecting. This may overflow the
3284 trace buffer, and cause a tracing stop, removing
3285 breakpoints. */
3286 trace_event = handle_tracepoints (event_child);
3287
6bf5e0ba
PA
3288 if (bp_explains_trap)
3289 {
6bf5e0ba 3290 if (debug_threads)
87ce2a04 3291 debug_printf ("Hit a gdbserver breakpoint.\n");
6bf5e0ba
PA
3292 }
3293 }
3294 else
3295 {
3296 /* We have some other signal, possibly a step-over dance was in
3297 progress, and it should be cancelled too. */
3298 step_over_finished = finish_step_over (event_child);
fa593d66
PA
3299 }
3300
3301 /* We have all the data we need. Either report the event to GDB, or
3302 resume threads and keep waiting for more. */
3303
3304 /* If we're collecting a fast tracepoint, finish the collection and
3305 move out of the jump pad before delivering a signal. See
3306 linux_stabilize_threads. */
3307
3308 if (WIFSTOPPED (w)
3309 && WSTOPSIG (w) != SIGTRAP
3310 && supports_fast_tracepoints ()
58b4daa5 3311 && agent_loaded_p ())
fa593d66
PA
3312 {
3313 if (debug_threads)
87ce2a04
DE
3314 debug_printf ("Got signal %d for LWP %ld. Check if we need "
3315 "to defer or adjust it.\n",
0bfdf32f 3316 WSTOPSIG (w), lwpid_of (current_thread));
fa593d66
PA
3317
3318 /* Allow debugging the jump pad itself. */
0bfdf32f 3319 if (current_thread->last_resume_kind != resume_step
fa593d66
PA
3320 && maybe_move_out_of_jump_pad (event_child, &w))
3321 {
3322 enqueue_one_deferred_signal (event_child, &w);
3323
3324 if (debug_threads)
87ce2a04 3325 debug_printf ("Signal %d for LWP %ld deferred (in jump pad)\n",
0bfdf32f 3326 WSTOPSIG (w), lwpid_of (current_thread));
fa593d66
PA
3327
3328 linux_resume_one_lwp (event_child, 0, 0, NULL);
582511be 3329
edeeb602
YQ
3330 if (debug_threads)
3331 debug_exit ();
582511be 3332 return ignore_event (ourstatus);
fa593d66
PA
3333 }
3334 }
219f2f23 3335
229d26fc
SM
3336 if (event_child->collecting_fast_tracepoint
3337 != fast_tpoint_collect_result::not_collecting)
fa593d66
PA
3338 {
3339 if (debug_threads)
87ce2a04
DE
3340 debug_printf ("LWP %ld was trying to move out of the jump pad (%d). "
3341 "Check if we're already there.\n",
0bfdf32f 3342 lwpid_of (current_thread),
229d26fc 3343 (int) event_child->collecting_fast_tracepoint);
fa593d66
PA
3344
3345 trace_event = 1;
3346
3347 event_child->collecting_fast_tracepoint
3348 = linux_fast_tracepoint_collecting (event_child, NULL);
3349
229d26fc
SM
3350 if (event_child->collecting_fast_tracepoint
3351 != fast_tpoint_collect_result::before_insn)
fa593d66
PA
3352 {
3353 /* No longer need this breakpoint. */
3354 if (event_child->exit_jump_pad_bkpt != NULL)
3355 {
3356 if (debug_threads)
87ce2a04
DE
3357 debug_printf ("No longer need exit-jump-pad bkpt; removing it."
3358 "stopping all threads momentarily.\n");
fa593d66
PA
3359
3360 /* Other running threads could hit this breakpoint.
3361 We don't handle moribund locations like GDB does,
3362 instead we always pause all threads when removing
3363 breakpoints, so that any step-over or
3364 decr_pc_after_break adjustment is always taken
3365 care of while the breakpoint is still
3366 inserted. */
3367 stop_all_lwps (1, event_child);
fa593d66
PA
3368
3369 delete_breakpoint (event_child->exit_jump_pad_bkpt);
3370 event_child->exit_jump_pad_bkpt = NULL;
3371
3372 unstop_all_lwps (1, event_child);
3373
3374 gdb_assert (event_child->suspended >= 0);
3375 }
3376 }
3377
229d26fc
SM
3378 if (event_child->collecting_fast_tracepoint
3379 == fast_tpoint_collect_result::not_collecting)
fa593d66
PA
3380 {
3381 if (debug_threads)
87ce2a04
DE
3382 debug_printf ("fast tracepoint finished "
3383 "collecting successfully.\n");
fa593d66
PA
3384
3385 /* We may have a deferred signal to report. */
3386 if (dequeue_one_deferred_signal (event_child, &w))
3387 {
3388 if (debug_threads)
87ce2a04 3389 debug_printf ("dequeued one signal.\n");
fa593d66 3390 }
3c11dd79 3391 else
fa593d66 3392 {
3c11dd79 3393 if (debug_threads)
87ce2a04 3394 debug_printf ("no deferred signals.\n");
fa593d66
PA
3395
3396 if (stabilizing_threads)
3397 {
3398 ourstatus->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 3399 ourstatus->value.sig = GDB_SIGNAL_0;
87ce2a04
DE
3400
3401 if (debug_threads)
3402 {
3403 debug_printf ("linux_wait_1 ret = %s, stopped "
3404 "while stabilizing threads\n",
0bfdf32f 3405 target_pid_to_str (ptid_of (current_thread)));
87ce2a04
DE
3406 debug_exit ();
3407 }
3408
0bfdf32f 3409 return ptid_of (current_thread);
fa593d66
PA
3410 }
3411 }
3412 }
6bf5e0ba
PA
3413 }
3414
e471f25b
PA
3415 /* Check whether GDB would be interested in this event. */
3416
82075af2
JS
3417 /* Check if GDB is interested in this syscall. */
3418 if (WIFSTOPPED (w)
3419 && WSTOPSIG (w) == SYSCALL_SIGTRAP
3420 && !gdb_catch_this_syscall_p (event_child))
3421 {
3422 if (debug_threads)
3423 {
3424 debug_printf ("Ignored syscall for LWP %ld.\n",
3425 lwpid_of (current_thread));
3426 }
3427
3428 linux_resume_one_lwp (event_child, event_child->stepping,
3429 0, NULL);
edeeb602
YQ
3430
3431 if (debug_threads)
3432 debug_exit ();
82075af2
JS
3433 return ignore_event (ourstatus);
3434 }
3435
e471f25b
PA
3436 /* If GDB is not interested in this signal, don't stop other
3437 threads, and don't report it to GDB. Just resume the inferior
3438 right away. We do this for threading-related signals as well as
3439 any that GDB specifically requested we ignore. But never ignore
3440 SIGSTOP if we sent it ourselves, and do not ignore signals when
3441 stepping - they may require special handling to skip the signal
c9587f88
AT
3442 handler. Also never ignore signals that could be caused by a
3443 breakpoint. */
e471f25b 3444 if (WIFSTOPPED (w)
0bfdf32f 3445 && current_thread->last_resume_kind != resume_step
e471f25b 3446 && (
1a981360 3447#if defined (USE_THREAD_DB) && !defined (__ANDROID__)
fe978cb0 3448 (current_process ()->priv->thread_db != NULL
e471f25b
PA
3449 && (WSTOPSIG (w) == __SIGRTMIN
3450 || WSTOPSIG (w) == __SIGRTMIN + 1))
3451 ||
3452#endif
c12a5089 3453 (cs.pass_signals[gdb_signal_from_host (WSTOPSIG (w))]
e471f25b 3454 && !(WSTOPSIG (w) == SIGSTOP
c9587f88
AT
3455 && current_thread->last_resume_kind == resume_stop)
3456 && !linux_wstatus_maybe_breakpoint (w))))
e471f25b
PA
3457 {
3458 siginfo_t info, *info_p;
3459
3460 if (debug_threads)
87ce2a04 3461 debug_printf ("Ignored signal %d for LWP %ld.\n",
0bfdf32f 3462 WSTOPSIG (w), lwpid_of (current_thread));
e471f25b 3463
0bfdf32f 3464 if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_thread),
b8e1b30e 3465 (PTRACE_TYPE_ARG3) 0, &info) == 0)
e471f25b
PA
3466 info_p = &info;
3467 else
3468 info_p = NULL;
863d01bd
PA
3469
3470 if (step_over_finished)
3471 {
3472 /* We cancelled this thread's step-over above. We still
3473 need to unsuspend all other LWPs, and set them back
3474 running again while the signal handler runs. */
3475 unsuspend_all_lwps (event_child);
3476
3477 /* Enqueue the pending signal info so that proceed_all_lwps
3478 doesn't lose it. */
3479 enqueue_pending_signal (event_child, WSTOPSIG (w), info_p);
3480
3481 proceed_all_lwps ();
3482 }
3483 else
3484 {
3485 linux_resume_one_lwp (event_child, event_child->stepping,
3486 WSTOPSIG (w), info_p);
3487 }
edeeb602
YQ
3488
3489 if (debug_threads)
3490 debug_exit ();
3491
582511be 3492 return ignore_event (ourstatus);
e471f25b
PA
3493 }
3494
c2d6af84
PA
3495 /* Note that all addresses are always "out of the step range" when
3496 there's no range to begin with. */
3497 in_step_range = lwp_in_step_range (event_child);
3498
3499 /* If GDB wanted this thread to single step, and the thread is out
3500 of the step range, we always want to report the SIGTRAP, and let
3501 GDB handle it. Watchpoints should always be reported. So should
3502 signals we can't explain. A SIGTRAP we can't explain could be a
3503 GDB breakpoint --- we may or not support Z0 breakpoints. If we
3504 do, we're be able to handle GDB breakpoints on top of internal
3505 breakpoints, by handling the internal breakpoint and still
3506 reporting the event to GDB. If we don't, we're out of luck, GDB
863d01bd
PA
3507 won't see the breakpoint hit. If we see a single-step event but
3508 the thread should be continuing, don't pass the trap to gdb.
3509 That indicates that we had previously finished a single-step but
3510 left the single-step pending -- see
3511 complete_ongoing_step_over. */
6bf5e0ba 3512 report_to_gdb = (!maybe_internal_trap
0bfdf32f 3513 || (current_thread->last_resume_kind == resume_step
c2d6af84 3514 && !in_step_range)
15c66dd6 3515 || event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT
863d01bd
PA
3516 || (!in_step_range
3517 && !bp_explains_trap
3518 && !trace_event
3519 && !step_over_finished
3520 && !(current_thread->last_resume_kind == resume_continue
3521 && event_child->stop_reason == TARGET_STOPPED_BY_SINGLE_STEP))
9f3a5c85 3522 || (gdb_breakpoint_here (event_child->stop_pc)
d3ce09f5 3523 && gdb_condition_true_at_breakpoint (event_child->stop_pc)
de0d863e 3524 && gdb_no_commands_at_breakpoint (event_child->stop_pc))
00db26fa 3525 || event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE);
d3ce09f5
SS
3526
3527 run_breakpoint_commands (event_child->stop_pc);
6bf5e0ba
PA
3528
3529 /* We found no reason GDB would want us to stop. We either hit one
3530 of our own breakpoints, or finished an internal step GDB
3531 shouldn't know about. */
3532 if (!report_to_gdb)
3533 {
3534 if (debug_threads)
3535 {
3536 if (bp_explains_trap)
87ce2a04 3537 debug_printf ("Hit a gdbserver breakpoint.\n");
6bf5e0ba 3538 if (step_over_finished)
87ce2a04 3539 debug_printf ("Step-over finished.\n");
219f2f23 3540 if (trace_event)
87ce2a04 3541 debug_printf ("Tracepoint event.\n");
c2d6af84 3542 if (lwp_in_step_range (event_child))
87ce2a04
DE
3543 debug_printf ("Range stepping pc 0x%s [0x%s, 0x%s).\n",
3544 paddress (event_child->stop_pc),
3545 paddress (event_child->step_range_start),
3546 paddress (event_child->step_range_end));
6bf5e0ba
PA
3547 }
3548
3549 /* We're not reporting this breakpoint to GDB, so apply the
3550 decr_pc_after_break adjustment to the inferior's regcache
3551 ourselves. */
3552
3553 if (the_low_target.set_pc != NULL)
3554 {
3555 struct regcache *regcache
0bfdf32f 3556 = get_thread_regcache (current_thread, 1);
6bf5e0ba
PA
3557 (*the_low_target.set_pc) (regcache, event_child->stop_pc);
3558 }
3559
7984d532 3560 if (step_over_finished)
e3652c84
YQ
3561 {
3562 /* If we have finished stepping over a breakpoint, we've
3563 stopped and suspended all LWPs momentarily except the
3564 stepping one. This is where we resume them all again.
3565 We're going to keep waiting, so use proceed, which
3566 handles stepping over the next breakpoint. */
3567 unsuspend_all_lwps (event_child);
3568 }
3569 else
3570 {
3571 /* Remove the single-step breakpoints if any. Note that
3572 there isn't single-step breakpoint if we finished stepping
3573 over. */
3574 if (can_software_single_step ()
3575 && has_single_step_breakpoints (current_thread))
3576 {
3577 stop_all_lwps (0, event_child);
3578 delete_single_step_breakpoints (current_thread);
3579 unstop_all_lwps (0, event_child);
3580 }
3581 }
7984d532 3582
e3652c84
YQ
3583 if (debug_threads)
3584 debug_printf ("proceeding all threads.\n");
6bf5e0ba 3585 proceed_all_lwps ();
edeeb602
YQ
3586
3587 if (debug_threads)
3588 debug_exit ();
3589
582511be 3590 return ignore_event (ourstatus);
6bf5e0ba
PA
3591 }
3592
3593 if (debug_threads)
3594 {
00db26fa 3595 if (event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE)
ad071a30 3596 {
23fdd69e
SM
3597 std::string str
3598 = target_waitstatus_to_string (&event_child->waitstatus);
ad071a30 3599
ad071a30 3600 debug_printf ("LWP %ld: extended event with waitstatus %s\n",
23fdd69e 3601 lwpid_of (get_lwp_thread (event_child)), str.c_str ());
ad071a30 3602 }
0bfdf32f 3603 if (current_thread->last_resume_kind == resume_step)
c2d6af84
PA
3604 {
3605 if (event_child->step_range_start == event_child->step_range_end)
87ce2a04 3606 debug_printf ("GDB wanted to single-step, reporting event.\n");
c2d6af84 3607 else if (!lwp_in_step_range (event_child))
87ce2a04 3608 debug_printf ("Out of step range, reporting event.\n");
c2d6af84 3609 }
15c66dd6 3610 if (event_child->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
87ce2a04 3611 debug_printf ("Stopped by watchpoint.\n");
582511be 3612 else if (gdb_breakpoint_here (event_child->stop_pc))
87ce2a04 3613 debug_printf ("Stopped by GDB breakpoint.\n");
6bf5e0ba 3614 if (debug_threads)
87ce2a04 3615 debug_printf ("Hit a non-gdbserver trap event.\n");
6bf5e0ba
PA
3616 }
3617
3618 /* Alright, we're going to report a stop. */
3619
3b9a79ef 3620 /* Remove single-step breakpoints. */
8901d193
YQ
3621 if (can_software_single_step ())
3622 {
3b9a79ef 3623 /* Remove single-step breakpoints or not. It it is true, stop all
8901d193
YQ
3624 lwps, so that other threads won't hit the breakpoint in the
3625 staled memory. */
3b9a79ef 3626 int remove_single_step_breakpoints_p = 0;
8901d193
YQ
3627
3628 if (non_stop)
3629 {
3b9a79ef
YQ
3630 remove_single_step_breakpoints_p
3631 = has_single_step_breakpoints (current_thread);
8901d193
YQ
3632 }
3633 else
3634 {
3635 /* In all-stop, a stop reply cancels all previous resume
3b9a79ef 3636 requests. Delete all single-step breakpoints. */
8901d193 3637
9c80ecd6
SM
3638 find_thread ([&] (thread_info *thread) {
3639 if (has_single_step_breakpoints (thread))
3640 {
3641 remove_single_step_breakpoints_p = 1;
3642 return true;
3643 }
8901d193 3644
9c80ecd6
SM
3645 return false;
3646 });
8901d193
YQ
3647 }
3648
3b9a79ef 3649 if (remove_single_step_breakpoints_p)
8901d193 3650 {
3b9a79ef 3651 /* If we remove single-step breakpoints from memory, stop all lwps,
8901d193
YQ
3652 so that other threads won't hit the breakpoint in the staled
3653 memory. */
3654 stop_all_lwps (0, event_child);
3655
3656 if (non_stop)
3657 {
3b9a79ef
YQ
3658 gdb_assert (has_single_step_breakpoints (current_thread));
3659 delete_single_step_breakpoints (current_thread);
8901d193
YQ
3660 }
3661 else
3662 {
9c80ecd6
SM
3663 for_each_thread ([] (thread_info *thread){
3664 if (has_single_step_breakpoints (thread))
3665 delete_single_step_breakpoints (thread);
3666 });
8901d193
YQ
3667 }
3668
3669 unstop_all_lwps (0, event_child);
3670 }
3671 }
3672
582511be 3673 if (!stabilizing_threads)
6bf5e0ba
PA
3674 {
3675 /* In all-stop, stop all threads. */
582511be
PA
3676 if (!non_stop)
3677 stop_all_lwps (0, NULL);
6bf5e0ba 3678
c03e6ccc 3679 if (step_over_finished)
582511be
PA
3680 {
3681 if (!non_stop)
3682 {
3683 /* If we were doing a step-over, all other threads but
3684 the stepping one had been paused in start_step_over,
3685 with their suspend counts incremented. We don't want
3686 to do a full unstop/unpause, because we're in
3687 all-stop mode (so we want threads stopped), but we
3688 still need to unsuspend the other threads, to
3689 decrement their `suspended' count back. */
3690 unsuspend_all_lwps (event_child);
3691 }
3692 else
3693 {
3694 /* If we just finished a step-over, then all threads had
3695 been momentarily paused. In all-stop, that's fine,
3696 we want threads stopped by now anyway. In non-stop,
3697 we need to re-resume threads that GDB wanted to be
3698 running. */
3699 unstop_all_lwps (1, event_child);
3700 }
3701 }
c03e6ccc 3702
3aa5cfa0
AT
3703 /* If we're not waiting for a specific LWP, choose an event LWP
3704 from among those that have had events. Giving equal priority
3705 to all LWPs that have had events helps prevent
3706 starvation. */
d7e15655 3707 if (ptid == minus_one_ptid)
3aa5cfa0
AT
3708 {
3709 event_child->status_pending_p = 1;
3710 event_child->status_pending = w;
3711
3712 select_event_lwp (&event_child);
3713
3714 /* current_thread and event_child must stay in sync. */
3715 current_thread = get_lwp_thread (event_child);
3716
3717 event_child->status_pending_p = 0;
3718 w = event_child->status_pending;
3719 }
3720
3721
fa593d66 3722 /* Stabilize threads (move out of jump pads). */
582511be 3723 if (!non_stop)
5c9eb2f2 3724 target_stabilize_threads ();
6bf5e0ba
PA
3725 }
3726 else
3727 {
3728 /* If we just finished a step-over, then all threads had been
3729 momentarily paused. In all-stop, that's fine, we want
3730 threads stopped by now anyway. In non-stop, we need to
3731 re-resume threads that GDB wanted to be running. */
3732 if (step_over_finished)
7984d532 3733 unstop_all_lwps (1, event_child);
6bf5e0ba
PA
3734 }
3735
00db26fa 3736 if (event_child->waitstatus.kind != TARGET_WAITKIND_IGNORE)
de0d863e 3737 {
00db26fa
PA
3738 /* If the reported event is an exit, fork, vfork or exec, let
3739 GDB know. */
5a04c4cf
PA
3740
3741 /* Break the unreported fork relationship chain. */
3742 if (event_child->waitstatus.kind == TARGET_WAITKIND_FORKED
3743 || event_child->waitstatus.kind == TARGET_WAITKIND_VFORKED)
3744 {
3745 event_child->fork_relative->fork_relative = NULL;
3746 event_child->fork_relative = NULL;
3747 }
3748
00db26fa 3749 *ourstatus = event_child->waitstatus;
de0d863e
DB
3750 /* Clear the event lwp's waitstatus since we handled it already. */
3751 event_child->waitstatus.kind = TARGET_WAITKIND_IGNORE;
3752 }
3753 else
3754 ourstatus->kind = TARGET_WAITKIND_STOPPED;
5b1c542e 3755
582511be 3756 /* Now that we've selected our final event LWP, un-adjust its PC if
3e572f71
PA
3757 it was a software breakpoint, and the client doesn't know we can
3758 adjust the breakpoint ourselves. */
3759 if (event_child->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
c12a5089 3760 && !cs.swbreak_feature)
582511be
PA
3761 {
3762 int decr_pc = the_low_target.decr_pc_after_break;
3763
3764 if (decr_pc != 0)
3765 {
3766 struct regcache *regcache
3767 = get_thread_regcache (current_thread, 1);
3768 (*the_low_target.set_pc) (regcache, event_child->stop_pc + decr_pc);
3769 }
3770 }
3771
82075af2
JS
3772 if (WSTOPSIG (w) == SYSCALL_SIGTRAP)
3773 {
82075af2 3774 get_syscall_trapinfo (event_child,
4cc32bec 3775 &ourstatus->value.syscall_number);
82075af2
JS
3776 ourstatus->kind = event_child->syscall_state;
3777 }
3778 else if (current_thread->last_resume_kind == resume_stop
3779 && WSTOPSIG (w) == SIGSTOP)
bd99dc85
PA
3780 {
3781 /* A thread that has been requested to stop by GDB with vCont;t,
3782 and it stopped cleanly, so report as SIG0. The use of
3783 SIGSTOP is an implementation detail. */
a493e3e2 3784 ourstatus->value.sig = GDB_SIGNAL_0;
bd99dc85 3785 }
0bfdf32f 3786 else if (current_thread->last_resume_kind == resume_stop
8336d594 3787 && WSTOPSIG (w) != SIGSTOP)
bd99dc85
PA
3788 {
3789 /* A thread that has been requested to stop by GDB with vCont;t,
d50171e4 3790 but, it stopped for other reasons. */
2ea28649 3791 ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
bd99dc85 3792 }
de0d863e 3793 else if (ourstatus->kind == TARGET_WAITKIND_STOPPED)
bd99dc85 3794 {
2ea28649 3795 ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
bd99dc85
PA
3796 }
3797
d7e15655 3798 gdb_assert (step_over_bkpt == null_ptid);
d50171e4 3799
bd99dc85 3800 if (debug_threads)
87ce2a04
DE
3801 {
3802 debug_printf ("linux_wait_1 ret = %s, %d, %d\n",
0bfdf32f 3803 target_pid_to_str (ptid_of (current_thread)),
87ce2a04
DE
3804 ourstatus->kind, ourstatus->value.sig);
3805 debug_exit ();
3806 }
bd99dc85 3807
65706a29
PA
3808 if (ourstatus->kind == TARGET_WAITKIND_EXITED)
3809 return filter_exit_event (event_child, ourstatus);
3810
0bfdf32f 3811 return ptid_of (current_thread);
bd99dc85
PA
3812}
3813
3814/* Get rid of any pending event in the pipe. */
3815static void
3816async_file_flush (void)
3817{
3818 int ret;
3819 char buf;
3820
3821 do
3822 ret = read (linux_event_pipe[0], &buf, 1);
3823 while (ret >= 0 || (ret == -1 && errno == EINTR));
3824}
3825
3826/* Put something in the pipe, so the event loop wakes up. */
3827static void
3828async_file_mark (void)
3829{
3830 int ret;
3831
3832 async_file_flush ();
3833
3834 do
3835 ret = write (linux_event_pipe[1], "+", 1);
3836 while (ret == 0 || (ret == -1 && errno == EINTR));
3837
3838 /* Ignore EAGAIN. If the pipe is full, the event loop will already
3839 be awakened anyway. */
3840}
3841
6532e7e3
TBA
3842ptid_t
3843linux_process_target::wait (ptid_t ptid,
3844 target_waitstatus *ourstatus,
3845 int target_options)
bd99dc85 3846{
95954743 3847 ptid_t event_ptid;
bd99dc85 3848
bd99dc85
PA
3849 /* Flush the async file first. */
3850 if (target_is_async_p ())
3851 async_file_flush ();
3852
582511be
PA
3853 do
3854 {
3855 event_ptid = linux_wait_1 (ptid, ourstatus, target_options);
3856 }
3857 while ((target_options & TARGET_WNOHANG) == 0
d7e15655 3858 && event_ptid == null_ptid
582511be 3859 && ourstatus->kind == TARGET_WAITKIND_IGNORE);
bd99dc85
PA
3860
3861 /* If at least one stop was reported, there may be more. A single
3862 SIGCHLD can signal more than one child stop. */
3863 if (target_is_async_p ()
3864 && (target_options & TARGET_WNOHANG) != 0
d7e15655 3865 && event_ptid != null_ptid)
bd99dc85
PA
3866 async_file_mark ();
3867
3868 return event_ptid;
da6d8c04
DJ
3869}
3870
c5f62d5f 3871/* Send a signal to an LWP. */
fd500816
DJ
3872
3873static int
a1928bad 3874kill_lwp (unsigned long lwpid, int signo)
fd500816 3875{
4a6ed09b 3876 int ret;
fd500816 3877
4a6ed09b
PA
3878 errno = 0;
3879 ret = syscall (__NR_tkill, lwpid, signo);
3880 if (errno == ENOSYS)
3881 {
3882 /* If tkill fails, then we are not using nptl threads, a
3883 configuration we no longer support. */
3884 perror_with_name (("tkill"));
3885 }
3886 return ret;
fd500816
DJ
3887}
3888
964e4306
PA
3889void
3890linux_stop_lwp (struct lwp_info *lwp)
3891{
3892 send_sigstop (lwp);
3893}
3894
0d62e5e8 3895static void
02fc4de7 3896send_sigstop (struct lwp_info *lwp)
0d62e5e8 3897{
bd99dc85 3898 int pid;
0d62e5e8 3899
d86d4aaf 3900 pid = lwpid_of (get_lwp_thread (lwp));
bd99dc85 3901
0d62e5e8
DJ
3902 /* If we already have a pending stop signal for this process, don't
3903 send another. */
54a0b537 3904 if (lwp->stop_expected)
0d62e5e8 3905 {
ae13219e 3906 if (debug_threads)
87ce2a04 3907 debug_printf ("Have pending sigstop for lwp %d\n", pid);
ae13219e 3908
0d62e5e8
DJ
3909 return;
3910 }
3911
3912 if (debug_threads)
87ce2a04 3913 debug_printf ("Sending sigstop to lwp %d\n", pid);
0d62e5e8 3914
d50171e4 3915 lwp->stop_expected = 1;
bd99dc85 3916 kill_lwp (pid, SIGSTOP);
0d62e5e8
DJ
3917}
3918
df3e4dbe
SM
3919static void
3920send_sigstop (thread_info *thread, lwp_info *except)
02fc4de7 3921{
d86d4aaf 3922 struct lwp_info *lwp = get_thread_lwp (thread);
02fc4de7 3923
7984d532
PA
3924 /* Ignore EXCEPT. */
3925 if (lwp == except)
df3e4dbe 3926 return;
7984d532 3927
02fc4de7 3928 if (lwp->stopped)
df3e4dbe 3929 return;
02fc4de7
PA
3930
3931 send_sigstop (lwp);
7984d532
PA
3932}
3933
3934/* Increment the suspend count of an LWP, and stop it, if not stopped
3935 yet. */
df3e4dbe
SM
3936static void
3937suspend_and_send_sigstop (thread_info *thread, lwp_info *except)
7984d532 3938{
d86d4aaf 3939 struct lwp_info *lwp = get_thread_lwp (thread);
7984d532
PA
3940
3941 /* Ignore EXCEPT. */
3942 if (lwp == except)
df3e4dbe 3943 return;
7984d532 3944
863d01bd 3945 lwp_suspended_inc (lwp);
7984d532 3946
df3e4dbe 3947 send_sigstop (thread, except);
02fc4de7
PA
3948}
3949
95954743
PA
3950static void
3951mark_lwp_dead (struct lwp_info *lwp, int wstat)
3952{
95954743
PA
3953 /* Store the exit status for later. */
3954 lwp->status_pending_p = 1;
3955 lwp->status_pending = wstat;
3956
00db26fa
PA
3957 /* Store in waitstatus as well, as there's nothing else to process
3958 for this event. */
3959 if (WIFEXITED (wstat))
3960 {
3961 lwp->waitstatus.kind = TARGET_WAITKIND_EXITED;
3962 lwp->waitstatus.value.integer = WEXITSTATUS (wstat);
3963 }
3964 else if (WIFSIGNALED (wstat))
3965 {
3966 lwp->waitstatus.kind = TARGET_WAITKIND_SIGNALLED;
3967 lwp->waitstatus.value.sig = gdb_signal_from_host (WTERMSIG (wstat));
3968 }
3969
95954743
PA
3970 /* Prevent trying to stop it. */
3971 lwp->stopped = 1;
3972
3973 /* No further stops are expected from a dead lwp. */
3974 lwp->stop_expected = 0;
3975}
3976
00db26fa
PA
3977/* Return true if LWP has exited already, and has a pending exit event
3978 to report to GDB. */
3979
3980static int
3981lwp_is_marked_dead (struct lwp_info *lwp)
3982{
3983 return (lwp->status_pending_p
3984 && (WIFEXITED (lwp->status_pending)
3985 || WIFSIGNALED (lwp->status_pending)));
3986}
3987
fa96cb38
PA
3988/* Wait for all children to stop for the SIGSTOPs we just queued. */
3989
0d62e5e8 3990static void
fa96cb38 3991wait_for_sigstop (void)
0d62e5e8 3992{
0bfdf32f 3993 struct thread_info *saved_thread;
95954743 3994 ptid_t saved_tid;
fa96cb38
PA
3995 int wstat;
3996 int ret;
0d62e5e8 3997
0bfdf32f
GB
3998 saved_thread = current_thread;
3999 if (saved_thread != NULL)
9c80ecd6 4000 saved_tid = saved_thread->id;
bd99dc85 4001 else
95954743 4002 saved_tid = null_ptid; /* avoid bogus unused warning */
bd99dc85 4003
d50171e4 4004 if (debug_threads)
fa96cb38 4005 debug_printf ("wait_for_sigstop: pulling events\n");
d50171e4 4006
fa96cb38
PA
4007 /* Passing NULL_PTID as filter indicates we want all events to be
4008 left pending. Eventually this returns when there are no
4009 unwaited-for children left. */
4010 ret = linux_wait_for_event_filtered (minus_one_ptid, null_ptid,
4011 &wstat, __WALL);
4012 gdb_assert (ret == -1);
0d62e5e8 4013
13d3d99b 4014 if (saved_thread == NULL || mythread_alive (saved_tid))
0bfdf32f 4015 current_thread = saved_thread;
0d62e5e8
DJ
4016 else
4017 {
4018 if (debug_threads)
87ce2a04 4019 debug_printf ("Previously current thread died.\n");
0d62e5e8 4020
f0db101d
PA
4021 /* We can't change the current inferior behind GDB's back,
4022 otherwise, a subsequent command may apply to the wrong
4023 process. */
4024 current_thread = NULL;
0d62e5e8
DJ
4025 }
4026}
4027
fcb056a5 4028/* Returns true if THREAD is stopped in a jump pad, and we can't
fa593d66
PA
4029 move it out, because we need to report the stop event to GDB. For
4030 example, if the user puts a breakpoint in the jump pad, it's
4031 because she wants to debug it. */
4032
fcb056a5
SM
4033static bool
4034stuck_in_jump_pad_callback (thread_info *thread)
fa593d66 4035{
d86d4aaf 4036 struct lwp_info *lwp = get_thread_lwp (thread);
fa593d66 4037
863d01bd
PA
4038 if (lwp->suspended != 0)
4039 {
4040 internal_error (__FILE__, __LINE__,
4041 "LWP %ld is suspended, suspended=%d\n",
4042 lwpid_of (thread), lwp->suspended);
4043 }
fa593d66
PA
4044 gdb_assert (lwp->stopped);
4045
4046 /* Allow debugging the jump pad, gdb_collect, etc.. */
4047 return (supports_fast_tracepoints ()
58b4daa5 4048 && agent_loaded_p ()
fa593d66 4049 && (gdb_breakpoint_here (lwp->stop_pc)
15c66dd6 4050 || lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT
fa593d66 4051 || thread->last_resume_kind == resume_step)
229d26fc
SM
4052 && (linux_fast_tracepoint_collecting (lwp, NULL)
4053 != fast_tpoint_collect_result::not_collecting));
fa593d66
PA
4054}
4055
4056static void
9c80ecd6 4057move_out_of_jump_pad_callback (thread_info *thread)
fa593d66 4058{
f0ce0d3a 4059 struct thread_info *saved_thread;
d86d4aaf 4060 struct lwp_info *lwp = get_thread_lwp (thread);
fa593d66
PA
4061 int *wstat;
4062
863d01bd
PA
4063 if (lwp->suspended != 0)
4064 {
4065 internal_error (__FILE__, __LINE__,
4066 "LWP %ld is suspended, suspended=%d\n",
4067 lwpid_of (thread), lwp->suspended);
4068 }
fa593d66
PA
4069 gdb_assert (lwp->stopped);
4070
f0ce0d3a
PA
4071 /* For gdb_breakpoint_here. */
4072 saved_thread = current_thread;
4073 current_thread = thread;
4074
fa593d66
PA
4075 wstat = lwp->status_pending_p ? &lwp->status_pending : NULL;
4076
4077 /* Allow debugging the jump pad, gdb_collect, etc. */
4078 if (!gdb_breakpoint_here (lwp->stop_pc)
15c66dd6 4079 && lwp->stop_reason != TARGET_STOPPED_BY_WATCHPOINT
fa593d66
PA
4080 && thread->last_resume_kind != resume_step
4081 && maybe_move_out_of_jump_pad (lwp, wstat))
4082 {
4083 if (debug_threads)
87ce2a04 4084 debug_printf ("LWP %ld needs stabilizing (in jump pad)\n",
d86d4aaf 4085 lwpid_of (thread));
fa593d66
PA
4086
4087 if (wstat)
4088 {
4089 lwp->status_pending_p = 0;
4090 enqueue_one_deferred_signal (lwp, wstat);
4091
4092 if (debug_threads)
87ce2a04
DE
4093 debug_printf ("Signal %d for LWP %ld deferred "
4094 "(in jump pad)\n",
d86d4aaf 4095 WSTOPSIG (*wstat), lwpid_of (thread));
fa593d66
PA
4096 }
4097
4098 linux_resume_one_lwp (lwp, 0, 0, NULL);
4099 }
4100 else
863d01bd 4101 lwp_suspended_inc (lwp);
f0ce0d3a
PA
4102
4103 current_thread = saved_thread;
fa593d66
PA
4104}
4105
5a6b0a41
SM
4106static bool
4107lwp_running (thread_info *thread)
fa593d66 4108{
d86d4aaf 4109 struct lwp_info *lwp = get_thread_lwp (thread);
fa593d66 4110
00db26fa 4111 if (lwp_is_marked_dead (lwp))
5a6b0a41
SM
4112 return false;
4113
4114 return !lwp->stopped;
fa593d66
PA
4115}
4116
7984d532
PA
4117/* Stop all lwps that aren't stopped yet, except EXCEPT, if not NULL.
4118 If SUSPEND, then also increase the suspend count of every LWP,
4119 except EXCEPT. */
4120
0d62e5e8 4121static void
7984d532 4122stop_all_lwps (int suspend, struct lwp_info *except)
0d62e5e8 4123{
bde24c0a
PA
4124 /* Should not be called recursively. */
4125 gdb_assert (stopping_threads == NOT_STOPPING_THREADS);
4126
87ce2a04
DE
4127 if (debug_threads)
4128 {
4129 debug_enter ();
4130 debug_printf ("stop_all_lwps (%s, except=%s)\n",
4131 suspend ? "stop-and-suspend" : "stop",
4132 except != NULL
d86d4aaf 4133 ? target_pid_to_str (ptid_of (get_lwp_thread (except)))
87ce2a04
DE
4134 : "none");
4135 }
4136
bde24c0a
PA
4137 stopping_threads = (suspend
4138 ? STOPPING_AND_SUSPENDING_THREADS
4139 : STOPPING_THREADS);
7984d532
PA
4140
4141 if (suspend)
df3e4dbe
SM
4142 for_each_thread ([&] (thread_info *thread)
4143 {
4144 suspend_and_send_sigstop (thread, except);
4145 });
7984d532 4146 else
df3e4dbe
SM
4147 for_each_thread ([&] (thread_info *thread)
4148 {
4149 send_sigstop (thread, except);
4150 });
4151
fa96cb38 4152 wait_for_sigstop ();
bde24c0a 4153 stopping_threads = NOT_STOPPING_THREADS;
87ce2a04
DE
4154
4155 if (debug_threads)
4156 {
4157 debug_printf ("stop_all_lwps done, setting stopping_threads "
4158 "back to !stopping\n");
4159 debug_exit ();
4160 }
0d62e5e8
DJ
4161}
4162
863d01bd
PA
4163/* Enqueue one signal in the chain of signals which need to be
4164 delivered to this process on next resume. */
4165
4166static void
4167enqueue_pending_signal (struct lwp_info *lwp, int signal, siginfo_t *info)
4168{
8d749320 4169 struct pending_signals *p_sig = XNEW (struct pending_signals);
863d01bd 4170
863d01bd
PA
4171 p_sig->prev = lwp->pending_signals;
4172 p_sig->signal = signal;
4173 if (info == NULL)
4174 memset (&p_sig->info, 0, sizeof (siginfo_t));
4175 else
4176 memcpy (&p_sig->info, info, sizeof (siginfo_t));
4177 lwp->pending_signals = p_sig;
4178}
4179
fa5308bd
AT
4180/* Install breakpoints for software single stepping. */
4181
4182static void
4183install_software_single_step_breakpoints (struct lwp_info *lwp)
4184{
984a2c04
YQ
4185 struct thread_info *thread = get_lwp_thread (lwp);
4186 struct regcache *regcache = get_thread_regcache (thread, 1);
8ce47547
TT
4187
4188 scoped_restore save_current_thread = make_scoped_restore (&current_thread);
984a2c04 4189
984a2c04 4190 current_thread = thread;
a0ff9e1a 4191 std::vector<CORE_ADDR> next_pcs = the_low_target.get_next_pcs (regcache);
fa5308bd 4192
a0ff9e1a 4193 for (CORE_ADDR pc : next_pcs)
3b9a79ef 4194 set_single_step_breakpoint (pc, current_ptid);
fa5308bd
AT
4195}
4196
7fe5e27e
AT
4197/* Single step via hardware or software single step.
4198 Return 1 if hardware single stepping, 0 if software single stepping
4199 or can't single step. */
4200
4201static int
4202single_step (struct lwp_info* lwp)
4203{
4204 int step = 0;
4205
4206 if (can_hardware_single_step ())
4207 {
4208 step = 1;
4209 }
4210 else if (can_software_single_step ())
4211 {
4212 install_software_single_step_breakpoints (lwp);
4213 step = 0;
4214 }
4215 else
4216 {
4217 if (debug_threads)
4218 debug_printf ("stepping is not implemented on this target");
4219 }
4220
4221 return step;
4222}
4223
35ac8b3e 4224/* The signal can be delivered to the inferior if we are not trying to
5b061e98
YQ
4225 finish a fast tracepoint collect. Since signal can be delivered in
4226 the step-over, the program may go to signal handler and trap again
4227 after return from the signal handler. We can live with the spurious
4228 double traps. */
35ac8b3e
YQ
4229
4230static int
4231lwp_signal_can_be_delivered (struct lwp_info *lwp)
4232{
229d26fc
SM
4233 return (lwp->collecting_fast_tracepoint
4234 == fast_tpoint_collect_result::not_collecting);
35ac8b3e
YQ
4235}
4236
23f238d3
PA
4237/* Resume execution of LWP. If STEP is nonzero, single-step it. If
4238 SIGNAL is nonzero, give it that signal. */
da6d8c04 4239
ce3a066d 4240static void
23f238d3
PA
4241linux_resume_one_lwp_throw (struct lwp_info *lwp,
4242 int step, int signal, siginfo_t *info)
da6d8c04 4243{
d86d4aaf 4244 struct thread_info *thread = get_lwp_thread (lwp);
0bfdf32f 4245 struct thread_info *saved_thread;
82075af2 4246 int ptrace_request;
c06cbd92
YQ
4247 struct process_info *proc = get_thread_process (thread);
4248
4249 /* Note that target description may not be initialised
4250 (proc->tdesc == NULL) at this point because the program hasn't
4251 stopped at the first instruction yet. It means GDBserver skips
4252 the extra traps from the wrapper program (see option --wrapper).
4253 Code in this function that requires register access should be
4254 guarded by proc->tdesc == NULL or something else. */
0d62e5e8 4255
54a0b537 4256 if (lwp->stopped == 0)
0d62e5e8
DJ
4257 return;
4258
65706a29
PA
4259 gdb_assert (lwp->waitstatus.kind == TARGET_WAITKIND_IGNORE);
4260
229d26fc
SM
4261 fast_tpoint_collect_result fast_tp_collecting
4262 = lwp->collecting_fast_tracepoint;
fa593d66 4263
229d26fc
SM
4264 gdb_assert (!stabilizing_threads
4265 || (fast_tp_collecting
4266 != fast_tpoint_collect_result::not_collecting));
fa593d66 4267
219f2f23
PA
4268 /* Cancel actions that rely on GDB not changing the PC (e.g., the
4269 user used the "jump" command, or "set $pc = foo"). */
c06cbd92 4270 if (thread->while_stepping != NULL && lwp->stop_pc != get_pc (lwp))
219f2f23
PA
4271 {
4272 /* Collecting 'while-stepping' actions doesn't make sense
4273 anymore. */
d86d4aaf 4274 release_while_stepping_state_list (thread);
219f2f23
PA
4275 }
4276
0d62e5e8 4277 /* If we have pending signals or status, and a new signal, enqueue the
35ac8b3e
YQ
4278 signal. Also enqueue the signal if it can't be delivered to the
4279 inferior right now. */
0d62e5e8 4280 if (signal != 0
fa593d66
PA
4281 && (lwp->status_pending_p
4282 || lwp->pending_signals != NULL
35ac8b3e 4283 || !lwp_signal_can_be_delivered (lwp)))
94610ec4
YQ
4284 {
4285 enqueue_pending_signal (lwp, signal, info);
4286
4287 /* Postpone any pending signal. It was enqueued above. */
4288 signal = 0;
4289 }
0d62e5e8 4290
d50171e4
PA
4291 if (lwp->status_pending_p)
4292 {
4293 if (debug_threads)
94610ec4 4294 debug_printf ("Not resuming lwp %ld (%s, stop %s);"
87ce2a04 4295 " has pending status\n",
94610ec4 4296 lwpid_of (thread), step ? "step" : "continue",
87ce2a04 4297 lwp->stop_expected ? "expected" : "not expected");
d50171e4
PA
4298 return;
4299 }
0d62e5e8 4300
0bfdf32f
GB
4301 saved_thread = current_thread;
4302 current_thread = thread;
0d62e5e8 4303
0d62e5e8
DJ
4304 /* This bit needs some thinking about. If we get a signal that
4305 we must report while a single-step reinsert is still pending,
4306 we often end up resuming the thread. It might be better to
4307 (ew) allow a stack of pending events; then we could be sure that
4308 the reinsert happened right away and not lose any signals.
4309
4310 Making this stack would also shrink the window in which breakpoints are
54a0b537 4311 uninserted (see comment in linux_wait_for_lwp) but not enough for
0d62e5e8
DJ
4312 complete correctness, so it won't solve that problem. It may be
4313 worthwhile just to solve this one, however. */
54a0b537 4314 if (lwp->bp_reinsert != 0)
0d62e5e8
DJ
4315 {
4316 if (debug_threads)
87ce2a04
DE
4317 debug_printf (" pending reinsert at 0x%s\n",
4318 paddress (lwp->bp_reinsert));
d50171e4 4319
85e00e85 4320 if (can_hardware_single_step ())
d50171e4 4321 {
229d26fc 4322 if (fast_tp_collecting == fast_tpoint_collect_result::not_collecting)
fa593d66
PA
4323 {
4324 if (step == 0)
9986ba08 4325 warning ("BAD - reinserting but not stepping.");
fa593d66 4326 if (lwp->suspended)
9986ba08
PA
4327 warning ("BAD - reinserting and suspended(%d).",
4328 lwp->suspended);
fa593d66 4329 }
d50171e4 4330 }
f79b145d
YQ
4331
4332 step = maybe_hw_step (thread);
0d62e5e8
DJ
4333 }
4334
229d26fc 4335 if (fast_tp_collecting == fast_tpoint_collect_result::before_insn)
fa593d66
PA
4336 {
4337 if (debug_threads)
87ce2a04
DE
4338 debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad"
4339 " (exit-jump-pad-bkpt)\n",
d86d4aaf 4340 lwpid_of (thread));
fa593d66 4341 }
229d26fc 4342 else if (fast_tp_collecting == fast_tpoint_collect_result::at_insn)
fa593d66
PA
4343 {
4344 if (debug_threads)
87ce2a04
DE
4345 debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad"
4346 " single-stepping\n",
d86d4aaf 4347 lwpid_of (thread));
fa593d66
PA
4348
4349 if (can_hardware_single_step ())
4350 step = 1;
4351 else
38e08fca
GB
4352 {
4353 internal_error (__FILE__, __LINE__,
4354 "moving out of jump pad single-stepping"
4355 " not implemented on this target");
4356 }
fa593d66
PA
4357 }
4358
219f2f23
PA
4359 /* If we have while-stepping actions in this thread set it stepping.
4360 If we have a signal to deliver, it may or may not be set to
4361 SIG_IGN, we don't know. Assume so, and allow collecting
4362 while-stepping into a signal handler. A possible smart thing to
4363 do would be to set an internal breakpoint at the signal return
4364 address, continue, and carry on catching this while-stepping
4365 action only when that breakpoint is hit. A future
4366 enhancement. */
7fe5e27e 4367 if (thread->while_stepping != NULL)
219f2f23
PA
4368 {
4369 if (debug_threads)
87ce2a04 4370 debug_printf ("lwp %ld has a while-stepping action -> forcing step.\n",
d86d4aaf 4371 lwpid_of (thread));
7fe5e27e
AT
4372
4373 step = single_step (lwp);
219f2f23
PA
4374 }
4375
c06cbd92 4376 if (proc->tdesc != NULL && the_low_target.get_pc != NULL)
0d62e5e8 4377 {
0bfdf32f 4378 struct regcache *regcache = get_thread_regcache (current_thread, 1);
582511be
PA
4379
4380 lwp->stop_pc = (*the_low_target.get_pc) (regcache);
4381
4382 if (debug_threads)
4383 {
4384 debug_printf (" %s from pc 0x%lx\n", step ? "step" : "continue",
4385 (long) lwp->stop_pc);
4386 }
0d62e5e8
DJ
4387 }
4388
35ac8b3e
YQ
4389 /* If we have pending signals, consume one if it can be delivered to
4390 the inferior. */
4391 if (lwp->pending_signals != NULL && lwp_signal_can_be_delivered (lwp))
0d62e5e8
DJ
4392 {
4393 struct pending_signals **p_sig;
4394
54a0b537 4395 p_sig = &lwp->pending_signals;
0d62e5e8
DJ
4396 while ((*p_sig)->prev != NULL)
4397 p_sig = &(*p_sig)->prev;
4398
4399 signal = (*p_sig)->signal;
32ca6d61 4400 if ((*p_sig)->info.si_signo != 0)
d86d4aaf 4401 ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
56f7af9c 4402 &(*p_sig)->info);
32ca6d61 4403
0d62e5e8
DJ
4404 free (*p_sig);
4405 *p_sig = NULL;
4406 }
4407
94610ec4
YQ
4408 if (debug_threads)
4409 debug_printf ("Resuming lwp %ld (%s, signal %d, stop %s)\n",
4410 lwpid_of (thread), step ? "step" : "continue", signal,
4411 lwp->stop_expected ? "expected" : "not expected");
4412
aa5ca48f
DE
4413 if (the_low_target.prepare_to_resume != NULL)
4414 the_low_target.prepare_to_resume (lwp);
4415
d86d4aaf 4416 regcache_invalidate_thread (thread);
da6d8c04 4417 errno = 0;
54a0b537 4418 lwp->stepping = step;
82075af2
JS
4419 if (step)
4420 ptrace_request = PTRACE_SINGLESTEP;
4421 else if (gdb_catching_syscalls_p (lwp))
4422 ptrace_request = PTRACE_SYSCALL;
4423 else
4424 ptrace_request = PTRACE_CONT;
4425 ptrace (ptrace_request,
4426 lwpid_of (thread),
b8e1b30e 4427 (PTRACE_TYPE_ARG3) 0,
14ce3065
DE
4428 /* Coerce to a uintptr_t first to avoid potential gcc warning
4429 of coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e 4430 (PTRACE_TYPE_ARG4) (uintptr_t) signal);
0d62e5e8 4431
0bfdf32f 4432 current_thread = saved_thread;
da6d8c04 4433 if (errno)
23f238d3
PA
4434 perror_with_name ("resuming thread");
4435
4436 /* Successfully resumed. Clear state that no longer makes sense,
4437 and mark the LWP as running. Must not do this before resuming
4438 otherwise if that fails other code will be confused. E.g., we'd
4439 later try to stop the LWP and hang forever waiting for a stop
4440 status. Note that we must not throw after this is cleared,
4441 otherwise handle_zombie_lwp_error would get confused. */
4442 lwp->stopped = 0;
4443 lwp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
4444}
4445
4446/* Called when we try to resume a stopped LWP and that errors out. If
4447 the LWP is no longer in ptrace-stopped state (meaning it's zombie,
4448 or about to become), discard the error, clear any pending status
4449 the LWP may have, and return true (we'll collect the exit status
4450 soon enough). Otherwise, return false. */
4451
4452static int
4453check_ptrace_stopped_lwp_gone (struct lwp_info *lp)
4454{
4455 struct thread_info *thread = get_lwp_thread (lp);
4456
4457 /* If we get an error after resuming the LWP successfully, we'd
4458 confuse !T state for the LWP being gone. */
4459 gdb_assert (lp->stopped);
4460
4461 /* We can't just check whether the LWP is in 'Z (Zombie)' state,
4462 because even if ptrace failed with ESRCH, the tracee may be "not
4463 yet fully dead", but already refusing ptrace requests. In that
4464 case the tracee has 'R (Running)' state for a little bit
4465 (observed in Linux 3.18). See also the note on ESRCH in the
4466 ptrace(2) man page. Instead, check whether the LWP has any state
4467 other than ptrace-stopped. */
4468
4469 /* Don't assume anything if /proc/PID/status can't be read. */
4470 if (linux_proc_pid_is_trace_stopped_nowarn (lwpid_of (thread)) == 0)
3221518c 4471 {
23f238d3
PA
4472 lp->stop_reason = TARGET_STOPPED_BY_NO_REASON;
4473 lp->status_pending_p = 0;
4474 return 1;
4475 }
4476 return 0;
4477}
4478
4479/* Like linux_resume_one_lwp_throw, but no error is thrown if the LWP
4480 disappears while we try to resume it. */
3221518c 4481
23f238d3
PA
4482static void
4483linux_resume_one_lwp (struct lwp_info *lwp,
4484 int step, int signal, siginfo_t *info)
4485{
a70b8144 4486 try
23f238d3
PA
4487 {
4488 linux_resume_one_lwp_throw (lwp, step, signal, info);
4489 }
230d2906 4490 catch (const gdb_exception_error &ex)
23f238d3
PA
4491 {
4492 if (!check_ptrace_stopped_lwp_gone (lwp))
eedc3f4f 4493 throw;
3221518c 4494 }
da6d8c04
DJ
4495}
4496
5fdda392
SM
4497/* This function is called once per thread via for_each_thread.
4498 We look up which resume request applies to THREAD and mark it with a
4499 pointer to the appropriate resume request.
5544ad89
DJ
4500
4501 This algorithm is O(threads * resume elements), but resume elements
4502 is small (and will remain small at least until GDB supports thread
4503 suspension). */
ebcf782c 4504
5fdda392
SM
4505static void
4506linux_set_resume_request (thread_info *thread, thread_resume *resume, size_t n)
0d62e5e8 4507{
d86d4aaf 4508 struct lwp_info *lwp = get_thread_lwp (thread);
64386c31 4509
5fdda392 4510 for (int ndx = 0; ndx < n; ndx++)
95954743 4511 {
5fdda392 4512 ptid_t ptid = resume[ndx].thread;
d7e15655 4513 if (ptid == minus_one_ptid
9c80ecd6 4514 || ptid == thread->id
0c9070b3
YQ
4515 /* Handle both 'pPID' and 'pPID.-1' as meaning 'all threads
4516 of PID'. */
e99b03dc 4517 || (ptid.pid () == pid_of (thread)
0e998d96 4518 && (ptid.is_pid ()
e38504b3 4519 || ptid.lwp () == -1)))
95954743 4520 {
5fdda392 4521 if (resume[ndx].kind == resume_stop
8336d594 4522 && thread->last_resume_kind == resume_stop)
d50171e4
PA
4523 {
4524 if (debug_threads)
87ce2a04
DE
4525 debug_printf ("already %s LWP %ld at GDB's request\n",
4526 (thread->last_status.kind
4527 == TARGET_WAITKIND_STOPPED)
4528 ? "stopped"
4529 : "stopping",
d86d4aaf 4530 lwpid_of (thread));
d50171e4
PA
4531
4532 continue;
4533 }
4534
5a04c4cf
PA
4535 /* Ignore (wildcard) resume requests for already-resumed
4536 threads. */
5fdda392 4537 if (resume[ndx].kind != resume_stop
5a04c4cf
PA
4538 && thread->last_resume_kind != resume_stop)
4539 {
4540 if (debug_threads)
4541 debug_printf ("already %s LWP %ld at GDB's request\n",
4542 (thread->last_resume_kind
4543 == resume_step)
4544 ? "stepping"
4545 : "continuing",
4546 lwpid_of (thread));
4547 continue;
4548 }
4549
4550 /* Don't let wildcard resumes resume fork children that GDB
4551 does not yet know are new fork children. */
4552 if (lwp->fork_relative != NULL)
4553 {
5a04c4cf
PA
4554 struct lwp_info *rel = lwp->fork_relative;
4555
4556 if (rel->status_pending_p
4557 && (rel->waitstatus.kind == TARGET_WAITKIND_FORKED
4558 || rel->waitstatus.kind == TARGET_WAITKIND_VFORKED))
4559 {
4560 if (debug_threads)
4561 debug_printf ("not resuming LWP %ld: has queued stop reply\n",
4562 lwpid_of (thread));
4563 continue;
4564 }
4565 }
4566
4567 /* If the thread has a pending event that has already been
4568 reported to GDBserver core, but GDB has not pulled the
4569 event out of the vStopped queue yet, likewise, ignore the
4570 (wildcard) resume request. */
9c80ecd6 4571 if (in_queued_stop_replies (thread->id))
5a04c4cf
PA
4572 {
4573 if (debug_threads)
4574 debug_printf ("not resuming LWP %ld: has queued stop reply\n",
4575 lwpid_of (thread));
4576 continue;
4577 }
4578
5fdda392 4579 lwp->resume = &resume[ndx];
8336d594 4580 thread->last_resume_kind = lwp->resume->kind;
fa593d66 4581
c2d6af84
PA
4582 lwp->step_range_start = lwp->resume->step_range_start;
4583 lwp->step_range_end = lwp->resume->step_range_end;
4584
fa593d66
PA
4585 /* If we had a deferred signal to report, dequeue one now.
4586 This can happen if LWP gets more than one signal while
4587 trying to get out of a jump pad. */
4588 if (lwp->stopped
4589 && !lwp->status_pending_p
4590 && dequeue_one_deferred_signal (lwp, &lwp->status_pending))
4591 {
4592 lwp->status_pending_p = 1;
4593
4594 if (debug_threads)
87ce2a04
DE
4595 debug_printf ("Dequeueing deferred signal %d for LWP %ld, "
4596 "leaving status pending.\n",
d86d4aaf
DE
4597 WSTOPSIG (lwp->status_pending),
4598 lwpid_of (thread));
fa593d66
PA
4599 }
4600
5fdda392 4601 return;
95954743
PA
4602 }
4603 }
2bd7c093
PA
4604
4605 /* No resume action for this thread. */
4606 lwp->resume = NULL;
5544ad89
DJ
4607}
4608
8f86d7aa
SM
4609/* find_thread callback for linux_resume. Return true if this lwp has an
4610 interesting status pending. */
5544ad89 4611
25c28b4d
SM
4612static bool
4613resume_status_pending_p (thread_info *thread)
5544ad89 4614{
d86d4aaf 4615 struct lwp_info *lwp = get_thread_lwp (thread);
5544ad89 4616
bd99dc85
PA
4617 /* LWPs which will not be resumed are not interesting, because
4618 we might not wait for them next time through linux_wait. */
2bd7c093 4619 if (lwp->resume == NULL)
25c28b4d 4620 return false;
64386c31 4621
25c28b4d 4622 return thread_still_has_status_pending_p (thread);
d50171e4
PA
4623}
4624
4625/* Return 1 if this lwp that GDB wants running is stopped at an
4626 internal breakpoint that we need to step over. It assumes that any
4627 required STOP_PC adjustment has already been propagated to the
4628 inferior's regcache. */
4629
eca55aec
SM
4630static bool
4631need_step_over_p (thread_info *thread)
d50171e4 4632{
d86d4aaf 4633 struct lwp_info *lwp = get_thread_lwp (thread);
0bfdf32f 4634 struct thread_info *saved_thread;
d50171e4 4635 CORE_ADDR pc;
c06cbd92
YQ
4636 struct process_info *proc = get_thread_process (thread);
4637
4638 /* GDBserver is skipping the extra traps from the wrapper program,
4639 don't have to do step over. */
4640 if (proc->tdesc == NULL)
eca55aec 4641 return false;
d50171e4
PA
4642
4643 /* LWPs which will not be resumed are not interesting, because we
4644 might not wait for them next time through linux_wait. */
4645
4646 if (!lwp->stopped)
4647 {
4648 if (debug_threads)
87ce2a04 4649 debug_printf ("Need step over [LWP %ld]? Ignoring, not stopped\n",
d86d4aaf 4650 lwpid_of (thread));
eca55aec 4651 return false;
d50171e4
PA
4652 }
4653
8336d594 4654 if (thread->last_resume_kind == resume_stop)
d50171e4
PA
4655 {
4656 if (debug_threads)
87ce2a04
DE
4657 debug_printf ("Need step over [LWP %ld]? Ignoring, should remain"
4658 " stopped\n",
d86d4aaf 4659 lwpid_of (thread));
eca55aec 4660 return false;
d50171e4
PA
4661 }
4662
7984d532
PA
4663 gdb_assert (lwp->suspended >= 0);
4664
4665 if (lwp->suspended)
4666 {
4667 if (debug_threads)
87ce2a04 4668 debug_printf ("Need step over [LWP %ld]? Ignoring, suspended\n",
d86d4aaf 4669 lwpid_of (thread));
eca55aec 4670 return false;
7984d532
PA
4671 }
4672
bd99dc85 4673 if (lwp->status_pending_p)
d50171e4
PA
4674 {
4675 if (debug_threads)
87ce2a04
DE
4676 debug_printf ("Need step over [LWP %ld]? Ignoring, has pending"
4677 " status.\n",
d86d4aaf 4678 lwpid_of (thread));
eca55aec 4679 return false;
d50171e4
PA
4680 }
4681
4682 /* Note: PC, not STOP_PC. Either GDB has adjusted the PC already,
4683 or we have. */
4684 pc = get_pc (lwp);
4685
4686 /* If the PC has changed since we stopped, then don't do anything,
4687 and let the breakpoint/tracepoint be hit. This happens if, for
4688 instance, GDB handled the decr_pc_after_break subtraction itself,
4689 GDB is OOL stepping this thread, or the user has issued a "jump"
4690 command, or poked thread's registers herself. */
4691 if (pc != lwp->stop_pc)
4692 {
4693 if (debug_threads)
87ce2a04
DE
4694 debug_printf ("Need step over [LWP %ld]? Cancelling, PC was changed. "
4695 "Old stop_pc was 0x%s, PC is now 0x%s\n",
d86d4aaf
DE
4696 lwpid_of (thread),
4697 paddress (lwp->stop_pc), paddress (pc));
eca55aec 4698 return false;
d50171e4
PA
4699 }
4700
484b3c32
YQ
4701 /* On software single step target, resume the inferior with signal
4702 rather than stepping over. */
4703 if (can_software_single_step ()
4704 && lwp->pending_signals != NULL
4705 && lwp_signal_can_be_delivered (lwp))
4706 {
4707 if (debug_threads)
4708 debug_printf ("Need step over [LWP %ld]? Ignoring, has pending"
4709 " signals.\n",
4710 lwpid_of (thread));
4711
eca55aec 4712 return false;
484b3c32
YQ
4713 }
4714
0bfdf32f
GB
4715 saved_thread = current_thread;
4716 current_thread = thread;
d50171e4 4717
8b07ae33 4718 /* We can only step over breakpoints we know about. */
fa593d66 4719 if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc))
d50171e4 4720 {
8b07ae33 4721 /* Don't step over a breakpoint that GDB expects to hit
9f3a5c85
LM
4722 though. If the condition is being evaluated on the target's side
4723 and it evaluate to false, step over this breakpoint as well. */
4724 if (gdb_breakpoint_here (pc)
d3ce09f5
SS
4725 && gdb_condition_true_at_breakpoint (pc)
4726 && gdb_no_commands_at_breakpoint (pc))
8b07ae33
PA
4727 {
4728 if (debug_threads)
87ce2a04
DE
4729 debug_printf ("Need step over [LWP %ld]? yes, but found"
4730 " GDB breakpoint at 0x%s; skipping step over\n",
d86d4aaf 4731 lwpid_of (thread), paddress (pc));
d50171e4 4732
0bfdf32f 4733 current_thread = saved_thread;
eca55aec 4734 return false;
8b07ae33
PA
4735 }
4736 else
4737 {
4738 if (debug_threads)
87ce2a04
DE
4739 debug_printf ("Need step over [LWP %ld]? yes, "
4740 "found breakpoint at 0x%s\n",
d86d4aaf 4741 lwpid_of (thread), paddress (pc));
d50171e4 4742
8b07ae33 4743 /* We've found an lwp that needs stepping over --- return 1 so
8f86d7aa 4744 that find_thread stops looking. */
0bfdf32f 4745 current_thread = saved_thread;
8b07ae33 4746
eca55aec 4747 return true;
8b07ae33 4748 }
d50171e4
PA
4749 }
4750
0bfdf32f 4751 current_thread = saved_thread;
d50171e4
PA
4752
4753 if (debug_threads)
87ce2a04
DE
4754 debug_printf ("Need step over [LWP %ld]? No, no breakpoint found"
4755 " at 0x%s\n",
d86d4aaf 4756 lwpid_of (thread), paddress (pc));
c6ecbae5 4757
eca55aec 4758 return false;
5544ad89
DJ
4759}
4760
d50171e4
PA
4761/* Start a step-over operation on LWP. When LWP stopped at a
4762 breakpoint, to make progress, we need to remove the breakpoint out
4763 of the way. If we let other threads run while we do that, they may
4764 pass by the breakpoint location and miss hitting it. To avoid
4765 that, a step-over momentarily stops all threads while LWP is
c40c8d4b
YQ
4766 single-stepped by either hardware or software while the breakpoint
4767 is temporarily uninserted from the inferior. When the single-step
4768 finishes, we reinsert the breakpoint, and let all threads that are
4769 supposed to be running, run again. */
d50171e4
PA
4770
4771static int
4772start_step_over (struct lwp_info *lwp)
4773{
d86d4aaf 4774 struct thread_info *thread = get_lwp_thread (lwp);
0bfdf32f 4775 struct thread_info *saved_thread;
d50171e4
PA
4776 CORE_ADDR pc;
4777 int step;
4778
4779 if (debug_threads)
87ce2a04 4780 debug_printf ("Starting step-over on LWP %ld. Stopping all threads\n",
d86d4aaf 4781 lwpid_of (thread));
d50171e4 4782
7984d532 4783 stop_all_lwps (1, lwp);
863d01bd
PA
4784
4785 if (lwp->suspended != 0)
4786 {
4787 internal_error (__FILE__, __LINE__,
4788 "LWP %ld suspended=%d\n", lwpid_of (thread),
4789 lwp->suspended);
4790 }
d50171e4
PA
4791
4792 if (debug_threads)
87ce2a04 4793 debug_printf ("Done stopping all threads for step-over.\n");
d50171e4
PA
4794
4795 /* Note, we should always reach here with an already adjusted PC,
4796 either by GDB (if we're resuming due to GDB's request), or by our
4797 caller, if we just finished handling an internal breakpoint GDB
4798 shouldn't care about. */
4799 pc = get_pc (lwp);
4800
0bfdf32f
GB
4801 saved_thread = current_thread;
4802 current_thread = thread;
d50171e4
PA
4803
4804 lwp->bp_reinsert = pc;
4805 uninsert_breakpoints_at (pc);
fa593d66 4806 uninsert_fast_tracepoint_jumps_at (pc);
d50171e4 4807
7fe5e27e 4808 step = single_step (lwp);
d50171e4 4809
0bfdf32f 4810 current_thread = saved_thread;
d50171e4
PA
4811
4812 linux_resume_one_lwp (lwp, step, 0, NULL);
4813
4814 /* Require next event from this LWP. */
9c80ecd6 4815 step_over_bkpt = thread->id;
d50171e4
PA
4816 return 1;
4817}
4818
4819/* Finish a step-over. Reinsert the breakpoint we had uninserted in
3b9a79ef 4820 start_step_over, if still there, and delete any single-step
d50171e4
PA
4821 breakpoints we've set, on non hardware single-step targets. */
4822
4823static int
4824finish_step_over (struct lwp_info *lwp)
4825{
4826 if (lwp->bp_reinsert != 0)
4827 {
f79b145d
YQ
4828 struct thread_info *saved_thread = current_thread;
4829
d50171e4 4830 if (debug_threads)
87ce2a04 4831 debug_printf ("Finished step over.\n");
d50171e4 4832
f79b145d
YQ
4833 current_thread = get_lwp_thread (lwp);
4834
d50171e4
PA
4835 /* Reinsert any breakpoint at LWP->BP_REINSERT. Note that there
4836 may be no breakpoint to reinsert there by now. */
4837 reinsert_breakpoints_at (lwp->bp_reinsert);
fa593d66 4838 reinsert_fast_tracepoint_jumps_at (lwp->bp_reinsert);
d50171e4
PA
4839
4840 lwp->bp_reinsert = 0;
4841
3b9a79ef
YQ
4842 /* Delete any single-step breakpoints. No longer needed. We
4843 don't have to worry about other threads hitting this trap,
4844 and later not being able to explain it, because we were
4845 stepping over a breakpoint, and we hold all threads but
4846 LWP stopped while doing that. */
d50171e4 4847 if (!can_hardware_single_step ())
f79b145d 4848 {
3b9a79ef
YQ
4849 gdb_assert (has_single_step_breakpoints (current_thread));
4850 delete_single_step_breakpoints (current_thread);
f79b145d 4851 }
d50171e4
PA
4852
4853 step_over_bkpt = null_ptid;
f79b145d 4854 current_thread = saved_thread;
d50171e4
PA
4855 return 1;
4856 }
4857 else
4858 return 0;
4859}
4860
863d01bd
PA
4861/* If there's a step over in progress, wait until all threads stop
4862 (that is, until the stepping thread finishes its step), and
4863 unsuspend all lwps. The stepping thread ends with its status
4864 pending, which is processed later when we get back to processing
4865 events. */
4866
4867static void
4868complete_ongoing_step_over (void)
4869{
d7e15655 4870 if (step_over_bkpt != null_ptid)
863d01bd
PA
4871 {
4872 struct lwp_info *lwp;
4873 int wstat;
4874 int ret;
4875
4876 if (debug_threads)
4877 debug_printf ("detach: step over in progress, finish it first\n");
4878
4879 /* Passing NULL_PTID as filter indicates we want all events to
4880 be left pending. Eventually this returns when there are no
4881 unwaited-for children left. */
4882 ret = linux_wait_for_event_filtered (minus_one_ptid, null_ptid,
4883 &wstat, __WALL);
4884 gdb_assert (ret == -1);
4885
4886 lwp = find_lwp_pid (step_over_bkpt);
4887 if (lwp != NULL)
4888 finish_step_over (lwp);
4889 step_over_bkpt = null_ptid;
4890 unsuspend_all_lwps (lwp);
4891 }
4892}
4893
5544ad89
DJ
4894/* This function is called once per thread. We check the thread's resume
4895 request, which will tell us whether to resume, step, or leave the thread
bd99dc85 4896 stopped; and what signal, if any, it should be sent.
5544ad89 4897
bd99dc85
PA
4898 For threads which we aren't explicitly told otherwise, we preserve
4899 the stepping flag; this is used for stepping over gdbserver-placed
4900 breakpoints.
4901
4902 If pending_flags was set in any thread, we queue any needed
4903 signals, since we won't actually resume. We already have a pending
4904 event to report, so we don't need to preserve any step requests;
4905 they should be re-issued if necessary. */
4906
c80825ff
SM
4907static void
4908linux_resume_one_thread (thread_info *thread, bool leave_all_stopped)
5544ad89 4909{
d86d4aaf 4910 struct lwp_info *lwp = get_thread_lwp (thread);
d50171e4 4911 int leave_pending;
5544ad89 4912
2bd7c093 4913 if (lwp->resume == NULL)
c80825ff 4914 return;
5544ad89 4915
bd99dc85 4916 if (lwp->resume->kind == resume_stop)
5544ad89 4917 {
bd99dc85 4918 if (debug_threads)
d86d4aaf 4919 debug_printf ("resume_stop request for LWP %ld\n", lwpid_of (thread));
bd99dc85
PA
4920
4921 if (!lwp->stopped)
4922 {
4923 if (debug_threads)
d86d4aaf 4924 debug_printf ("stopping LWP %ld\n", lwpid_of (thread));
bd99dc85 4925
d50171e4
PA
4926 /* Stop the thread, and wait for the event asynchronously,
4927 through the event loop. */
02fc4de7 4928 send_sigstop (lwp);
bd99dc85
PA
4929 }
4930 else
4931 {
4932 if (debug_threads)
87ce2a04 4933 debug_printf ("already stopped LWP %ld\n",
d86d4aaf 4934 lwpid_of (thread));
d50171e4
PA
4935
4936 /* The LWP may have been stopped in an internal event that
4937 was not meant to be notified back to GDB (e.g., gdbserver
4938 breakpoint), so we should be reporting a stop event in
4939 this case too. */
4940
4941 /* If the thread already has a pending SIGSTOP, this is a
4942 no-op. Otherwise, something later will presumably resume
4943 the thread and this will cause it to cancel any pending
4944 operation, due to last_resume_kind == resume_stop. If
4945 the thread already has a pending status to report, we
4946 will still report it the next time we wait - see
4947 status_pending_p_callback. */
1a981360
PA
4948
4949 /* If we already have a pending signal to report, then
4950 there's no need to queue a SIGSTOP, as this means we're
4951 midway through moving the LWP out of the jumppad, and we
4952 will report the pending signal as soon as that is
4953 finished. */
4954 if (lwp->pending_signals_to_report == NULL)
4955 send_sigstop (lwp);
bd99dc85 4956 }
32ca6d61 4957
bd99dc85
PA
4958 /* For stop requests, we're done. */
4959 lwp->resume = NULL;
fc7238bb 4960 thread->last_status.kind = TARGET_WAITKIND_IGNORE;
c80825ff 4961 return;
5544ad89
DJ
4962 }
4963
bd99dc85 4964 /* If this thread which is about to be resumed has a pending status,
863d01bd
PA
4965 then don't resume it - we can just report the pending status.
4966 Likewise if it is suspended, because e.g., another thread is
4967 stepping past a breakpoint. Make sure to queue any signals that
4968 would otherwise be sent. In all-stop mode, we do this decision
4969 based on if *any* thread has a pending status. If there's a
4970 thread that needs the step-over-breakpoint dance, then don't
4971 resume any other thread but that particular one. */
4972 leave_pending = (lwp->suspended
4973 || lwp->status_pending_p
4974 || leave_all_stopped);
5544ad89 4975
0e9a339e
YQ
4976 /* If we have a new signal, enqueue the signal. */
4977 if (lwp->resume->sig != 0)
4978 {
4979 siginfo_t info, *info_p;
4980
4981 /* If this is the same signal we were previously stopped by,
4982 make sure to queue its siginfo. */
4983 if (WIFSTOPPED (lwp->last_status)
4984 && WSTOPSIG (lwp->last_status) == lwp->resume->sig
4985 && ptrace (PTRACE_GETSIGINFO, lwpid_of (thread),
4986 (PTRACE_TYPE_ARG3) 0, &info) == 0)
4987 info_p = &info;
4988 else
4989 info_p = NULL;
4990
4991 enqueue_pending_signal (lwp, lwp->resume->sig, info_p);
4992 }
4993
d50171e4 4994 if (!leave_pending)
bd99dc85
PA
4995 {
4996 if (debug_threads)
d86d4aaf 4997 debug_printf ("resuming LWP %ld\n", lwpid_of (thread));
5544ad89 4998
9c80ecd6 4999 proceed_one_lwp (thread, NULL);
bd99dc85
PA
5000 }
5001 else
5002 {
5003 if (debug_threads)
d86d4aaf 5004 debug_printf ("leaving LWP %ld stopped\n", lwpid_of (thread));
bd99dc85 5005 }
5544ad89 5006
fc7238bb 5007 thread->last_status.kind = TARGET_WAITKIND_IGNORE;
bd99dc85 5008 lwp->resume = NULL;
0d62e5e8
DJ
5009}
5010
0e4d7e35
TBA
5011void
5012linux_process_target::resume (thread_resume *resume_info, size_t n)
0d62e5e8 5013{
d86d4aaf 5014 struct thread_info *need_step_over = NULL;
c6ecbae5 5015
87ce2a04
DE
5016 if (debug_threads)
5017 {
5018 debug_enter ();
5019 debug_printf ("linux_resume:\n");
5020 }
5021
5fdda392
SM
5022 for_each_thread ([&] (thread_info *thread)
5023 {
5024 linux_set_resume_request (thread, resume_info, n);
5025 });
5544ad89 5026
d50171e4
PA
5027 /* If there is a thread which would otherwise be resumed, which has
5028 a pending status, then don't resume any threads - we can just
5029 report the pending status. Make sure to queue any signals that
5030 would otherwise be sent. In non-stop mode, we'll apply this
5031 logic to each thread individually. We consume all pending events
5032 before considering to start a step-over (in all-stop). */
25c28b4d 5033 bool any_pending = false;
bd99dc85 5034 if (!non_stop)
25c28b4d 5035 any_pending = find_thread (resume_status_pending_p) != NULL;
d50171e4
PA
5036
5037 /* If there is a thread which would otherwise be resumed, which is
5038 stopped at a breakpoint that needs stepping over, then don't
5039 resume any threads - have it step over the breakpoint with all
5040 other threads stopped, then resume all threads again. Make sure
5041 to queue any signals that would otherwise be delivered or
5042 queued. */
5043 if (!any_pending && supports_breakpoints ())
eca55aec 5044 need_step_over = find_thread (need_step_over_p);
d50171e4 5045
c80825ff 5046 bool leave_all_stopped = (need_step_over != NULL || any_pending);
d50171e4
PA
5047
5048 if (debug_threads)
5049 {
5050 if (need_step_over != NULL)
87ce2a04 5051 debug_printf ("Not resuming all, need step over\n");
d50171e4 5052 else if (any_pending)
87ce2a04
DE
5053 debug_printf ("Not resuming, all-stop and found "
5054 "an LWP with pending status\n");
d50171e4 5055 else
87ce2a04 5056 debug_printf ("Resuming, no pending status or step over needed\n");
d50171e4
PA
5057 }
5058
5059 /* Even if we're leaving threads stopped, queue all signals we'd
5060 otherwise deliver. */
c80825ff
SM
5061 for_each_thread ([&] (thread_info *thread)
5062 {
5063 linux_resume_one_thread (thread, leave_all_stopped);
5064 });
d50171e4
PA
5065
5066 if (need_step_over)
d86d4aaf 5067 start_step_over (get_thread_lwp (need_step_over));
87ce2a04
DE
5068
5069 if (debug_threads)
5070 {
5071 debug_printf ("linux_resume done\n");
5072 debug_exit ();
5073 }
1bebeeca
PA
5074
5075 /* We may have events that were pending that can/should be sent to
5076 the client now. Trigger a linux_wait call. */
5077 if (target_is_async_p ())
5078 async_file_mark ();
d50171e4
PA
5079}
5080
5081/* This function is called once per thread. We check the thread's
5082 last resume request, which will tell us whether to resume, step, or
5083 leave the thread stopped. Any signal the client requested to be
5084 delivered has already been enqueued at this point.
5085
5086 If any thread that GDB wants running is stopped at an internal
5087 breakpoint that needs stepping over, we start a step-over operation
5088 on that particular thread, and leave all others stopped. */
5089
e2b44075
SM
5090static void
5091proceed_one_lwp (thread_info *thread, lwp_info *except)
d50171e4 5092{
d86d4aaf 5093 struct lwp_info *lwp = get_thread_lwp (thread);
d50171e4
PA
5094 int step;
5095
7984d532 5096 if (lwp == except)
e2b44075 5097 return;
d50171e4
PA
5098
5099 if (debug_threads)
d86d4aaf 5100 debug_printf ("proceed_one_lwp: lwp %ld\n", lwpid_of (thread));
d50171e4
PA
5101
5102 if (!lwp->stopped)
5103 {
5104 if (debug_threads)
d86d4aaf 5105 debug_printf (" LWP %ld already running\n", lwpid_of (thread));
e2b44075 5106 return;
d50171e4
PA
5107 }
5108
02fc4de7
PA
5109 if (thread->last_resume_kind == resume_stop
5110 && thread->last_status.kind != TARGET_WAITKIND_IGNORE)
d50171e4
PA
5111 {
5112 if (debug_threads)
87ce2a04 5113 debug_printf (" client wants LWP to remain %ld stopped\n",
d86d4aaf 5114 lwpid_of (thread));
e2b44075 5115 return;
d50171e4
PA
5116 }
5117
5118 if (lwp->status_pending_p)
5119 {
5120 if (debug_threads)
87ce2a04 5121 debug_printf (" LWP %ld has pending status, leaving stopped\n",
d86d4aaf 5122 lwpid_of (thread));
e2b44075 5123 return;
d50171e4
PA
5124 }
5125
7984d532
PA
5126 gdb_assert (lwp->suspended >= 0);
5127
d50171e4
PA
5128 if (lwp->suspended)
5129 {
5130 if (debug_threads)
d86d4aaf 5131 debug_printf (" LWP %ld is suspended\n", lwpid_of (thread));
e2b44075 5132 return;
d50171e4
PA
5133 }
5134
1a981360
PA
5135 if (thread->last_resume_kind == resume_stop
5136 && lwp->pending_signals_to_report == NULL
229d26fc
SM
5137 && (lwp->collecting_fast_tracepoint
5138 == fast_tpoint_collect_result::not_collecting))
02fc4de7
PA
5139 {
5140 /* We haven't reported this LWP as stopped yet (otherwise, the
5141 last_status.kind check above would catch it, and we wouldn't
5142 reach here. This LWP may have been momentarily paused by a
5143 stop_all_lwps call while handling for example, another LWP's
5144 step-over. In that case, the pending expected SIGSTOP signal
5145 that was queued at vCont;t handling time will have already
5146 been consumed by wait_for_sigstop, and so we need to requeue
5147 another one here. Note that if the LWP already has a SIGSTOP
5148 pending, this is a no-op. */
5149
5150 if (debug_threads)
87ce2a04
DE
5151 debug_printf ("Client wants LWP %ld to stop. "
5152 "Making sure it has a SIGSTOP pending\n",
d86d4aaf 5153 lwpid_of (thread));
02fc4de7
PA
5154
5155 send_sigstop (lwp);
5156 }
5157
863d01bd
PA
5158 if (thread->last_resume_kind == resume_step)
5159 {
5160 if (debug_threads)
5161 debug_printf (" stepping LWP %ld, client wants it stepping\n",
5162 lwpid_of (thread));
8901d193 5163
3b9a79ef 5164 /* If resume_step is requested by GDB, install single-step
8901d193 5165 breakpoints when the thread is about to be actually resumed if
3b9a79ef
YQ
5166 the single-step breakpoints weren't removed. */
5167 if (can_software_single_step ()
5168 && !has_single_step_breakpoints (thread))
8901d193
YQ
5169 install_software_single_step_breakpoints (lwp);
5170
5171 step = maybe_hw_step (thread);
863d01bd
PA
5172 }
5173 else if (lwp->bp_reinsert != 0)
5174 {
5175 if (debug_threads)
5176 debug_printf (" stepping LWP %ld, reinsert set\n",
5177 lwpid_of (thread));
f79b145d
YQ
5178
5179 step = maybe_hw_step (thread);
863d01bd
PA
5180 }
5181 else
5182 step = 0;
5183
d50171e4 5184 linux_resume_one_lwp (lwp, step, 0, NULL);
7984d532
PA
5185}
5186
e2b44075
SM
5187static void
5188unsuspend_and_proceed_one_lwp (thread_info *thread, lwp_info *except)
7984d532 5189{
d86d4aaf 5190 struct lwp_info *lwp = get_thread_lwp (thread);
7984d532
PA
5191
5192 if (lwp == except)
e2b44075 5193 return;
7984d532 5194
863d01bd 5195 lwp_suspended_decr (lwp);
7984d532 5196
e2b44075 5197 proceed_one_lwp (thread, except);
d50171e4
PA
5198}
5199
5200/* When we finish a step-over, set threads running again. If there's
5201 another thread that may need a step-over, now's the time to start
5202 it. Eventually, we'll move all threads past their breakpoints. */
5203
5204static void
5205proceed_all_lwps (void)
5206{
d86d4aaf 5207 struct thread_info *need_step_over;
d50171e4
PA
5208
5209 /* If there is a thread which would otherwise be resumed, which is
5210 stopped at a breakpoint that needs stepping over, then don't
5211 resume any threads - have it step over the breakpoint with all
5212 other threads stopped, then resume all threads again. */
5213
5214 if (supports_breakpoints ())
5215 {
eca55aec 5216 need_step_over = find_thread (need_step_over_p);
d50171e4
PA
5217
5218 if (need_step_over != NULL)
5219 {
5220 if (debug_threads)
87ce2a04
DE
5221 debug_printf ("proceed_all_lwps: found "
5222 "thread %ld needing a step-over\n",
5223 lwpid_of (need_step_over));
d50171e4 5224
d86d4aaf 5225 start_step_over (get_thread_lwp (need_step_over));
d50171e4
PA
5226 return;
5227 }
5228 }
5544ad89 5229
d50171e4 5230 if (debug_threads)
87ce2a04 5231 debug_printf ("Proceeding, no step-over needed\n");
d50171e4 5232
e2b44075
SM
5233 for_each_thread ([] (thread_info *thread)
5234 {
5235 proceed_one_lwp (thread, NULL);
5236 });
d50171e4
PA
5237}
5238
5239/* Stopped LWPs that the client wanted to be running, that don't have
5240 pending statuses, are set to run again, except for EXCEPT, if not
5241 NULL. This undoes a stop_all_lwps call. */
5242
5243static void
7984d532 5244unstop_all_lwps (int unsuspend, struct lwp_info *except)
d50171e4 5245{
5544ad89
DJ
5246 if (debug_threads)
5247 {
87ce2a04 5248 debug_enter ();
d50171e4 5249 if (except)
87ce2a04 5250 debug_printf ("unstopping all lwps, except=(LWP %ld)\n",
d86d4aaf 5251 lwpid_of (get_lwp_thread (except)));
5544ad89 5252 else
87ce2a04 5253 debug_printf ("unstopping all lwps\n");
5544ad89
DJ
5254 }
5255
7984d532 5256 if (unsuspend)
e2b44075
SM
5257 for_each_thread ([&] (thread_info *thread)
5258 {
5259 unsuspend_and_proceed_one_lwp (thread, except);
5260 });
7984d532 5261 else
e2b44075
SM
5262 for_each_thread ([&] (thread_info *thread)
5263 {
5264 proceed_one_lwp (thread, except);
5265 });
87ce2a04
DE
5266
5267 if (debug_threads)
5268 {
5269 debug_printf ("unstop_all_lwps done\n");
5270 debug_exit ();
5271 }
0d62e5e8
DJ
5272}
5273
58caa3dc
DJ
5274
5275#ifdef HAVE_LINUX_REGSETS
5276
1faeff08
MR
5277#define use_linux_regsets 1
5278
030031ee
PA
5279/* Returns true if REGSET has been disabled. */
5280
5281static int
5282regset_disabled (struct regsets_info *info, struct regset_info *regset)
5283{
5284 return (info->disabled_regsets != NULL
5285 && info->disabled_regsets[regset - info->regsets]);
5286}
5287
5288/* Disable REGSET. */
5289
5290static void
5291disable_regset (struct regsets_info *info, struct regset_info *regset)
5292{
5293 int dr_offset;
5294
5295 dr_offset = regset - info->regsets;
5296 if (info->disabled_regsets == NULL)
224c3ddb 5297 info->disabled_regsets = (char *) xcalloc (1, info->num_regsets);
030031ee
PA
5298 info->disabled_regsets[dr_offset] = 1;
5299}
5300
58caa3dc 5301static int
3aee8918
PA
5302regsets_fetch_inferior_registers (struct regsets_info *regsets_info,
5303 struct regcache *regcache)
58caa3dc
DJ
5304{
5305 struct regset_info *regset;
e9d25b98 5306 int saw_general_regs = 0;
95954743 5307 int pid;
1570b33e 5308 struct iovec iov;
58caa3dc 5309
0bfdf32f 5310 pid = lwpid_of (current_thread);
28eef672 5311 for (regset = regsets_info->regsets; regset->size >= 0; regset++)
58caa3dc 5312 {
1570b33e
L
5313 void *buf, *data;
5314 int nt_type, res;
58caa3dc 5315
030031ee 5316 if (regset->size == 0 || regset_disabled (regsets_info, regset))
28eef672 5317 continue;
58caa3dc 5318
bca929d3 5319 buf = xmalloc (regset->size);
1570b33e
L
5320
5321 nt_type = regset->nt_type;
5322 if (nt_type)
5323 {
5324 iov.iov_base = buf;
5325 iov.iov_len = regset->size;
5326 data = (void *) &iov;
5327 }
5328 else
5329 data = buf;
5330
dfb64f85 5331#ifndef __sparc__
f15f9948 5332 res = ptrace (regset->get_request, pid,
b8e1b30e 5333 (PTRACE_TYPE_ARG3) (long) nt_type, data);
dfb64f85 5334#else
1570b33e 5335 res = ptrace (regset->get_request, pid, data, nt_type);
dfb64f85 5336#endif
58caa3dc
DJ
5337 if (res < 0)
5338 {
1ef53e6b
AH
5339 if (errno == EIO
5340 || (errno == EINVAL && regset->type == OPTIONAL_REGS))
58caa3dc 5341 {
1ef53e6b
AH
5342 /* If we get EIO on a regset, or an EINVAL and the regset is
5343 optional, do not try it again for this process mode. */
030031ee 5344 disable_regset (regsets_info, regset);
58caa3dc 5345 }
e5a9158d
AA
5346 else if (errno == ENODATA)
5347 {
5348 /* ENODATA may be returned if the regset is currently
5349 not "active". This can happen in normal operation,
5350 so suppress the warning in this case. */
5351 }
fcd4a73d
YQ
5352 else if (errno == ESRCH)
5353 {
5354 /* At this point, ESRCH should mean the process is
5355 already gone, in which case we simply ignore attempts
5356 to read its registers. */
5357 }
58caa3dc
DJ
5358 else
5359 {
0d62e5e8 5360 char s[256];
95954743
PA
5361 sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d",
5362 pid);
0d62e5e8 5363 perror (s);
58caa3dc
DJ
5364 }
5365 }
098dbe61
AA
5366 else
5367 {
5368 if (regset->type == GENERAL_REGS)
5369 saw_general_regs = 1;
5370 regset->store_function (regcache, buf);
5371 }
fdeb2a12 5372 free (buf);
58caa3dc 5373 }
e9d25b98
DJ
5374 if (saw_general_regs)
5375 return 0;
5376 else
5377 return 1;
58caa3dc
DJ
5378}
5379
5380static int
3aee8918
PA
5381regsets_store_inferior_registers (struct regsets_info *regsets_info,
5382 struct regcache *regcache)
58caa3dc
DJ
5383{
5384 struct regset_info *regset;
e9d25b98 5385 int saw_general_regs = 0;
95954743 5386 int pid;
1570b33e 5387 struct iovec iov;
58caa3dc 5388
0bfdf32f 5389 pid = lwpid_of (current_thread);
28eef672 5390 for (regset = regsets_info->regsets; regset->size >= 0; regset++)
58caa3dc 5391 {
1570b33e
L
5392 void *buf, *data;
5393 int nt_type, res;
58caa3dc 5394
feea5f36
AA
5395 if (regset->size == 0 || regset_disabled (regsets_info, regset)
5396 || regset->fill_function == NULL)
28eef672 5397 continue;
58caa3dc 5398
bca929d3 5399 buf = xmalloc (regset->size);
545587ee
DJ
5400
5401 /* First fill the buffer with the current register set contents,
5402 in case there are any items in the kernel's regset that are
5403 not in gdbserver's regcache. */
1570b33e
L
5404
5405 nt_type = regset->nt_type;
5406 if (nt_type)
5407 {
5408 iov.iov_base = buf;
5409 iov.iov_len = regset->size;
5410 data = (void *) &iov;
5411 }
5412 else
5413 data = buf;
5414
dfb64f85 5415#ifndef __sparc__
f15f9948 5416 res = ptrace (regset->get_request, pid,
b8e1b30e 5417 (PTRACE_TYPE_ARG3) (long) nt_type, data);
dfb64f85 5418#else
689cc2ae 5419 res = ptrace (regset->get_request, pid, data, nt_type);
dfb64f85 5420#endif
545587ee
DJ
5421
5422 if (res == 0)
5423 {
5424 /* Then overlay our cached registers on that. */
442ea881 5425 regset->fill_function (regcache, buf);
545587ee
DJ
5426
5427 /* Only now do we write the register set. */
dfb64f85 5428#ifndef __sparc__
f15f9948 5429 res = ptrace (regset->set_request, pid,
b8e1b30e 5430 (PTRACE_TYPE_ARG3) (long) nt_type, data);
dfb64f85 5431#else
1570b33e 5432 res = ptrace (regset->set_request, pid, data, nt_type);
dfb64f85 5433#endif
545587ee
DJ
5434 }
5435
58caa3dc
DJ
5436 if (res < 0)
5437 {
1ef53e6b
AH
5438 if (errno == EIO
5439 || (errno == EINVAL && regset->type == OPTIONAL_REGS))
58caa3dc 5440 {
1ef53e6b
AH
5441 /* If we get EIO on a regset, or an EINVAL and the regset is
5442 optional, do not try it again for this process mode. */
030031ee 5443 disable_regset (regsets_info, regset);
58caa3dc 5444 }
3221518c
UW
5445 else if (errno == ESRCH)
5446 {
1b3f6016
PA
5447 /* At this point, ESRCH should mean the process is
5448 already gone, in which case we simply ignore attempts
5449 to change its registers. See also the related
5450 comment in linux_resume_one_lwp. */
fdeb2a12 5451 free (buf);
3221518c
UW
5452 return 0;
5453 }
58caa3dc
DJ
5454 else
5455 {
ce3a066d 5456 perror ("Warning: ptrace(regsets_store_inferior_registers)");
58caa3dc
DJ
5457 }
5458 }
e9d25b98
DJ
5459 else if (regset->type == GENERAL_REGS)
5460 saw_general_regs = 1;
09ec9b38 5461 free (buf);
58caa3dc 5462 }
e9d25b98
DJ
5463 if (saw_general_regs)
5464 return 0;
5465 else
5466 return 1;
58caa3dc
DJ
5467}
5468
1faeff08 5469#else /* !HAVE_LINUX_REGSETS */
58caa3dc 5470
1faeff08 5471#define use_linux_regsets 0
3aee8918
PA
5472#define regsets_fetch_inferior_registers(regsets_info, regcache) 1
5473#define regsets_store_inferior_registers(regsets_info, regcache) 1
58caa3dc 5474
58caa3dc 5475#endif
1faeff08
MR
5476
5477/* Return 1 if register REGNO is supported by one of the regset ptrace
5478 calls or 0 if it has to be transferred individually. */
5479
5480static int
3aee8918 5481linux_register_in_regsets (const struct regs_info *regs_info, int regno)
1faeff08
MR
5482{
5483 unsigned char mask = 1 << (regno % 8);
5484 size_t index = regno / 8;
5485
5486 return (use_linux_regsets
3aee8918
PA
5487 && (regs_info->regset_bitmap == NULL
5488 || (regs_info->regset_bitmap[index] & mask) != 0));
1faeff08
MR
5489}
5490
58caa3dc 5491#ifdef HAVE_LINUX_USRREGS
1faeff08 5492
5b3da067 5493static int
3aee8918 5494register_addr (const struct usrregs_info *usrregs, int regnum)
1faeff08
MR
5495{
5496 int addr;
5497
3aee8918 5498 if (regnum < 0 || regnum >= usrregs->num_regs)
1faeff08
MR
5499 error ("Invalid register number %d.", regnum);
5500
3aee8918 5501 addr = usrregs->regmap[regnum];
1faeff08
MR
5502
5503 return addr;
5504}
5505
5506/* Fetch one register. */
5507static void
3aee8918
PA
5508fetch_register (const struct usrregs_info *usrregs,
5509 struct regcache *regcache, int regno)
1faeff08
MR
5510{
5511 CORE_ADDR regaddr;
5512 int i, size;
5513 char *buf;
5514 int pid;
5515
3aee8918 5516 if (regno >= usrregs->num_regs)
1faeff08
MR
5517 return;
5518 if ((*the_low_target.cannot_fetch_register) (regno))
5519 return;
5520
3aee8918 5521 regaddr = register_addr (usrregs, regno);
1faeff08
MR
5522 if (regaddr == -1)
5523 return;
5524
3aee8918
PA
5525 size = ((register_size (regcache->tdesc, regno)
5526 + sizeof (PTRACE_XFER_TYPE) - 1)
1faeff08 5527 & -sizeof (PTRACE_XFER_TYPE));
224c3ddb 5528 buf = (char *) alloca (size);
1faeff08 5529
0bfdf32f 5530 pid = lwpid_of (current_thread);
1faeff08
MR
5531 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
5532 {
5533 errno = 0;
5534 *(PTRACE_XFER_TYPE *) (buf + i) =
5535 ptrace (PTRACE_PEEKUSER, pid,
5536 /* Coerce to a uintptr_t first to avoid potential gcc warning
5537 of coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e 5538 (PTRACE_TYPE_ARG3) (uintptr_t) regaddr, (PTRACE_TYPE_ARG4) 0);
1faeff08
MR
5539 regaddr += sizeof (PTRACE_XFER_TYPE);
5540 if (errno != 0)
9a70f35c
YQ
5541 {
5542 /* Mark register REGNO unavailable. */
5543 supply_register (regcache, regno, NULL);
5544 return;
5545 }
1faeff08
MR
5546 }
5547
5548 if (the_low_target.supply_ptrace_register)
5549 the_low_target.supply_ptrace_register (regcache, regno, buf);
5550 else
5551 supply_register (regcache, regno, buf);
5552}
5553
5554/* Store one register. */
5555static void
3aee8918
PA
5556store_register (const struct usrregs_info *usrregs,
5557 struct regcache *regcache, int regno)
1faeff08
MR
5558{
5559 CORE_ADDR regaddr;
5560 int i, size;
5561 char *buf;
5562 int pid;
5563
3aee8918 5564 if (regno >= usrregs->num_regs)
1faeff08
MR
5565 return;
5566 if ((*the_low_target.cannot_store_register) (regno))
5567 return;
5568
3aee8918 5569 regaddr = register_addr (usrregs, regno);
1faeff08
MR
5570 if (regaddr == -1)
5571 return;
5572
3aee8918
PA
5573 size = ((register_size (regcache->tdesc, regno)
5574 + sizeof (PTRACE_XFER_TYPE) - 1)
1faeff08 5575 & -sizeof (PTRACE_XFER_TYPE));
224c3ddb 5576 buf = (char *) alloca (size);
1faeff08
MR
5577 memset (buf, 0, size);
5578
5579 if (the_low_target.collect_ptrace_register)
5580 the_low_target.collect_ptrace_register (regcache, regno, buf);
5581 else
5582 collect_register (regcache, regno, buf);
5583
0bfdf32f 5584 pid = lwpid_of (current_thread);
1faeff08
MR
5585 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
5586 {
5587 errno = 0;
5588 ptrace (PTRACE_POKEUSER, pid,
5589 /* Coerce to a uintptr_t first to avoid potential gcc warning
5590 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e
LM
5591 (PTRACE_TYPE_ARG3) (uintptr_t) regaddr,
5592 (PTRACE_TYPE_ARG4) *(PTRACE_XFER_TYPE *) (buf + i));
1faeff08
MR
5593 if (errno != 0)
5594 {
5595 /* At this point, ESRCH should mean the process is
5596 already gone, in which case we simply ignore attempts
5597 to change its registers. See also the related
5598 comment in linux_resume_one_lwp. */
5599 if (errno == ESRCH)
5600 return;
5601
5602 if ((*the_low_target.cannot_store_register) (regno) == 0)
6d91ce9a 5603 error ("writing register %d: %s", regno, safe_strerror (errno));
1faeff08
MR
5604 }
5605 regaddr += sizeof (PTRACE_XFER_TYPE);
5606 }
5607}
5608
5609/* Fetch all registers, or just one, from the child process.
5610 If REGNO is -1, do this for all registers, skipping any that are
5611 assumed to have been retrieved by regsets_fetch_inferior_registers,
5612 unless ALL is non-zero.
5613 Otherwise, REGNO specifies which register (so we can save time). */
5614static void
3aee8918
PA
5615usr_fetch_inferior_registers (const struct regs_info *regs_info,
5616 struct regcache *regcache, int regno, int all)
1faeff08 5617{
3aee8918
PA
5618 struct usrregs_info *usr = regs_info->usrregs;
5619
1faeff08
MR
5620 if (regno == -1)
5621 {
3aee8918
PA
5622 for (regno = 0; regno < usr->num_regs; regno++)
5623 if (all || !linux_register_in_regsets (regs_info, regno))
5624 fetch_register (usr, regcache, regno);
1faeff08
MR
5625 }
5626 else
3aee8918 5627 fetch_register (usr, regcache, regno);
1faeff08
MR
5628}
5629
5630/* Store our register values back into the inferior.
5631 If REGNO is -1, do this for all registers, skipping any that are
5632 assumed to have been saved by regsets_store_inferior_registers,
5633 unless ALL is non-zero.
5634 Otherwise, REGNO specifies which register (so we can save time). */
5635static void
3aee8918
PA
5636usr_store_inferior_registers (const struct regs_info *regs_info,
5637 struct regcache *regcache, int regno, int all)
1faeff08 5638{
3aee8918
PA
5639 struct usrregs_info *usr = regs_info->usrregs;
5640
1faeff08
MR
5641 if (regno == -1)
5642 {
3aee8918
PA
5643 for (regno = 0; regno < usr->num_regs; regno++)
5644 if (all || !linux_register_in_regsets (regs_info, regno))
5645 store_register (usr, regcache, regno);
1faeff08
MR
5646 }
5647 else
3aee8918 5648 store_register (usr, regcache, regno);
1faeff08
MR
5649}
5650
5651#else /* !HAVE_LINUX_USRREGS */
5652
3aee8918
PA
5653#define usr_fetch_inferior_registers(regs_info, regcache, regno, all) do {} while (0)
5654#define usr_store_inferior_registers(regs_info, regcache, regno, all) do {} while (0)
1faeff08 5655
58caa3dc 5656#endif
1faeff08
MR
5657
5658
a5a4d4cd
TBA
5659void
5660linux_process_target::fetch_registers (regcache *regcache, int regno)
1faeff08
MR
5661{
5662 int use_regsets;
5663 int all = 0;
3aee8918 5664 const struct regs_info *regs_info = (*the_low_target.regs_info) ();
1faeff08
MR
5665
5666 if (regno == -1)
5667 {
3aee8918
PA
5668 if (the_low_target.fetch_register != NULL
5669 && regs_info->usrregs != NULL)
5670 for (regno = 0; regno < regs_info->usrregs->num_regs; regno++)
c14dfd32
PA
5671 (*the_low_target.fetch_register) (regcache, regno);
5672
3aee8918
PA
5673 all = regsets_fetch_inferior_registers (regs_info->regsets_info, regcache);
5674 if (regs_info->usrregs != NULL)
5675 usr_fetch_inferior_registers (regs_info, regcache, -1, all);
1faeff08
MR
5676 }
5677 else
5678 {
c14dfd32
PA
5679 if (the_low_target.fetch_register != NULL
5680 && (*the_low_target.fetch_register) (regcache, regno))
5681 return;
5682
3aee8918 5683 use_regsets = linux_register_in_regsets (regs_info, regno);
1faeff08 5684 if (use_regsets)
3aee8918
PA
5685 all = regsets_fetch_inferior_registers (regs_info->regsets_info,
5686 regcache);
5687 if ((!use_regsets || all) && regs_info->usrregs != NULL)
5688 usr_fetch_inferior_registers (regs_info, regcache, regno, 1);
1faeff08 5689 }
58caa3dc
DJ
5690}
5691
a5a4d4cd
TBA
5692void
5693linux_process_target::store_registers (regcache *regcache, int regno)
58caa3dc 5694{
1faeff08
MR
5695 int use_regsets;
5696 int all = 0;
3aee8918 5697 const struct regs_info *regs_info = (*the_low_target.regs_info) ();
1faeff08
MR
5698
5699 if (regno == -1)
5700 {
3aee8918
PA
5701 all = regsets_store_inferior_registers (regs_info->regsets_info,
5702 regcache);
5703 if (regs_info->usrregs != NULL)
5704 usr_store_inferior_registers (regs_info, regcache, regno, all);
1faeff08
MR
5705 }
5706 else
5707 {
3aee8918 5708 use_regsets = linux_register_in_regsets (regs_info, regno);
1faeff08 5709 if (use_regsets)
3aee8918
PA
5710 all = regsets_store_inferior_registers (regs_info->regsets_info,
5711 regcache);
5712 if ((!use_regsets || all) && regs_info->usrregs != NULL)
5713 usr_store_inferior_registers (regs_info, regcache, regno, 1);
1faeff08 5714 }
58caa3dc
DJ
5715}
5716
da6d8c04 5717
e2558df3 5718/* A wrapper for the read_memory target op. */
da6d8c04 5719
c3e735a6 5720static int
f450004a 5721linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
e2558df3
TBA
5722{
5723 return the_target->pt->read_memory (memaddr, myaddr, len);
5724}
5725
5726/* Copy LEN bytes from inferior's memory starting at MEMADDR
5727 to debugger memory starting at MYADDR. */
5728
5729int
5730linux_process_target::read_memory (CORE_ADDR memaddr,
5731 unsigned char *myaddr, int len)
da6d8c04 5732{
0bfdf32f 5733 int pid = lwpid_of (current_thread);
ae3e2ccf
SM
5734 PTRACE_XFER_TYPE *buffer;
5735 CORE_ADDR addr;
5736 int count;
4934b29e 5737 char filename[64];
ae3e2ccf 5738 int i;
4934b29e 5739 int ret;
fd462a61 5740 int fd;
fd462a61
DJ
5741
5742 /* Try using /proc. Don't bother for one word. */
5743 if (len >= 3 * sizeof (long))
5744 {
4934b29e
MR
5745 int bytes;
5746
fd462a61
DJ
5747 /* We could keep this file open and cache it - possibly one per
5748 thread. That requires some juggling, but is even faster. */
95954743 5749 sprintf (filename, "/proc/%d/mem", pid);
fd462a61
DJ
5750 fd = open (filename, O_RDONLY | O_LARGEFILE);
5751 if (fd == -1)
5752 goto no_proc;
5753
5754 /* If pread64 is available, use it. It's faster if the kernel
5755 supports it (only one syscall), and it's 64-bit safe even on
5756 32-bit platforms (for instance, SPARC debugging a SPARC64
5757 application). */
5758#ifdef HAVE_PREAD64
4934b29e 5759 bytes = pread64 (fd, myaddr, len, memaddr);
fd462a61 5760#else
4934b29e
MR
5761 bytes = -1;
5762 if (lseek (fd, memaddr, SEEK_SET) != -1)
5763 bytes = read (fd, myaddr, len);
fd462a61 5764#endif
fd462a61
DJ
5765
5766 close (fd);
4934b29e
MR
5767 if (bytes == len)
5768 return 0;
5769
5770 /* Some data was read, we'll try to get the rest with ptrace. */
5771 if (bytes > 0)
5772 {
5773 memaddr += bytes;
5774 myaddr += bytes;
5775 len -= bytes;
5776 }
fd462a61 5777 }
da6d8c04 5778
fd462a61 5779 no_proc:
4934b29e
MR
5780 /* Round starting address down to longword boundary. */
5781 addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
5782 /* Round ending address up; get number of longwords that makes. */
5783 count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
5784 / sizeof (PTRACE_XFER_TYPE));
5785 /* Allocate buffer of that many longwords. */
8d749320 5786 buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count);
4934b29e 5787
da6d8c04 5788 /* Read all the longwords */
4934b29e 5789 errno = 0;
da6d8c04
DJ
5790 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
5791 {
14ce3065
DE
5792 /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
5793 about coercing an 8 byte integer to a 4 byte pointer. */
5794 buffer[i] = ptrace (PTRACE_PEEKTEXT, pid,
b8e1b30e
LM
5795 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
5796 (PTRACE_TYPE_ARG4) 0);
c3e735a6 5797 if (errno)
4934b29e 5798 break;
da6d8c04 5799 }
4934b29e 5800 ret = errno;
da6d8c04
DJ
5801
5802 /* Copy appropriate bytes out of the buffer. */
8d409d16
MR
5803 if (i > 0)
5804 {
5805 i *= sizeof (PTRACE_XFER_TYPE);
5806 i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
5807 memcpy (myaddr,
5808 (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
5809 i < len ? i : len);
5810 }
c3e735a6 5811
4934b29e 5812 return ret;
da6d8c04
DJ
5813}
5814
93ae6fdc
PA
5815/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
5816 memory at MEMADDR. On failure (cannot write to the inferior)
f0ae6fc3 5817 returns the value of errno. Always succeeds if LEN is zero. */
da6d8c04 5818
e2558df3
TBA
5819int
5820linux_process_target::write_memory (CORE_ADDR memaddr,
5821 const unsigned char *myaddr, int len)
da6d8c04 5822{
ae3e2ccf 5823 int i;
da6d8c04 5824 /* Round starting address down to longword boundary. */
ae3e2ccf 5825 CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
da6d8c04 5826 /* Round ending address up; get number of longwords that makes. */
ae3e2ccf 5827 int count
493e2a69
MS
5828 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
5829 / sizeof (PTRACE_XFER_TYPE);
5830
da6d8c04 5831 /* Allocate buffer of that many longwords. */
ae3e2ccf 5832 PTRACE_XFER_TYPE *buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count);
493e2a69 5833
0bfdf32f 5834 int pid = lwpid_of (current_thread);
da6d8c04 5835
f0ae6fc3
PA
5836 if (len == 0)
5837 {
5838 /* Zero length write always succeeds. */
5839 return 0;
5840 }
5841
0d62e5e8
DJ
5842 if (debug_threads)
5843 {
58d6951d 5844 /* Dump up to four bytes. */
bf47e248
PA
5845 char str[4 * 2 + 1];
5846 char *p = str;
5847 int dump = len < 4 ? len : 4;
5848
5849 for (i = 0; i < dump; i++)
5850 {
5851 sprintf (p, "%02x", myaddr[i]);
5852 p += 2;
5853 }
5854 *p = '\0';
5855
5856 debug_printf ("Writing %s to 0x%08lx in process %d\n",
5857 str, (long) memaddr, pid);
0d62e5e8
DJ
5858 }
5859
da6d8c04
DJ
5860 /* Fill start and end extra bytes of buffer with existing memory data. */
5861
93ae6fdc 5862 errno = 0;
14ce3065
DE
5863 /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
5864 about coercing an 8 byte integer to a 4 byte pointer. */
5865 buffer[0] = ptrace (PTRACE_PEEKTEXT, pid,
b8e1b30e
LM
5866 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
5867 (PTRACE_TYPE_ARG4) 0);
93ae6fdc
PA
5868 if (errno)
5869 return errno;
da6d8c04
DJ
5870
5871 if (count > 1)
5872 {
93ae6fdc 5873 errno = 0;
da6d8c04 5874 buffer[count - 1]
95954743 5875 = ptrace (PTRACE_PEEKTEXT, pid,
14ce3065
DE
5876 /* Coerce to a uintptr_t first to avoid potential gcc warning
5877 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e 5878 (PTRACE_TYPE_ARG3) (uintptr_t) (addr + (count - 1)
14ce3065 5879 * sizeof (PTRACE_XFER_TYPE)),
b8e1b30e 5880 (PTRACE_TYPE_ARG4) 0);
93ae6fdc
PA
5881 if (errno)
5882 return errno;
da6d8c04
DJ
5883 }
5884
93ae6fdc 5885 /* Copy data to be written over corresponding part of buffer. */
da6d8c04 5886
493e2a69
MS
5887 memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
5888 myaddr, len);
da6d8c04
DJ
5889
5890 /* Write the entire buffer. */
5891
5892 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
5893 {
5894 errno = 0;
14ce3065
DE
5895 ptrace (PTRACE_POKETEXT, pid,
5896 /* Coerce to a uintptr_t first to avoid potential gcc warning
5897 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e
LM
5898 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
5899 (PTRACE_TYPE_ARG4) buffer[i]);
da6d8c04
DJ
5900 if (errno)
5901 return errno;
5902 }
5903
5904 return 0;
5905}
2f2893d9 5906
2a31c7aa
TBA
5907void
5908linux_process_target::look_up_symbols ()
2f2893d9 5909{
0d62e5e8 5910#ifdef USE_THREAD_DB
95954743
PA
5911 struct process_info *proc = current_process ();
5912
fe978cb0 5913 if (proc->priv->thread_db != NULL)
0d62e5e8
DJ
5914 return;
5915
9b4c5f87 5916 thread_db_init ();
0d62e5e8
DJ
5917#endif
5918}
5919
eb497a2a
TBA
5920void
5921linux_process_target::request_interrupt ()
e5379b03 5922{
78708b7c
PA
5923 /* Send a SIGINT to the process group. This acts just like the user
5924 typed a ^C on the controlling terminal. */
eb497a2a 5925 ::kill (-signal_pid, SIGINT);
e5379b03
DJ
5926}
5927
eac215cc
TBA
5928bool
5929linux_process_target::supports_read_auxv ()
5930{
5931 return true;
5932}
5933
aa691b87
RM
5934/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
5935 to debugger memory starting at MYADDR. */
5936
eac215cc
TBA
5937int
5938linux_process_target::read_auxv (CORE_ADDR offset, unsigned char *myaddr,
5939 unsigned int len)
aa691b87
RM
5940{
5941 char filename[PATH_MAX];
5942 int fd, n;
0bfdf32f 5943 int pid = lwpid_of (current_thread);
aa691b87 5944
6cebaf6e 5945 xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
aa691b87
RM
5946
5947 fd = open (filename, O_RDONLY);
5948 if (fd < 0)
5949 return -1;
5950
5951 if (offset != (CORE_ADDR) 0
5952 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
5953 n = -1;
5954 else
5955 n = read (fd, myaddr, len);
5956
5957 close (fd);
5958
5959 return n;
5960}
5961
d993e290
PA
5962/* These breakpoint and watchpoint related wrapper functions simply
5963 pass on the function call if the target has registered a
5964 corresponding function. */
e013ee27 5965
a2b2297a
TBA
5966bool
5967linux_process_target::supports_z_point_type (char z_type)
802e8e6d
PA
5968{
5969 return (the_low_target.supports_z_point_type != NULL
5970 && the_low_target.supports_z_point_type (z_type));
5971}
5972
7e0bde70
TBA
5973int
5974linux_process_target::insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
5975 int size, raw_breakpoint *bp)
e013ee27 5976{
c8f4bfdd
YQ
5977 if (type == raw_bkpt_type_sw)
5978 return insert_memory_breakpoint (bp);
5979 else if (the_low_target.insert_point != NULL)
802e8e6d 5980 return the_low_target.insert_point (type, addr, size, bp);
e013ee27
OF
5981 else
5982 /* Unsupported (see target.h). */
5983 return 1;
5984}
5985
7e0bde70
TBA
5986int
5987linux_process_target::remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
5988 int size, raw_breakpoint *bp)
e013ee27 5989{
c8f4bfdd
YQ
5990 if (type == raw_bkpt_type_sw)
5991 return remove_memory_breakpoint (bp);
5992 else if (the_low_target.remove_point != NULL)
802e8e6d 5993 return the_low_target.remove_point (type, addr, size, bp);
e013ee27
OF
5994 else
5995 /* Unsupported (see target.h). */
5996 return 1;
5997}
5998
84320c4e 5999/* Implement the stopped_by_sw_breakpoint target_ops
3e572f71
PA
6000 method. */
6001
84320c4e
TBA
6002bool
6003linux_process_target::stopped_by_sw_breakpoint ()
3e572f71
PA
6004{
6005 struct lwp_info *lwp = get_thread_lwp (current_thread);
6006
6007 return (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
6008}
6009
84320c4e 6010/* Implement the supports_stopped_by_sw_breakpoint target_ops
3e572f71
PA
6011 method. */
6012
84320c4e
TBA
6013bool
6014linux_process_target::supports_stopped_by_sw_breakpoint ()
3e572f71
PA
6015{
6016 return USE_SIGTRAP_SIGINFO;
6017}
6018
93fe88b2 6019/* Implement the stopped_by_hw_breakpoint target_ops
3e572f71
PA
6020 method. */
6021
93fe88b2
TBA
6022bool
6023linux_process_target::stopped_by_hw_breakpoint ()
3e572f71
PA
6024{
6025 struct lwp_info *lwp = get_thread_lwp (current_thread);
6026
6027 return (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
6028}
6029
93fe88b2 6030/* Implement the supports_stopped_by_hw_breakpoint target_ops
3e572f71
PA
6031 method. */
6032
93fe88b2
TBA
6033bool
6034linux_process_target::supports_stopped_by_hw_breakpoint ()
3e572f71
PA
6035{
6036 return USE_SIGTRAP_SIGINFO;
6037}
6038
70b90b91 6039/* Implement the supports_hardware_single_step target_ops method. */
45614f15 6040
22aa6223
TBA
6041bool
6042linux_process_target::supports_hardware_single_step ()
45614f15 6043{
45614f15
YQ
6044 return can_hardware_single_step ();
6045}
6046
5303a34f
TBA
6047bool
6048linux_process_target::supports_software_single_step ()
7d00775e
AT
6049{
6050 return can_software_single_step ();
6051}
6052
6eeb5c55
TBA
6053bool
6054linux_process_target::stopped_by_watchpoint ()
e013ee27 6055{
0bfdf32f 6056 struct lwp_info *lwp = get_thread_lwp (current_thread);
c3adc08c 6057
15c66dd6 6058 return lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
e013ee27
OF
6059}
6060
6eeb5c55
TBA
6061CORE_ADDR
6062linux_process_target::stopped_data_address ()
e013ee27 6063{
0bfdf32f 6064 struct lwp_info *lwp = get_thread_lwp (current_thread);
c3adc08c
PA
6065
6066 return lwp->stopped_data_address;
e013ee27
OF
6067}
6068
db0dfaa0
LM
6069/* This is only used for targets that define PT_TEXT_ADDR,
6070 PT_DATA_ADDR and PT_TEXT_END_ADDR. If those are not defined, supposedly
6071 the target has different ways of acquiring this information, like
6072 loadmaps. */
52fb6437 6073
5203ae1e
TBA
6074bool
6075linux_process_target::supports_read_offsets ()
6076{
6077#ifdef SUPPORTS_READ_OFFSETS
6078 return true;
6079#else
6080 return false;
6081#endif
6082}
6083
52fb6437
NS
6084/* Under uClinux, programs are loaded at non-zero offsets, which we need
6085 to tell gdb about. */
6086
5203ae1e
TBA
6087int
6088linux_process_target::read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
52fb6437 6089{
5203ae1e 6090#ifdef SUPPORTS_READ_OFFSETS
52fb6437 6091 unsigned long text, text_end, data;
62828379 6092 int pid = lwpid_of (current_thread);
52fb6437
NS
6093
6094 errno = 0;
6095
b8e1b30e
LM
6096 text = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_ADDR,
6097 (PTRACE_TYPE_ARG4) 0);
6098 text_end = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_END_ADDR,
6099 (PTRACE_TYPE_ARG4) 0);
6100 data = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_DATA_ADDR,
6101 (PTRACE_TYPE_ARG4) 0);
52fb6437
NS
6102
6103 if (errno == 0)
6104 {
6105 /* Both text and data offsets produced at compile-time (and so
1b3f6016
PA
6106 used by gdb) are relative to the beginning of the program,
6107 with the data segment immediately following the text segment.
6108 However, the actual runtime layout in memory may put the data
6109 somewhere else, so when we send gdb a data base-address, we
6110 use the real data base address and subtract the compile-time
6111 data base-address from it (which is just the length of the
6112 text segment). BSS immediately follows data in both
6113 cases. */
52fb6437
NS
6114 *text_p = text;
6115 *data_p = data - (text_end - text);
1b3f6016 6116
52fb6437
NS
6117 return 1;
6118 }
5203ae1e
TBA
6119 return 0;
6120#else
6121 gdb_assert_not_reached ("target op read_offsets not supported");
52fb6437 6122#endif
5203ae1e 6123}
52fb6437 6124
6e3fd7e9
TBA
6125bool
6126linux_process_target::supports_get_tls_address ()
6127{
6128#ifdef USE_THREAD_DB
6129 return true;
6130#else
6131 return false;
6132#endif
6133}
6134
6135int
6136linux_process_target::get_tls_address (thread_info *thread,
6137 CORE_ADDR offset,
6138 CORE_ADDR load_module,
6139 CORE_ADDR *address)
6140{
6141#ifdef USE_THREAD_DB
6142 return thread_db_get_tls_address (thread, offset, load_module, address);
6143#else
6144 return -1;
6145#endif
6146}
6147
2d0795ee
TBA
6148bool
6149linux_process_target::supports_qxfer_osdata ()
6150{
6151 return true;
6152}
6153
6154int
6155linux_process_target::qxfer_osdata (const char *annex,
6156 unsigned char *readbuf,
6157 unsigned const char *writebuf,
6158 CORE_ADDR offset, int len)
07e059b5 6159{
d26e3629 6160 return linux_common_xfer_osdata (annex, readbuf, offset, len);
07e059b5
VP
6161}
6162
d0722149
DE
6163/* Convert a native/host siginfo object, into/from the siginfo in the
6164 layout of the inferiors' architecture. */
6165
6166static void
8adce034 6167siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
d0722149
DE
6168{
6169 int done = 0;
6170
6171 if (the_low_target.siginfo_fixup != NULL)
6172 done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
6173
6174 /* If there was no callback, or the callback didn't do anything,
6175 then just do a straight memcpy. */
6176 if (!done)
6177 {
6178 if (direction == 1)
a5362b9a 6179 memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
d0722149 6180 else
a5362b9a 6181 memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
d0722149
DE
6182 }
6183}
6184
d7abedf7
TBA
6185bool
6186linux_process_target::supports_qxfer_siginfo ()
6187{
6188 return true;
6189}
6190
6191int
6192linux_process_target::qxfer_siginfo (const char *annex,
6193 unsigned char *readbuf,
6194 unsigned const char *writebuf,
6195 CORE_ADDR offset, int len)
4aa995e1 6196{
d0722149 6197 int pid;
a5362b9a 6198 siginfo_t siginfo;
8adce034 6199 gdb_byte inf_siginfo[sizeof (siginfo_t)];
4aa995e1 6200
0bfdf32f 6201 if (current_thread == NULL)
4aa995e1
PA
6202 return -1;
6203
0bfdf32f 6204 pid = lwpid_of (current_thread);
4aa995e1
PA
6205
6206 if (debug_threads)
87ce2a04
DE
6207 debug_printf ("%s siginfo for lwp %d.\n",
6208 readbuf != NULL ? "Reading" : "Writing",
6209 pid);
4aa995e1 6210
0adea5f7 6211 if (offset >= sizeof (siginfo))
4aa995e1
PA
6212 return -1;
6213
b8e1b30e 6214 if (ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0)
4aa995e1
PA
6215 return -1;
6216
d0722149
DE
6217 /* When GDBSERVER is built as a 64-bit application, ptrace writes into
6218 SIGINFO an object with 64-bit layout. Since debugging a 32-bit
6219 inferior with a 64-bit GDBSERVER should look the same as debugging it
6220 with a 32-bit GDBSERVER, we need to convert it. */
6221 siginfo_fixup (&siginfo, inf_siginfo, 0);
6222
4aa995e1
PA
6223 if (offset + len > sizeof (siginfo))
6224 len = sizeof (siginfo) - offset;
6225
6226 if (readbuf != NULL)
d0722149 6227 memcpy (readbuf, inf_siginfo + offset, len);
4aa995e1
PA
6228 else
6229 {
d0722149
DE
6230 memcpy (inf_siginfo + offset, writebuf, len);
6231
6232 /* Convert back to ptrace layout before flushing it out. */
6233 siginfo_fixup (&siginfo, inf_siginfo, 1);
6234
b8e1b30e 6235 if (ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0)
4aa995e1
PA
6236 return -1;
6237 }
6238
6239 return len;
6240}
6241
bd99dc85
PA
6242/* SIGCHLD handler that serves two purposes: In non-stop/async mode,
6243 so we notice when children change state; as the handler for the
6244 sigsuspend in my_waitpid. */
6245
6246static void
6247sigchld_handler (int signo)
6248{
6249 int old_errno = errno;
6250
6251 if (debug_threads)
e581f2b4
PA
6252 {
6253 do
6254 {
a7e559cc
AH
6255 /* Use the async signal safe debug function. */
6256 if (debug_write ("sigchld_handler\n",
6257 sizeof ("sigchld_handler\n") - 1) < 0)
e581f2b4
PA
6258 break; /* just ignore */
6259 } while (0);
6260 }
bd99dc85
PA
6261
6262 if (target_is_async_p ())
6263 async_file_mark (); /* trigger a linux_wait */
6264
6265 errno = old_errno;
6266}
6267
0dc587d4
TBA
6268bool
6269linux_process_target::supports_non_stop ()
bd99dc85 6270{
0dc587d4 6271 return true;
bd99dc85
PA
6272}
6273
0dc587d4
TBA
6274bool
6275linux_process_target::async (bool enable)
bd99dc85 6276{
0dc587d4 6277 bool previous = target_is_async_p ();
bd99dc85 6278
8336d594 6279 if (debug_threads)
87ce2a04
DE
6280 debug_printf ("linux_async (%d), previous=%d\n",
6281 enable, previous);
8336d594 6282
bd99dc85
PA
6283 if (previous != enable)
6284 {
6285 sigset_t mask;
6286 sigemptyset (&mask);
6287 sigaddset (&mask, SIGCHLD);
6288
21987b9c 6289 gdb_sigmask (SIG_BLOCK, &mask, NULL);
bd99dc85
PA
6290
6291 if (enable)
6292 {
6293 if (pipe (linux_event_pipe) == -1)
aa96c426
GB
6294 {
6295 linux_event_pipe[0] = -1;
6296 linux_event_pipe[1] = -1;
21987b9c 6297 gdb_sigmask (SIG_UNBLOCK, &mask, NULL);
aa96c426
GB
6298
6299 warning ("creating event pipe failed.");
6300 return previous;
6301 }
bd99dc85
PA
6302
6303 fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
6304 fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
6305
6306 /* Register the event loop handler. */
6307 add_file_handler (linux_event_pipe[0],
6308 handle_target_event, NULL);
6309
6310 /* Always trigger a linux_wait. */
6311 async_file_mark ();
6312 }
6313 else
6314 {
6315 delete_file_handler (linux_event_pipe[0]);
6316
6317 close (linux_event_pipe[0]);
6318 close (linux_event_pipe[1]);
6319 linux_event_pipe[0] = -1;
6320 linux_event_pipe[1] = -1;
6321 }
6322
21987b9c 6323 gdb_sigmask (SIG_UNBLOCK, &mask, NULL);
bd99dc85
PA
6324 }
6325
6326 return previous;
6327}
6328
0dc587d4
TBA
6329int
6330linux_process_target::start_non_stop (bool nonstop)
bd99dc85
PA
6331{
6332 /* Register or unregister from event-loop accordingly. */
0dc587d4 6333 target_async (nonstop);
aa96c426 6334
0dc587d4 6335 if (target_is_async_p () != (nonstop != false))
aa96c426
GB
6336 return -1;
6337
bd99dc85
PA
6338 return 0;
6339}
6340
652aef77
TBA
6341bool
6342linux_process_target::supports_multi_process ()
cf8fd78b 6343{
652aef77 6344 return true;
cf8fd78b
PA
6345}
6346
89245bc0
DB
6347/* Check if fork events are supported. */
6348
9690a72a
TBA
6349bool
6350linux_process_target::supports_fork_events ()
89245bc0
DB
6351{
6352 return linux_supports_tracefork ();
6353}
6354
6355/* Check if vfork events are supported. */
6356
9690a72a
TBA
6357bool
6358linux_process_target::supports_vfork_events ()
89245bc0
DB
6359{
6360 return linux_supports_tracefork ();
6361}
6362
94585166
DB
6363/* Check if exec events are supported. */
6364
9690a72a
TBA
6365bool
6366linux_process_target::supports_exec_events ()
94585166
DB
6367{
6368 return linux_supports_traceexec ();
6369}
6370
de0d863e
DB
6371/* Target hook for 'handle_new_gdb_connection'. Causes a reset of the
6372 ptrace flags for all inferiors. This is in case the new GDB connection
6373 doesn't support the same set of events that the previous one did. */
6374
fb00dfce
TBA
6375void
6376linux_process_target::handle_new_gdb_connection ()
de0d863e 6377{
de0d863e 6378 /* Request that all the lwps reset their ptrace options. */
bbf550d5
SM
6379 for_each_thread ([] (thread_info *thread)
6380 {
6381 struct lwp_info *lwp = get_thread_lwp (thread);
6382
6383 if (!lwp->stopped)
6384 {
6385 /* Stop the lwp so we can modify its ptrace options. */
6386 lwp->must_set_ptrace_flags = 1;
6387 linux_stop_lwp (lwp);
6388 }
6389 else
6390 {
6391 /* Already stopped; go ahead and set the ptrace options. */
6392 struct process_info *proc = find_process_pid (pid_of (thread));
6393 int options = linux_low_ptrace_options (proc->attached);
6394
6395 linux_enable_event_reporting (lwpid_of (thread), options);
6396 lwp->must_set_ptrace_flags = 0;
6397 }
6398 });
de0d863e
DB
6399}
6400
55cf3021
TBA
6401int
6402linux_process_target::handle_monitor_command (char *mon)
6403{
6404#ifdef USE_THREAD_DB
6405 return thread_db_handle_monitor_command (mon);
6406#else
6407 return 0;
6408#endif
6409}
6410
95a45fc1
TBA
6411int
6412linux_process_target::core_of_thread (ptid_t ptid)
6413{
6414 return linux_common_core_of_thread (ptid);
6415}
6416
c756403b
TBA
6417bool
6418linux_process_target::supports_disable_randomization ()
03583c20
UW
6419{
6420#ifdef HAVE_PERSONALITY
c756403b 6421 return true;
03583c20 6422#else
c756403b 6423 return false;
03583c20
UW
6424#endif
6425}
efcbbd14 6426
c0245cb9
TBA
6427bool
6428linux_process_target::supports_agent ()
d1feda86 6429{
c0245cb9 6430 return true;
d1feda86
YQ
6431}
6432
2526e0cd
TBA
6433bool
6434linux_process_target::supports_range_stepping ()
c2d6af84 6435{
c3805894 6436 if (can_software_single_step ())
2526e0cd 6437 return true;
c2d6af84 6438 if (*the_low_target.supports_range_stepping == NULL)
2526e0cd 6439 return false;
c2d6af84
PA
6440
6441 return (*the_low_target.supports_range_stepping) ();
6442}
6443
8247b823
TBA
6444bool
6445linux_process_target::supports_pid_to_exec_file ()
6446{
6447 return true;
6448}
6449
6450char *
6451linux_process_target::pid_to_exec_file (int pid)
6452{
6453 return linux_proc_pid_to_exec_file (pid);
6454}
6455
c9b7b804
TBA
6456bool
6457linux_process_target::supports_multifs ()
6458{
6459 return true;
6460}
6461
6462int
6463linux_process_target::multifs_open (int pid, const char *filename,
6464 int flags, mode_t mode)
6465{
6466 return linux_mntns_open_cloexec (pid, filename, flags, mode);
6467}
6468
6469int
6470linux_process_target::multifs_unlink (int pid, const char *filename)
6471{
6472 return linux_mntns_unlink (pid, filename);
6473}
6474
6475ssize_t
6476linux_process_target::multifs_readlink (int pid, const char *filename,
6477 char *buf, size_t bufsiz)
6478{
6479 return linux_mntns_readlink (pid, filename, buf, bufsiz);
6480}
6481
723b724b 6482#if defined PT_GETDSBT || defined PTRACE_GETFDPIC
78d85199
YQ
6483struct target_loadseg
6484{
6485 /* Core address to which the segment is mapped. */
6486 Elf32_Addr addr;
6487 /* VMA recorded in the program header. */
6488 Elf32_Addr p_vaddr;
6489 /* Size of this segment in memory. */
6490 Elf32_Word p_memsz;
6491};
6492
723b724b 6493# if defined PT_GETDSBT
78d85199
YQ
6494struct target_loadmap
6495{
6496 /* Protocol version number, must be zero. */
6497 Elf32_Word version;
6498 /* Pointer to the DSBT table, its size, and the DSBT index. */
6499 unsigned *dsbt_table;
6500 unsigned dsbt_size, dsbt_index;
6501 /* Number of segments in this map. */
6502 Elf32_Word nsegs;
6503 /* The actual memory map. */
6504 struct target_loadseg segs[/*nsegs*/];
6505};
723b724b
MF
6506# define LINUX_LOADMAP PT_GETDSBT
6507# define LINUX_LOADMAP_EXEC PTRACE_GETDSBT_EXEC
6508# define LINUX_LOADMAP_INTERP PTRACE_GETDSBT_INTERP
6509# else
6510struct target_loadmap
6511{
6512 /* Protocol version number, must be zero. */
6513 Elf32_Half version;
6514 /* Number of segments in this map. */
6515 Elf32_Half nsegs;
6516 /* The actual memory map. */
6517 struct target_loadseg segs[/*nsegs*/];
6518};
6519# define LINUX_LOADMAP PTRACE_GETFDPIC
6520# define LINUX_LOADMAP_EXEC PTRACE_GETFDPIC_EXEC
6521# define LINUX_LOADMAP_INTERP PTRACE_GETFDPIC_INTERP
6522# endif
78d85199 6523
9da41fda
TBA
6524bool
6525linux_process_target::supports_read_loadmap ()
6526{
6527 return true;
6528}
6529
6530int
6531linux_process_target::read_loadmap (const char *annex, CORE_ADDR offset,
6532 unsigned char *myaddr, unsigned int len)
78d85199 6533{
0bfdf32f 6534 int pid = lwpid_of (current_thread);
78d85199
YQ
6535 int addr = -1;
6536 struct target_loadmap *data = NULL;
6537 unsigned int actual_length, copy_length;
6538
6539 if (strcmp (annex, "exec") == 0)
723b724b 6540 addr = (int) LINUX_LOADMAP_EXEC;
78d85199 6541 else if (strcmp (annex, "interp") == 0)
723b724b 6542 addr = (int) LINUX_LOADMAP_INTERP;
78d85199
YQ
6543 else
6544 return -1;
6545
723b724b 6546 if (ptrace (LINUX_LOADMAP, pid, addr, &data) != 0)
78d85199
YQ
6547 return -1;
6548
6549 if (data == NULL)
6550 return -1;
6551
6552 actual_length = sizeof (struct target_loadmap)
6553 + sizeof (struct target_loadseg) * data->nsegs;
6554
6555 if (offset < 0 || offset > actual_length)
6556 return -1;
6557
6558 copy_length = actual_length - offset < len ? actual_length - offset : len;
6559 memcpy (myaddr, (char *) data + offset, copy_length);
6560 return copy_length;
6561}
723b724b 6562#endif /* defined PT_GETDSBT || defined PTRACE_GETFDPIC */
78d85199 6563
0df28b1b
TBA
6564void
6565linux_process_target::process_qsupported (char **features, int count)
1570b33e
L
6566{
6567 if (the_low_target.process_qsupported != NULL)
06e03fff 6568 the_low_target.process_qsupported (features, count);
1570b33e
L
6569}
6570
82075af2
JS
6571static int
6572linux_supports_catch_syscall (void)
6573{
6574 return (the_low_target.get_syscall_trapinfo != NULL
6575 && linux_supports_tracesysgood ());
6576}
6577
ae91f625
MK
6578static int
6579linux_get_ipa_tdesc_idx (void)
6580{
6581 if (the_low_target.get_ipa_tdesc_idx == NULL)
6582 return 0;
6583
6584 return (*the_low_target.get_ipa_tdesc_idx) ();
6585}
6586
290732bf
TBA
6587bool
6588linux_process_target::supports_tracepoints ()
219f2f23
PA
6589{
6590 if (*the_low_target.supports_tracepoints == NULL)
290732bf 6591 return false;
219f2f23
PA
6592
6593 return (*the_low_target.supports_tracepoints) ();
6594}
6595
770d8f6a
TBA
6596CORE_ADDR
6597linux_process_target::read_pc (regcache *regcache)
219f2f23
PA
6598{
6599 if (the_low_target.get_pc == NULL)
6600 return 0;
6601
6602 return (*the_low_target.get_pc) (regcache);
6603}
6604
770d8f6a
TBA
6605void
6606linux_process_target::write_pc (regcache *regcache, CORE_ADDR pc)
219f2f23
PA
6607{
6608 gdb_assert (the_low_target.set_pc != NULL);
6609
6610 (*the_low_target.set_pc) (regcache, pc);
6611}
6612
68119632
TBA
6613bool
6614linux_process_target::supports_thread_stopped ()
6615{
6616 return true;
6617}
6618
6619bool
6620linux_process_target::thread_stopped (thread_info *thread)
8336d594
PA
6621{
6622 return get_thread_lwp (thread)->stopped;
6623}
6624
6625/* This exposes stop-all-threads functionality to other modules. */
6626
29e8dc09
TBA
6627void
6628linux_process_target::pause_all (bool freeze)
8336d594 6629{
7984d532
PA
6630 stop_all_lwps (freeze, NULL);
6631}
6632
6633/* This exposes unstop-all-threads functionality to other gdbserver
6634 modules. */
6635
29e8dc09
TBA
6636void
6637linux_process_target::unpause_all (bool unfreeze)
7984d532
PA
6638{
6639 unstop_all_lwps (unfreeze, NULL);
8336d594
PA
6640}
6641
79b44087
TBA
6642int
6643linux_process_target::prepare_to_access_memory ()
90d74c30
PA
6644{
6645 /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
6646 running LWP. */
6647 if (non_stop)
29e8dc09 6648 target_pause_all (true);
90d74c30
PA
6649 return 0;
6650}
6651
79b44087
TBA
6652void
6653linux_process_target::done_accessing_memory ()
90d74c30
PA
6654{
6655 /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
6656 running LWP. */
6657 if (non_stop)
29e8dc09 6658 target_unpause_all (true);
90d74c30
PA
6659}
6660
c23c9391
TBA
6661bool
6662linux_process_target::supports_fast_tracepoints ()
6663{
6664 return the_low_target.install_fast_tracepoint_jump_pad != nullptr;
6665}
6666
6667int
6668linux_process_target::install_fast_tracepoint_jump_pad
6669 (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector,
6670 CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry,
6671 CORE_ADDR *trampoline, ULONGEST *trampoline_size,
6672 unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size,
6673 CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end,
6674 char *err)
fa593d66
PA
6675{
6676 return (*the_low_target.install_fast_tracepoint_jump_pad)
6677 (tpoint, tpaddr, collector, lockaddr, orig_size,
405f8e94
SS
6678 jump_entry, trampoline, trampoline_size,
6679 jjump_pad_insn, jjump_pad_insn_size,
6680 adjusted_insn_addr, adjusted_insn_addr_end,
6681 err);
fa593d66
PA
6682}
6683
345dafad
TBA
6684emit_ops *
6685linux_process_target::emit_ops ()
6a271cae
PA
6686{
6687 if (the_low_target.emit_ops != NULL)
6688 return (*the_low_target.emit_ops) ();
6689 else
6690 return NULL;
6691}
6692
c23c9391
TBA
6693int
6694linux_process_target::get_min_fast_tracepoint_insn_len ()
405f8e94
SS
6695{
6696 return (*the_low_target.get_min_fast_tracepoint_insn_len) ();
6697}
6698
2268b414
JK
6699/* Extract &phdr and num_phdr in the inferior. Return 0 on success. */
6700
6701static int
6702get_phdr_phnum_from_proc_auxv (const int pid, const int is_elf64,
6703 CORE_ADDR *phdr_memaddr, int *num_phdr)
6704{
6705 char filename[PATH_MAX];
6706 int fd;
6707 const int auxv_size = is_elf64
6708 ? sizeof (Elf64_auxv_t) : sizeof (Elf32_auxv_t);
6709 char buf[sizeof (Elf64_auxv_t)]; /* The larger of the two. */
6710
6711 xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
6712
6713 fd = open (filename, O_RDONLY);
6714 if (fd < 0)
6715 return 1;
6716
6717 *phdr_memaddr = 0;
6718 *num_phdr = 0;
6719 while (read (fd, buf, auxv_size) == auxv_size
6720 && (*phdr_memaddr == 0 || *num_phdr == 0))
6721 {
6722 if (is_elf64)
6723 {
6724 Elf64_auxv_t *const aux = (Elf64_auxv_t *) buf;
6725
6726 switch (aux->a_type)
6727 {
6728 case AT_PHDR:
6729 *phdr_memaddr = aux->a_un.a_val;
6730 break;
6731 case AT_PHNUM:
6732 *num_phdr = aux->a_un.a_val;
6733 break;
6734 }
6735 }
6736 else
6737 {
6738 Elf32_auxv_t *const aux = (Elf32_auxv_t *) buf;
6739
6740 switch (aux->a_type)
6741 {
6742 case AT_PHDR:
6743 *phdr_memaddr = aux->a_un.a_val;
6744 break;
6745 case AT_PHNUM:
6746 *num_phdr = aux->a_un.a_val;
6747 break;
6748 }
6749 }
6750 }
6751
6752 close (fd);
6753
6754 if (*phdr_memaddr == 0 || *num_phdr == 0)
6755 {
6756 warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: "
6757 "phdr_memaddr = %ld, phdr_num = %d",
6758 (long) *phdr_memaddr, *num_phdr);
6759 return 2;
6760 }
6761
6762 return 0;
6763}
6764
6765/* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present. */
6766
6767static CORE_ADDR
6768get_dynamic (const int pid, const int is_elf64)
6769{
6770 CORE_ADDR phdr_memaddr, relocation;
db1ff28b 6771 int num_phdr, i;
2268b414 6772 unsigned char *phdr_buf;
db1ff28b 6773 const int phdr_size = is_elf64 ? sizeof (Elf64_Phdr) : sizeof (Elf32_Phdr);
2268b414
JK
6774
6775 if (get_phdr_phnum_from_proc_auxv (pid, is_elf64, &phdr_memaddr, &num_phdr))
6776 return 0;
6777
6778 gdb_assert (num_phdr < 100); /* Basic sanity check. */
224c3ddb 6779 phdr_buf = (unsigned char *) alloca (num_phdr * phdr_size);
2268b414
JK
6780
6781 if (linux_read_memory (phdr_memaddr, phdr_buf, num_phdr * phdr_size))
6782 return 0;
6783
6784 /* Compute relocation: it is expected to be 0 for "regular" executables,
6785 non-zero for PIE ones. */
6786 relocation = -1;
db1ff28b
JK
6787 for (i = 0; relocation == -1 && i < num_phdr; i++)
6788 if (is_elf64)
6789 {
6790 Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
6791
6792 if (p->p_type == PT_PHDR)
6793 relocation = phdr_memaddr - p->p_vaddr;
6794 }
6795 else
6796 {
6797 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
6798
6799 if (p->p_type == PT_PHDR)
6800 relocation = phdr_memaddr - p->p_vaddr;
6801 }
6802
2268b414
JK
6803 if (relocation == -1)
6804 {
e237a7e2
JK
6805 /* PT_PHDR is optional, but necessary for PIE in general. Fortunately
6806 any real world executables, including PIE executables, have always
6807 PT_PHDR present. PT_PHDR is not present in some shared libraries or
6808 in fpc (Free Pascal 2.4) binaries but neither of those have a need for
6809 or present DT_DEBUG anyway (fpc binaries are statically linked).
6810
6811 Therefore if there exists DT_DEBUG there is always also PT_PHDR.
6812
6813 GDB could find RELOCATION also from AT_ENTRY - e_entry. */
6814
2268b414
JK
6815 return 0;
6816 }
6817
db1ff28b
JK
6818 for (i = 0; i < num_phdr; i++)
6819 {
6820 if (is_elf64)
6821 {
6822 Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
6823
6824 if (p->p_type == PT_DYNAMIC)
6825 return p->p_vaddr + relocation;
6826 }
6827 else
6828 {
6829 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
2268b414 6830
db1ff28b
JK
6831 if (p->p_type == PT_DYNAMIC)
6832 return p->p_vaddr + relocation;
6833 }
6834 }
2268b414
JK
6835
6836 return 0;
6837}
6838
6839/* Return &_r_debug in the inferior, or -1 if not present. Return value
367ba2c2
MR
6840 can be 0 if the inferior does not yet have the library list initialized.
6841 We look for DT_MIPS_RLD_MAP first. MIPS executables use this instead of
6842 DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too. */
2268b414
JK
6843
6844static CORE_ADDR
6845get_r_debug (const int pid, const int is_elf64)
6846{
6847 CORE_ADDR dynamic_memaddr;
6848 const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn);
6849 unsigned char buf[sizeof (Elf64_Dyn)]; /* The larger of the two. */
367ba2c2 6850 CORE_ADDR map = -1;
2268b414
JK
6851
6852 dynamic_memaddr = get_dynamic (pid, is_elf64);
6853 if (dynamic_memaddr == 0)
367ba2c2 6854 return map;
2268b414
JK
6855
6856 while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0)
6857 {
6858 if (is_elf64)
6859 {
6860 Elf64_Dyn *const dyn = (Elf64_Dyn *) buf;
a738da3a 6861#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL
367ba2c2
MR
6862 union
6863 {
6864 Elf64_Xword map;
6865 unsigned char buf[sizeof (Elf64_Xword)];
6866 }
6867 rld_map;
a738da3a
MF
6868#endif
6869#ifdef DT_MIPS_RLD_MAP
367ba2c2
MR
6870 if (dyn->d_tag == DT_MIPS_RLD_MAP)
6871 {
6872 if (linux_read_memory (dyn->d_un.d_val,
6873 rld_map.buf, sizeof (rld_map.buf)) == 0)
6874 return rld_map.map;
6875 else
6876 break;
6877 }
75f62ce7 6878#endif /* DT_MIPS_RLD_MAP */
a738da3a
MF
6879#ifdef DT_MIPS_RLD_MAP_REL
6880 if (dyn->d_tag == DT_MIPS_RLD_MAP_REL)
6881 {
6882 if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr,
6883 rld_map.buf, sizeof (rld_map.buf)) == 0)
6884 return rld_map.map;
6885 else
6886 break;
6887 }
6888#endif /* DT_MIPS_RLD_MAP_REL */
2268b414 6889
367ba2c2
MR
6890 if (dyn->d_tag == DT_DEBUG && map == -1)
6891 map = dyn->d_un.d_val;
2268b414
JK
6892
6893 if (dyn->d_tag == DT_NULL)
6894 break;
6895 }
6896 else
6897 {
6898 Elf32_Dyn *const dyn = (Elf32_Dyn *) buf;
a738da3a 6899#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL
367ba2c2
MR
6900 union
6901 {
6902 Elf32_Word map;
6903 unsigned char buf[sizeof (Elf32_Word)];
6904 }
6905 rld_map;
a738da3a
MF
6906#endif
6907#ifdef DT_MIPS_RLD_MAP
367ba2c2
MR
6908 if (dyn->d_tag == DT_MIPS_RLD_MAP)
6909 {
6910 if (linux_read_memory (dyn->d_un.d_val,
6911 rld_map.buf, sizeof (rld_map.buf)) == 0)
6912 return rld_map.map;
6913 else
6914 break;
6915 }
75f62ce7 6916#endif /* DT_MIPS_RLD_MAP */
a738da3a
MF
6917#ifdef DT_MIPS_RLD_MAP_REL
6918 if (dyn->d_tag == DT_MIPS_RLD_MAP_REL)
6919 {
6920 if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr,
6921 rld_map.buf, sizeof (rld_map.buf)) == 0)
6922 return rld_map.map;
6923 else
6924 break;
6925 }
6926#endif /* DT_MIPS_RLD_MAP_REL */
2268b414 6927
367ba2c2
MR
6928 if (dyn->d_tag == DT_DEBUG && map == -1)
6929 map = dyn->d_un.d_val;
2268b414
JK
6930
6931 if (dyn->d_tag == DT_NULL)
6932 break;
6933 }
6934
6935 dynamic_memaddr += dyn_size;
6936 }
6937
367ba2c2 6938 return map;
2268b414
JK
6939}
6940
6941/* Read one pointer from MEMADDR in the inferior. */
6942
6943static int
6944read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size)
6945{
485f1ee4
PA
6946 int ret;
6947
6948 /* Go through a union so this works on either big or little endian
6949 hosts, when the inferior's pointer size is smaller than the size
6950 of CORE_ADDR. It is assumed the inferior's endianness is the
6951 same of the superior's. */
6952 union
6953 {
6954 CORE_ADDR core_addr;
6955 unsigned int ui;
6956 unsigned char uc;
6957 } addr;
6958
6959 ret = linux_read_memory (memaddr, &addr.uc, ptr_size);
6960 if (ret == 0)
6961 {
6962 if (ptr_size == sizeof (CORE_ADDR))
6963 *ptr = addr.core_addr;
6964 else if (ptr_size == sizeof (unsigned int))
6965 *ptr = addr.ui;
6966 else
6967 gdb_assert_not_reached ("unhandled pointer size");
6968 }
6969 return ret;
2268b414
JK
6970}
6971
974387bb
TBA
6972bool
6973linux_process_target::supports_qxfer_libraries_svr4 ()
6974{
6975 return true;
6976}
6977
2268b414
JK
6978struct link_map_offsets
6979 {
6980 /* Offset and size of r_debug.r_version. */
6981 int r_version_offset;
6982
6983 /* Offset and size of r_debug.r_map. */
6984 int r_map_offset;
6985
6986 /* Offset to l_addr field in struct link_map. */
6987 int l_addr_offset;
6988
6989 /* Offset to l_name field in struct link_map. */
6990 int l_name_offset;
6991
6992 /* Offset to l_ld field in struct link_map. */
6993 int l_ld_offset;
6994
6995 /* Offset to l_next field in struct link_map. */
6996 int l_next_offset;
6997
6998 /* Offset to l_prev field in struct link_map. */
6999 int l_prev_offset;
7000 };
7001
fb723180 7002/* Construct qXfer:libraries-svr4:read reply. */
2268b414 7003
974387bb
TBA
7004int
7005linux_process_target::qxfer_libraries_svr4 (const char *annex,
7006 unsigned char *readbuf,
7007 unsigned const char *writebuf,
7008 CORE_ADDR offset, int len)
2268b414 7009{
fe978cb0 7010 struct process_info_private *const priv = current_process ()->priv;
2268b414
JK
7011 char filename[PATH_MAX];
7012 int pid, is_elf64;
7013
7014 static const struct link_map_offsets lmo_32bit_offsets =
7015 {
7016 0, /* r_version offset. */
7017 4, /* r_debug.r_map offset. */
7018 0, /* l_addr offset in link_map. */
7019 4, /* l_name offset in link_map. */
7020 8, /* l_ld offset in link_map. */
7021 12, /* l_next offset in link_map. */
7022 16 /* l_prev offset in link_map. */
7023 };
7024
7025 static const struct link_map_offsets lmo_64bit_offsets =
7026 {
7027 0, /* r_version offset. */
7028 8, /* r_debug.r_map offset. */
7029 0, /* l_addr offset in link_map. */
7030 8, /* l_name offset in link_map. */
7031 16, /* l_ld offset in link_map. */
7032 24, /* l_next offset in link_map. */
7033 32 /* l_prev offset in link_map. */
7034 };
7035 const struct link_map_offsets *lmo;
214d508e 7036 unsigned int machine;
b1fbec62
GB
7037 int ptr_size;
7038 CORE_ADDR lm_addr = 0, lm_prev = 0;
b1fbec62
GB
7039 CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev;
7040 int header_done = 0;
2268b414
JK
7041
7042 if (writebuf != NULL)
7043 return -2;
7044 if (readbuf == NULL)
7045 return -1;
7046
0bfdf32f 7047 pid = lwpid_of (current_thread);
2268b414 7048 xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid);
214d508e 7049 is_elf64 = elf_64_file_p (filename, &machine);
2268b414 7050 lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets;
b1fbec62 7051 ptr_size = is_elf64 ? 8 : 4;
2268b414 7052
b1fbec62
GB
7053 while (annex[0] != '\0')
7054 {
7055 const char *sep;
7056 CORE_ADDR *addrp;
da4ae14a 7057 int name_len;
2268b414 7058
b1fbec62
GB
7059 sep = strchr (annex, '=');
7060 if (sep == NULL)
7061 break;
0c5bf5a9 7062
da4ae14a
TT
7063 name_len = sep - annex;
7064 if (name_len == 5 && startswith (annex, "start"))
b1fbec62 7065 addrp = &lm_addr;
da4ae14a 7066 else if (name_len == 4 && startswith (annex, "prev"))
b1fbec62
GB
7067 addrp = &lm_prev;
7068 else
7069 {
7070 annex = strchr (sep, ';');
7071 if (annex == NULL)
7072 break;
7073 annex++;
7074 continue;
7075 }
7076
7077 annex = decode_address_to_semicolon (addrp, sep + 1);
2268b414 7078 }
b1fbec62
GB
7079
7080 if (lm_addr == 0)
2268b414 7081 {
b1fbec62
GB
7082 int r_version = 0;
7083
7084 if (priv->r_debug == 0)
7085 priv->r_debug = get_r_debug (pid, is_elf64);
7086
7087 /* We failed to find DT_DEBUG. Such situation will not change
7088 for this inferior - do not retry it. Report it to GDB as
7089 E01, see for the reasons at the GDB solib-svr4.c side. */
7090 if (priv->r_debug == (CORE_ADDR) -1)
7091 return -1;
7092
7093 if (priv->r_debug != 0)
2268b414 7094 {
b1fbec62
GB
7095 if (linux_read_memory (priv->r_debug + lmo->r_version_offset,
7096 (unsigned char *) &r_version,
7097 sizeof (r_version)) != 0
7098 || r_version != 1)
7099 {
7100 warning ("unexpected r_debug version %d", r_version);
7101 }
7102 else if (read_one_ptr (priv->r_debug + lmo->r_map_offset,
7103 &lm_addr, ptr_size) != 0)
7104 {
7105 warning ("unable to read r_map from 0x%lx",
7106 (long) priv->r_debug + lmo->r_map_offset);
7107 }
2268b414 7108 }
b1fbec62 7109 }
2268b414 7110
f6e8a41e 7111 std::string document = "<library-list-svr4 version=\"1.0\"";
b1fbec62
GB
7112
7113 while (lm_addr
7114 && read_one_ptr (lm_addr + lmo->l_name_offset,
7115 &l_name, ptr_size) == 0
7116 && read_one_ptr (lm_addr + lmo->l_addr_offset,
7117 &l_addr, ptr_size) == 0
7118 && read_one_ptr (lm_addr + lmo->l_ld_offset,
7119 &l_ld, ptr_size) == 0
7120 && read_one_ptr (lm_addr + lmo->l_prev_offset,
7121 &l_prev, ptr_size) == 0
7122 && read_one_ptr (lm_addr + lmo->l_next_offset,
7123 &l_next, ptr_size) == 0)
7124 {
7125 unsigned char libname[PATH_MAX];
7126
7127 if (lm_prev != l_prev)
2268b414 7128 {
b1fbec62
GB
7129 warning ("Corrupted shared library list: 0x%lx != 0x%lx",
7130 (long) lm_prev, (long) l_prev);
7131 break;
2268b414
JK
7132 }
7133
d878444c
JK
7134 /* Ignore the first entry even if it has valid name as the first entry
7135 corresponds to the main executable. The first entry should not be
7136 skipped if the dynamic loader was loaded late by a static executable
7137 (see solib-svr4.c parameter ignore_first). But in such case the main
7138 executable does not have PT_DYNAMIC present and this function already
7139 exited above due to failed get_r_debug. */
7140 if (lm_prev == 0)
f6e8a41e 7141 string_appendf (document, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
d878444c
JK
7142 else
7143 {
7144 /* Not checking for error because reading may stop before
7145 we've got PATH_MAX worth of characters. */
7146 libname[0] = '\0';
7147 linux_read_memory (l_name, libname, sizeof (libname) - 1);
7148 libname[sizeof (libname) - 1] = '\0';
7149 if (libname[0] != '\0')
2268b414 7150 {
d878444c
JK
7151 if (!header_done)
7152 {
7153 /* Terminate `<library-list-svr4'. */
f6e8a41e 7154 document += '>';
d878444c
JK
7155 header_done = 1;
7156 }
2268b414 7157
e6a58aa8
SM
7158 string_appendf (document, "<library name=\"");
7159 xml_escape_text_append (&document, (char *) libname);
7160 string_appendf (document, "\" lm=\"0x%lx\" "
f6e8a41e 7161 "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
e6a58aa8
SM
7162 (unsigned long) lm_addr, (unsigned long) l_addr,
7163 (unsigned long) l_ld);
d878444c 7164 }
0afae3cf 7165 }
b1fbec62
GB
7166
7167 lm_prev = lm_addr;
7168 lm_addr = l_next;
2268b414
JK
7169 }
7170
b1fbec62
GB
7171 if (!header_done)
7172 {
7173 /* Empty list; terminate `<library-list-svr4'. */
f6e8a41e 7174 document += "/>";
b1fbec62
GB
7175 }
7176 else
f6e8a41e 7177 document += "</library-list-svr4>";
b1fbec62 7178
f6e8a41e 7179 int document_len = document.length ();
2268b414
JK
7180 if (offset < document_len)
7181 document_len -= offset;
7182 else
7183 document_len = 0;
7184 if (len > document_len)
7185 len = document_len;
7186
f6e8a41e 7187 memcpy (readbuf, document.data () + offset, len);
2268b414
JK
7188
7189 return len;
7190}
7191
9accd112
MM
7192#ifdef HAVE_LINUX_BTRACE
7193
79597bdd
TBA
7194btrace_target_info *
7195linux_process_target::enable_btrace (ptid_t ptid,
7196 const btrace_config *conf)
7197{
7198 return linux_enable_btrace (ptid, conf);
7199}
7200
969c39fb 7201/* See to_disable_btrace target method. */
9accd112 7202
79597bdd
TBA
7203int
7204linux_process_target::disable_btrace (btrace_target_info *tinfo)
969c39fb
MM
7205{
7206 enum btrace_error err;
7207
7208 err = linux_disable_btrace (tinfo);
7209 return (err == BTRACE_ERR_NONE ? 0 : -1);
7210}
7211
bc504a31 7212/* Encode an Intel Processor Trace configuration. */
b20a6524
MM
7213
7214static void
7215linux_low_encode_pt_config (struct buffer *buffer,
7216 const struct btrace_data_pt_config *config)
7217{
7218 buffer_grow_str (buffer, "<pt-config>\n");
7219
7220 switch (config->cpu.vendor)
7221 {
7222 case CV_INTEL:
7223 buffer_xml_printf (buffer, "<cpu vendor=\"GenuineIntel\" family=\"%u\" "
7224 "model=\"%u\" stepping=\"%u\"/>\n",
7225 config->cpu.family, config->cpu.model,
7226 config->cpu.stepping);
7227 break;
7228
7229 default:
7230 break;
7231 }
7232
7233 buffer_grow_str (buffer, "</pt-config>\n");
7234}
7235
7236/* Encode a raw buffer. */
7237
7238static void
7239linux_low_encode_raw (struct buffer *buffer, const gdb_byte *data,
7240 unsigned int size)
7241{
7242 if (size == 0)
7243 return;
7244
268a13a5 7245 /* We use hex encoding - see gdbsupport/rsp-low.h. */
b20a6524
MM
7246 buffer_grow_str (buffer, "<raw>\n");
7247
7248 while (size-- > 0)
7249 {
7250 char elem[2];
7251
7252 elem[0] = tohex ((*data >> 4) & 0xf);
7253 elem[1] = tohex (*data++ & 0xf);
7254
7255 buffer_grow (buffer, elem, 2);
7256 }
7257
7258 buffer_grow_str (buffer, "</raw>\n");
7259}
7260
969c39fb
MM
7261/* See to_read_btrace target method. */
7262
79597bdd
TBA
7263int
7264linux_process_target::read_btrace (btrace_target_info *tinfo,
7265 buffer *buffer,
7266 enum btrace_read_type type)
9accd112 7267{
734b0e4b 7268 struct btrace_data btrace;
969c39fb 7269 enum btrace_error err;
9accd112 7270
969c39fb
MM
7271 err = linux_read_btrace (&btrace, tinfo, type);
7272 if (err != BTRACE_ERR_NONE)
7273 {
7274 if (err == BTRACE_ERR_OVERFLOW)
7275 buffer_grow_str0 (buffer, "E.Overflow.");
7276 else
7277 buffer_grow_str0 (buffer, "E.Generic Error.");
7278
8dcc53b3 7279 return -1;
969c39fb 7280 }
9accd112 7281
734b0e4b
MM
7282 switch (btrace.format)
7283 {
7284 case BTRACE_FORMAT_NONE:
7285 buffer_grow_str0 (buffer, "E.No Trace.");
8dcc53b3 7286 return -1;
734b0e4b
MM
7287
7288 case BTRACE_FORMAT_BTS:
7289 buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n");
7290 buffer_grow_str (buffer, "<btrace version=\"1.0\">\n");
9accd112 7291
46f29a9a 7292 for (const btrace_block &block : *btrace.variant.bts.blocks)
734b0e4b 7293 buffer_xml_printf (buffer, "<block begin=\"0x%s\" end=\"0x%s\"/>\n",
46f29a9a 7294 paddress (block.begin), paddress (block.end));
9accd112 7295
734b0e4b
MM
7296 buffer_grow_str0 (buffer, "</btrace>\n");
7297 break;
7298
b20a6524
MM
7299 case BTRACE_FORMAT_PT:
7300 buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n");
7301 buffer_grow_str (buffer, "<btrace version=\"1.0\">\n");
7302 buffer_grow_str (buffer, "<pt>\n");
7303
7304 linux_low_encode_pt_config (buffer, &btrace.variant.pt.config);
9accd112 7305
b20a6524
MM
7306 linux_low_encode_raw (buffer, btrace.variant.pt.data,
7307 btrace.variant.pt.size);
7308
7309 buffer_grow_str (buffer, "</pt>\n");
7310 buffer_grow_str0 (buffer, "</btrace>\n");
7311 break;
7312
7313 default:
7314 buffer_grow_str0 (buffer, "E.Unsupported Trace Format.");
8dcc53b3 7315 return -1;
734b0e4b 7316 }
969c39fb
MM
7317
7318 return 0;
9accd112 7319}
f4abbc16
MM
7320
7321/* See to_btrace_conf target method. */
7322
79597bdd
TBA
7323int
7324linux_process_target::read_btrace_conf (const btrace_target_info *tinfo,
7325 buffer *buffer)
f4abbc16
MM
7326{
7327 const struct btrace_config *conf;
7328
7329 buffer_grow_str (buffer, "<!DOCTYPE btrace-conf SYSTEM \"btrace-conf.dtd\">\n");
7330 buffer_grow_str (buffer, "<btrace-conf version=\"1.0\">\n");
7331
7332 conf = linux_btrace_conf (tinfo);
7333 if (conf != NULL)
7334 {
7335 switch (conf->format)
7336 {
7337 case BTRACE_FORMAT_NONE:
7338 break;
7339
7340 case BTRACE_FORMAT_BTS:
d33501a5
MM
7341 buffer_xml_printf (buffer, "<bts");
7342 buffer_xml_printf (buffer, " size=\"0x%x\"", conf->bts.size);
7343 buffer_xml_printf (buffer, " />\n");
f4abbc16 7344 break;
b20a6524
MM
7345
7346 case BTRACE_FORMAT_PT:
7347 buffer_xml_printf (buffer, "<pt");
7348 buffer_xml_printf (buffer, " size=\"0x%x\"", conf->pt.size);
7349 buffer_xml_printf (buffer, "/>\n");
7350 break;
f4abbc16
MM
7351 }
7352 }
7353
7354 buffer_grow_str0 (buffer, "</btrace-conf>\n");
7355 return 0;
7356}
9accd112
MM
7357#endif /* HAVE_LINUX_BTRACE */
7358
7b669087
GB
7359/* See nat/linux-nat.h. */
7360
7361ptid_t
7362current_lwp_ptid (void)
7363{
7364 return ptid_of (current_thread);
7365}
7366
dd373349
AT
7367/* Implementation of the target_ops method "breakpoint_kind_from_pc". */
7368
d367006f
TBA
7369int
7370linux_process_target::breakpoint_kind_from_pc (CORE_ADDR *pcptr)
dd373349
AT
7371{
7372 if (the_low_target.breakpoint_kind_from_pc != NULL)
7373 return (*the_low_target.breakpoint_kind_from_pc) (pcptr);
7374 else
d367006f 7375 return process_target::breakpoint_kind_from_pc (pcptr);
dd373349
AT
7376}
7377
7378/* Implementation of the target_ops method "sw_breakpoint_from_kind". */
7379
d367006f
TBA
7380const gdb_byte *
7381linux_process_target::sw_breakpoint_from_kind (int kind, int *size)
dd373349
AT
7382{
7383 gdb_assert (the_low_target.sw_breakpoint_from_kind != NULL);
7384
7385 return (*the_low_target.sw_breakpoint_from_kind) (kind, size);
7386}
7387
769ef81f
AT
7388/* Implementation of the target_ops method
7389 "breakpoint_kind_from_current_state". */
7390
d367006f
TBA
7391int
7392linux_process_target::breakpoint_kind_from_current_state (CORE_ADDR *pcptr)
769ef81f
AT
7393{
7394 if (the_low_target.breakpoint_kind_from_current_state != NULL)
7395 return (*the_low_target.breakpoint_kind_from_current_state) (pcptr);
7396 else
d367006f 7397 return breakpoint_kind_from_pc (pcptr);
769ef81f
AT
7398}
7399
7f63b89b
TBA
7400const char *
7401linux_process_target::thread_name (ptid_t thread)
7402{
7403 return linux_proc_tid_get_name (thread);
7404}
7405
7406#if USE_THREAD_DB
7407bool
7408linux_process_target::thread_handle (ptid_t ptid, gdb_byte **handle,
7409 int *handle_len)
7410{
7411 return thread_db_thread_handle (ptid, handle, handle_len);
7412}
7413#endif
7414
276d4552
YQ
7415/* Default implementation of linux_target_ops method "set_pc" for
7416 32-bit pc register which is literally named "pc". */
7417
7418void
7419linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc)
7420{
7421 uint32_t newpc = pc;
7422
7423 supply_register_by_name (regcache, "pc", &newpc);
7424}
7425
7426/* Default implementation of linux_target_ops method "get_pc" for
7427 32-bit pc register which is literally named "pc". */
7428
7429CORE_ADDR
7430linux_get_pc_32bit (struct regcache *regcache)
7431{
7432 uint32_t pc;
7433
7434 collect_register_by_name (regcache, "pc", &pc);
7435 if (debug_threads)
7436 debug_printf ("stop pc is 0x%" PRIx32 "\n", pc);
7437 return pc;
7438}
7439
6f69e520
YQ
7440/* Default implementation of linux_target_ops method "set_pc" for
7441 64-bit pc register which is literally named "pc". */
7442
7443void
7444linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc)
7445{
7446 uint64_t newpc = pc;
7447
7448 supply_register_by_name (regcache, "pc", &newpc);
7449}
7450
7451/* Default implementation of linux_target_ops method "get_pc" for
7452 64-bit pc register which is literally named "pc". */
7453
7454CORE_ADDR
7455linux_get_pc_64bit (struct regcache *regcache)
7456{
7457 uint64_t pc;
7458
7459 collect_register_by_name (regcache, "pc", &pc);
7460 if (debug_threads)
7461 debug_printf ("stop pc is 0x%" PRIx64 "\n", pc);
7462 return pc;
7463}
7464
0570503d 7465/* See linux-low.h. */
974c89e0 7466
0570503d
PFC
7467int
7468linux_get_auxv (int wordsize, CORE_ADDR match, CORE_ADDR *valp)
974c89e0
AH
7469{
7470 gdb_byte *data = (gdb_byte *) alloca (2 * wordsize);
7471 int offset = 0;
7472
7473 gdb_assert (wordsize == 4 || wordsize == 8);
7474
eac215cc 7475 while (the_target->pt->read_auxv (offset, data, 2 * wordsize) == 2 * wordsize)
974c89e0
AH
7476 {
7477 if (wordsize == 4)
7478 {
0570503d 7479 uint32_t *data_p = (uint32_t *) data;
974c89e0 7480 if (data_p[0] == match)
0570503d
PFC
7481 {
7482 *valp = data_p[1];
7483 return 1;
7484 }
974c89e0
AH
7485 }
7486 else
7487 {
0570503d 7488 uint64_t *data_p = (uint64_t *) data;
974c89e0 7489 if (data_p[0] == match)
0570503d
PFC
7490 {
7491 *valp = data_p[1];
7492 return 1;
7493 }
974c89e0
AH
7494 }
7495
7496 offset += 2 * wordsize;
7497 }
7498
7499 return 0;
7500}
7501
7502/* See linux-low.h. */
7503
7504CORE_ADDR
7505linux_get_hwcap (int wordsize)
7506{
0570503d
PFC
7507 CORE_ADDR hwcap = 0;
7508 linux_get_auxv (wordsize, AT_HWCAP, &hwcap);
7509 return hwcap;
974c89e0
AH
7510}
7511
7512/* See linux-low.h. */
7513
7514CORE_ADDR
7515linux_get_hwcap2 (int wordsize)
7516{
0570503d
PFC
7517 CORE_ADDR hwcap2 = 0;
7518 linux_get_auxv (wordsize, AT_HWCAP2, &hwcap2);
7519 return hwcap2;
974c89e0 7520}
6f69e520 7521
5ef9273d
TBA
7522/* The linux target ops object. */
7523
7524static linux_process_target the_linux_target;
7525
5b6d1e4f 7526static process_stratum_target linux_target_ops = {
82075af2 7527 linux_supports_catch_syscall,
ae91f625 7528 linux_get_ipa_tdesc_idx,
5ef9273d 7529 &the_linux_target,
ce3a066d
DJ
7530};
7531
3aee8918
PA
7532#ifdef HAVE_LINUX_REGSETS
7533void
7534initialize_regsets_info (struct regsets_info *info)
7535{
7536 for (info->num_regsets = 0;
7537 info->regsets[info->num_regsets].size >= 0;
7538 info->num_regsets++)
7539 ;
3aee8918
PA
7540}
7541#endif
7542
da6d8c04
DJ
7543void
7544initialize_low (void)
7545{
bd99dc85 7546 struct sigaction sigchld_action;
dd373349 7547
bd99dc85 7548 memset (&sigchld_action, 0, sizeof (sigchld_action));
ce3a066d 7549 set_target_ops (&linux_target_ops);
dd373349 7550
aa7c7447 7551 linux_ptrace_init_warnings ();
1b919490 7552 linux_proc_init_warnings ();
bd99dc85
PA
7553
7554 sigchld_action.sa_handler = sigchld_handler;
7555 sigemptyset (&sigchld_action.sa_mask);
7556 sigchld_action.sa_flags = SA_RESTART;
7557 sigaction (SIGCHLD, &sigchld_action, NULL);
3aee8918
PA
7558
7559 initialize_low_arch ();
89245bc0
DB
7560
7561 linux_check_ptrace_features ();
da6d8c04 7562}