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