]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/gdbserver/linux-low.c
Provide string description of definition, visibility and resolution in LTO plug-in.
[thirdparty/binutils-gdb.git] / gdb / gdbserver / linux-low.c
CommitLineData
da6d8c04 1/* Low level interface to ptrace, for the remote server for GDB.
42a4f53d 2 Copyright (C) 1995-2019 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"
0747795c 22#include "common/agent.h"
de0d863e 23#include "tdesc.h"
0747795c
TT
24#include "common/rsp-low.h"
25#include "common/signals-state-save-restore.h"
96d7229d
LM
26#include "nat/linux-nat.h"
27#include "nat/linux-waitpid.h"
0747795c 28#include "common/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>
0747795c 46#include "common/filestuff.h"
c144c7a0 47#include "tracepoint.h"
533b0600 48#include "hostio.h"
276d4552 49#include <inttypes.h>
0747795c 50#include "common/common-inferior.h"
2090129c 51#include "nat/fork-inferior.h"
0747795c 52#include "common/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"
0747795c 104# include "common/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
754e3168
AH
954 lwp->thread = add_thread (ptid, lwp);
955
aa5ca48f 956 if (the_low_target.new_thread != NULL)
34c703da 957 the_low_target.new_thread (lwp);
aa5ca48f 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
df0da8a2
AH
1191 proc = linux_add_process (pid, 1);
1192
e3deef73
LM
1193 /* Attach to PID. We will check for other threads
1194 soon. */
7ae1a6a6
PA
1195 err = linux_attach_lwp (ptid);
1196 if (err != 0)
4d9b86e1 1197 {
df0da8a2 1198 remove_process (proc);
4d9b86e1 1199
df0da8a2 1200 std::string reason = linux_ptrace_attach_fail_reason_string (ptid, err);
4d9b86e1
SM
1201 error ("Cannot attach to process %ld: %s", pid, reason.c_str ());
1202 }
7ae1a6a6 1203
500c1d85
PA
1204 /* Don't ignore the initial SIGSTOP if we just attached to this
1205 process. It will be collected by wait shortly. */
fd79271b 1206 initial_thread = find_thread_ptid (ptid_t (pid, pid, 0));
500c1d85 1207 initial_thread->last_resume_kind = resume_stop;
0d62e5e8 1208
8784d563
PA
1209 /* We must attach to every LWP. If /proc is mounted, use that to
1210 find them now. On the one hand, the inferior may be using raw
1211 clone instead of using pthreads. On the other hand, even if it
1212 is using pthreads, GDB may not be connected yet (thread_db needs
1213 to do symbol lookups, through qSymbol). Also, thread_db walks
1214 structures in the inferior's address space to find the list of
1215 threads/LWPs, and those structures may well be corrupted. Note
1216 that once thread_db is loaded, we'll still use it to list threads
1217 and associate pthread info with each LWP. */
1218 linux_proc_attach_tgid_threads (pid, attach_proc_task_lwp_callback);
500c1d85
PA
1219
1220 /* GDB will shortly read the xml target description for this
1221 process, to figure out the process' architecture. But the target
1222 description is only filled in when the first process/thread in
1223 the thread group reports its initial PTRACE_ATTACH SIGSTOP. Do
1224 that now, otherwise, if GDB is fast enough, it could read the
1225 target description _before_ that initial stop. */
1226 if (non_stop)
1227 {
1228 struct lwp_info *lwp;
1229 int wstat, lwpid;
f2907e49 1230 ptid_t pid_ptid = ptid_t (pid);
500c1d85
PA
1231
1232 lwpid = linux_wait_for_event_filtered (pid_ptid, pid_ptid,
1233 &wstat, __WALL);
1234 gdb_assert (lwpid > 0);
1235
f2907e49 1236 lwp = find_lwp_pid (ptid_t (lwpid));
500c1d85
PA
1237
1238 if (!WIFSTOPPED (wstat) || WSTOPSIG (wstat) != SIGSTOP)
1239 {
1240 lwp->status_pending_p = 1;
1241 lwp->status_pending = wstat;
1242 }
1243
1244 initial_thread->last_resume_kind = resume_continue;
1245
1246 async_file_mark ();
1247
1248 gdb_assert (proc->tdesc != NULL);
1249 }
1250
95954743
PA
1251 return 0;
1252}
1253
95954743 1254static int
e4eb0dec 1255last_thread_of_process_p (int pid)
95954743 1256{
e4eb0dec 1257 bool seen_one = false;
95954743 1258
da4ae14a 1259 thread_info *thread = find_thread (pid, [&] (thread_info *thr_arg)
95954743 1260 {
e4eb0dec
SM
1261 if (!seen_one)
1262 {
1263 /* This is the first thread of this process we see. */
1264 seen_one = true;
1265 return false;
1266 }
1267 else
1268 {
1269 /* This is the second thread of this process we see. */
1270 return true;
1271 }
1272 });
da6d8c04 1273
e4eb0dec 1274 return thread == NULL;
95954743
PA
1275}
1276
da84f473
PA
1277/* Kill LWP. */
1278
1279static void
1280linux_kill_one_lwp (struct lwp_info *lwp)
1281{
d86d4aaf
DE
1282 struct thread_info *thr = get_lwp_thread (lwp);
1283 int pid = lwpid_of (thr);
da84f473
PA
1284
1285 /* PTRACE_KILL is unreliable. After stepping into a signal handler,
1286 there is no signal context, and ptrace(PTRACE_KILL) (or
1287 ptrace(PTRACE_CONT, SIGKILL), pretty much the same) acts like
1288 ptrace(CONT, pid, 0,0) and just resumes the tracee. A better
1289 alternative is to kill with SIGKILL. We only need one SIGKILL
1290 per process, not one for each thread. But since we still support
4a6ed09b
PA
1291 support debugging programs using raw clone without CLONE_THREAD,
1292 we send one for each thread. For years, we used PTRACE_KILL
1293 only, so we're being a bit paranoid about some old kernels where
1294 PTRACE_KILL might work better (dubious if there are any such, but
1295 that's why it's paranoia), so we try SIGKILL first, PTRACE_KILL
1296 second, and so we're fine everywhere. */
da84f473
PA
1297
1298 errno = 0;
69ff6be5 1299 kill_lwp (pid, SIGKILL);
da84f473 1300 if (debug_threads)
ce9e3fe7
PA
1301 {
1302 int save_errno = errno;
1303
1304 debug_printf ("LKL: kill_lwp (SIGKILL) %s, 0, 0 (%s)\n",
1305 target_pid_to_str (ptid_of (thr)),
1306 save_errno ? strerror (save_errno) : "OK");
1307 }
da84f473
PA
1308
1309 errno = 0;
b8e1b30e 1310 ptrace (PTRACE_KILL, pid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
da84f473 1311 if (debug_threads)
ce9e3fe7
PA
1312 {
1313 int save_errno = errno;
1314
1315 debug_printf ("LKL: PTRACE_KILL %s, 0, 0 (%s)\n",
1316 target_pid_to_str (ptid_of (thr)),
1317 save_errno ? strerror (save_errno) : "OK");
1318 }
da84f473
PA
1319}
1320
e76126e8
PA
1321/* Kill LWP and wait for it to die. */
1322
1323static void
1324kill_wait_lwp (struct lwp_info *lwp)
1325{
1326 struct thread_info *thr = get_lwp_thread (lwp);
e99b03dc 1327 int pid = ptid_of (thr).pid ();
e38504b3 1328 int lwpid = ptid_of (thr).lwp ();
e76126e8
PA
1329 int wstat;
1330 int res;
1331
1332 if (debug_threads)
1333 debug_printf ("kwl: killing lwp %d, for pid: %d\n", lwpid, pid);
1334
1335 do
1336 {
1337 linux_kill_one_lwp (lwp);
1338
1339 /* Make sure it died. Notes:
1340
1341 - The loop is most likely unnecessary.
1342
1343 - We don't use linux_wait_for_event as that could delete lwps
1344 while we're iterating over them. We're not interested in
1345 any pending status at this point, only in making sure all
1346 wait status on the kernel side are collected until the
1347 process is reaped.
1348
1349 - We don't use __WALL here as the __WALL emulation relies on
1350 SIGCHLD, and killing a stopped process doesn't generate
1351 one, nor an exit status.
1352 */
1353 res = my_waitpid (lwpid, &wstat, 0);
1354 if (res == -1 && errno == ECHILD)
1355 res = my_waitpid (lwpid, &wstat, __WCLONE);
1356 } while (res > 0 && WIFSTOPPED (wstat));
1357
586b02a9
PA
1358 /* Even if it was stopped, the child may have already disappeared.
1359 E.g., if it was killed by SIGKILL. */
1360 if (res < 0 && errno != ECHILD)
1361 perror_with_name ("kill_wait_lwp");
e76126e8
PA
1362}
1363
578290ec 1364/* Callback for `for_each_thread'. Kills an lwp of a given process,
da84f473 1365 except the leader. */
95954743 1366
578290ec
SM
1367static void
1368kill_one_lwp_callback (thread_info *thread, int pid)
da6d8c04 1369{
54a0b537 1370 struct lwp_info *lwp = get_thread_lwp (thread);
0d62e5e8 1371
fd500816
DJ
1372 /* We avoid killing the first thread here, because of a Linux kernel (at
1373 least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
1374 the children get a chance to be reaped, it will remain a zombie
1375 forever. */
95954743 1376
d86d4aaf 1377 if (lwpid_of (thread) == pid)
95954743
PA
1378 {
1379 if (debug_threads)
87ce2a04 1380 debug_printf ("lkop: is last of process %s\n",
9c80ecd6 1381 target_pid_to_str (thread->id));
578290ec 1382 return;
95954743 1383 }
fd500816 1384
e76126e8 1385 kill_wait_lwp (lwp);
da6d8c04
DJ
1386}
1387
95954743 1388static int
a780ef4f 1389linux_kill (process_info *process)
0d62e5e8 1390{
a780ef4f 1391 int pid = process->pid;
9d606399 1392
f9e39928
PA
1393 /* If we're killing a running inferior, make sure it is stopped
1394 first, as PTRACE_KILL will not work otherwise. */
7984d532 1395 stop_all_lwps (0, NULL);
f9e39928 1396
578290ec
SM
1397 for_each_thread (pid, [&] (thread_info *thread)
1398 {
1399 kill_one_lwp_callback (thread, pid);
1400 });
fd500816 1401
54a0b537 1402 /* See the comment in linux_kill_one_lwp. We did not kill the first
fd500816 1403 thread in the list, so do so now. */
a780ef4f 1404 lwp_info *lwp = find_lwp_pid (ptid_t (pid));
bd99dc85 1405
784867a5 1406 if (lwp == NULL)
fd500816 1407 {
784867a5 1408 if (debug_threads)
d86d4aaf
DE
1409 debug_printf ("lk_1: cannot find lwp for pid: %d\n",
1410 pid);
784867a5
JK
1411 }
1412 else
e76126e8 1413 kill_wait_lwp (lwp);
2d717e4f 1414
8336d594 1415 the_target->mourn (process);
f9e39928
PA
1416
1417 /* Since we presently can only stop all lwps of all processes, we
1418 need to unstop lwps of other processes. */
7984d532 1419 unstop_all_lwps (0, NULL);
95954743 1420 return 0;
0d62e5e8
DJ
1421}
1422
9b224c5e
PA
1423/* Get pending signal of THREAD, for detaching purposes. This is the
1424 signal the thread last stopped for, which we need to deliver to the
1425 thread when detaching, otherwise, it'd be suppressed/lost. */
1426
1427static int
1428get_detach_signal (struct thread_info *thread)
1429{
c12a5089 1430 client_state &cs = get_client_state ();
a493e3e2 1431 enum gdb_signal signo = GDB_SIGNAL_0;
9b224c5e
PA
1432 int status;
1433 struct lwp_info *lp = get_thread_lwp (thread);
1434
1435 if (lp->status_pending_p)
1436 status = lp->status_pending;
1437 else
1438 {
1439 /* If the thread had been suspended by gdbserver, and it stopped
1440 cleanly, then it'll have stopped with SIGSTOP. But we don't
1441 want to deliver that SIGSTOP. */
1442 if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
a493e3e2 1443 || thread->last_status.value.sig == GDB_SIGNAL_0)
9b224c5e
PA
1444 return 0;
1445
1446 /* Otherwise, we may need to deliver the signal we
1447 intercepted. */
1448 status = lp->last_status;
1449 }
1450
1451 if (!WIFSTOPPED (status))
1452 {
1453 if (debug_threads)
87ce2a04 1454 debug_printf ("GPS: lwp %s hasn't stopped: no pending signal\n",
d86d4aaf 1455 target_pid_to_str (ptid_of (thread)));
9b224c5e
PA
1456 return 0;
1457 }
1458
1459 /* Extended wait statuses aren't real SIGTRAPs. */
89a5711c 1460 if (WSTOPSIG (status) == SIGTRAP && linux_is_extended_waitstatus (status))
9b224c5e
PA
1461 {
1462 if (debug_threads)
87ce2a04
DE
1463 debug_printf ("GPS: lwp %s had stopped with extended "
1464 "status: no pending signal\n",
d86d4aaf 1465 target_pid_to_str (ptid_of (thread)));
9b224c5e
PA
1466 return 0;
1467 }
1468
2ea28649 1469 signo = gdb_signal_from_host (WSTOPSIG (status));
9b224c5e 1470
c12a5089 1471 if (cs.program_signals_p && !cs.program_signals[signo])
9b224c5e
PA
1472 {
1473 if (debug_threads)
87ce2a04 1474 debug_printf ("GPS: lwp %s had signal %s, but it is in nopass state\n",
d86d4aaf 1475 target_pid_to_str (ptid_of (thread)),
87ce2a04 1476 gdb_signal_to_string (signo));
9b224c5e
PA
1477 return 0;
1478 }
c12a5089 1479 else if (!cs.program_signals_p
9b224c5e
PA
1480 /* If we have no way to know which signals GDB does not
1481 want to have passed to the program, assume
1482 SIGTRAP/SIGINT, which is GDB's default. */
a493e3e2 1483 && (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT))
9b224c5e
PA
1484 {
1485 if (debug_threads)
87ce2a04
DE
1486 debug_printf ("GPS: lwp %s had signal %s, "
1487 "but we don't know if we should pass it. "
1488 "Default to not.\n",
d86d4aaf 1489 target_pid_to_str (ptid_of (thread)),
87ce2a04 1490 gdb_signal_to_string (signo));
9b224c5e
PA
1491 return 0;
1492 }
1493 else
1494 {
1495 if (debug_threads)
87ce2a04 1496 debug_printf ("GPS: lwp %s has pending signal %s: delivering it.\n",
d86d4aaf 1497 target_pid_to_str (ptid_of (thread)),
87ce2a04 1498 gdb_signal_to_string (signo));
9b224c5e
PA
1499
1500 return WSTOPSIG (status);
1501 }
1502}
1503
ced2dffb
PA
1504/* Detach from LWP. */
1505
1506static void
1507linux_detach_one_lwp (struct lwp_info *lwp)
6ad8ae5c 1508{
ced2dffb 1509 struct thread_info *thread = get_lwp_thread (lwp);
9b224c5e 1510 int sig;
ced2dffb 1511 int lwpid;
6ad8ae5c 1512
9b224c5e 1513 /* If there is a pending SIGSTOP, get rid of it. */
54a0b537 1514 if (lwp->stop_expected)
ae13219e 1515 {
9b224c5e 1516 if (debug_threads)
87ce2a04 1517 debug_printf ("Sending SIGCONT to %s\n",
d86d4aaf 1518 target_pid_to_str (ptid_of (thread)));
9b224c5e 1519
d86d4aaf 1520 kill_lwp (lwpid_of (thread), SIGCONT);
54a0b537 1521 lwp->stop_expected = 0;
ae13219e
DJ
1522 }
1523
9b224c5e
PA
1524 /* Pass on any pending signal for this thread. */
1525 sig = get_detach_signal (thread);
1526
ced2dffb
PA
1527 /* Preparing to resume may try to write registers, and fail if the
1528 lwp is zombie. If that happens, ignore the error. We'll handle
1529 it below, when detach fails with ESRCH. */
1530 TRY
1531 {
1532 /* Flush any pending changes to the process's registers. */
1533 regcache_invalidate_thread (thread);
1534
1535 /* Finally, let it resume. */
1536 if (the_low_target.prepare_to_resume != NULL)
1537 the_low_target.prepare_to_resume (lwp);
1538 }
1539 CATCH (ex, RETURN_MASK_ERROR)
1540 {
1541 if (!check_ptrace_stopped_lwp_gone (lwp))
1542 throw_exception (ex);
1543 }
1544 END_CATCH
1545
1546 lwpid = lwpid_of (thread);
1547 if (ptrace (PTRACE_DETACH, lwpid, (PTRACE_TYPE_ARG3) 0,
b8e1b30e 1548 (PTRACE_TYPE_ARG4) (long) sig) < 0)
ced2dffb
PA
1549 {
1550 int save_errno = errno;
1551
1552 /* We know the thread exists, so ESRCH must mean the lwp is
1553 zombie. This can happen if one of the already-detached
1554 threads exits the whole thread group. In that case we're
1555 still attached, and must reap the lwp. */
1556 if (save_errno == ESRCH)
1557 {
1558 int ret, status;
1559
1560 ret = my_waitpid (lwpid, &status, __WALL);
1561 if (ret == -1)
1562 {
1563 warning (_("Couldn't reap LWP %d while detaching: %s"),
1564 lwpid, strerror (errno));
1565 }
1566 else if (!WIFEXITED (status) && !WIFSIGNALED (status))
1567 {
1568 warning (_("Reaping LWP %d while detaching "
1569 "returned unexpected status 0x%x"),
1570 lwpid, status);
1571 }
1572 }
1573 else
1574 {
1575 error (_("Can't detach %s: %s"),
1576 target_pid_to_str (ptid_of (thread)),
1577 strerror (save_errno));
1578 }
1579 }
1580 else if (debug_threads)
1581 {
1582 debug_printf ("PTRACE_DETACH (%s, %s, 0) (OK)\n",
1583 target_pid_to_str (ptid_of (thread)),
1584 strsignal (sig));
1585 }
bd99dc85
PA
1586
1587 delete_lwp (lwp);
ced2dffb
PA
1588}
1589
798a38e8 1590/* Callback for for_each_thread. Detaches from non-leader threads of a
ced2dffb
PA
1591 given process. */
1592
798a38e8
SM
1593static void
1594linux_detach_lwp_callback (thread_info *thread)
ced2dffb 1595{
ced2dffb
PA
1596 /* We don't actually detach from the thread group leader just yet.
1597 If the thread group exits, we must reap the zombie clone lwps
1598 before we're able to reap the leader. */
798a38e8
SM
1599 if (thread->id.pid () == thread->id.lwp ())
1600 return;
ced2dffb 1601
798a38e8 1602 lwp_info *lwp = get_thread_lwp (thread);
ced2dffb 1603 linux_detach_one_lwp (lwp);
6ad8ae5c
DJ
1604}
1605
95954743 1606static int
ef2ddb33 1607linux_detach (process_info *process)
95954743 1608{
ced2dffb 1609 struct lwp_info *main_lwp;
95954743 1610
863d01bd
PA
1611 /* As there's a step over already in progress, let it finish first,
1612 otherwise nesting a stabilize_threads operation on top gets real
1613 messy. */
1614 complete_ongoing_step_over ();
1615
f9e39928
PA
1616 /* Stop all threads before detaching. First, ptrace requires that
1617 the thread is stopped to sucessfully detach. Second, thread_db
1618 may need to uninstall thread event breakpoints from memory, which
1619 only works with a stopped process anyway. */
7984d532 1620 stop_all_lwps (0, NULL);
f9e39928 1621
ca5c370d 1622#ifdef USE_THREAD_DB
8336d594 1623 thread_db_detach (process);
ca5c370d
PA
1624#endif
1625
fa593d66
PA
1626 /* Stabilize threads (move out of jump pads). */
1627 stabilize_threads ();
1628
ced2dffb
PA
1629 /* Detach from the clone lwps first. If the thread group exits just
1630 while we're detaching, we must reap the clone lwps before we're
1631 able to reap the leader. */
ef2ddb33 1632 for_each_thread (process->pid, linux_detach_lwp_callback);
ced2dffb 1633
ef2ddb33 1634 main_lwp = find_lwp_pid (ptid_t (process->pid));
ced2dffb 1635 linux_detach_one_lwp (main_lwp);
8336d594
PA
1636
1637 the_target->mourn (process);
f9e39928
PA
1638
1639 /* Since we presently can only stop all lwps of all processes, we
1640 need to unstop lwps of other processes. */
7984d532 1641 unstop_all_lwps (0, NULL);
f9e39928
PA
1642 return 0;
1643}
1644
1645/* Remove all LWPs that belong to process PROC from the lwp list. */
1646
8336d594
PA
1647static void
1648linux_mourn (struct process_info *process)
1649{
1650 struct process_info_private *priv;
1651
1652#ifdef USE_THREAD_DB
1653 thread_db_mourn (process);
1654#endif
1655
6b2a85da
SM
1656 for_each_thread (process->pid, [] (thread_info *thread)
1657 {
1658 delete_lwp (get_thread_lwp (thread));
1659 });
f9e39928 1660
8336d594 1661 /* Freeing all private data. */
fe978cb0 1662 priv = process->priv;
04ec7890
SM
1663 if (the_low_target.delete_process != NULL)
1664 the_low_target.delete_process (priv->arch_private);
1665 else
1666 gdb_assert (priv->arch_private == NULL);
8336d594 1667 free (priv);
fe978cb0 1668 process->priv = NULL;
505106cd
PA
1669
1670 remove_process (process);
8336d594
PA
1671}
1672
444d6139 1673static void
d105de22 1674linux_join (int pid)
444d6139 1675{
444d6139
PA
1676 int status, ret;
1677
1678 do {
d105de22 1679 ret = my_waitpid (pid, &status, 0);
444d6139
PA
1680 if (WIFEXITED (status) || WIFSIGNALED (status))
1681 break;
1682 } while (ret != -1 || errno != ECHILD);
1683}
1684
6ad8ae5c 1685/* Return nonzero if the given thread is still alive. */
0d62e5e8 1686static int
95954743 1687linux_thread_alive (ptid_t ptid)
0d62e5e8 1688{
95954743
PA
1689 struct lwp_info *lwp = find_lwp_pid (ptid);
1690
1691 /* We assume we always know if a thread exits. If a whole process
1692 exited but we still haven't been able to report it to GDB, we'll
1693 hold on to the last lwp of the dead process. */
1694 if (lwp != NULL)
00db26fa 1695 return !lwp_is_marked_dead (lwp);
0d62e5e8
DJ
1696 else
1697 return 0;
1698}
1699
582511be
PA
1700/* Return 1 if this lwp still has an interesting status pending. If
1701 not (e.g., it had stopped for a breakpoint that is gone), return
1702 false. */
1703
1704static int
1705thread_still_has_status_pending_p (struct thread_info *thread)
1706{
1707 struct lwp_info *lp = get_thread_lwp (thread);
1708
1709 if (!lp->status_pending_p)
1710 return 0;
1711
582511be 1712 if (thread->last_resume_kind != resume_stop
15c66dd6
PA
1713 && (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
1714 || lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT))
582511be
PA
1715 {
1716 struct thread_info *saved_thread;
1717 CORE_ADDR pc;
1718 int discard = 0;
1719
1720 gdb_assert (lp->last_status != 0);
1721
1722 pc = get_pc (lp);
1723
1724 saved_thread = current_thread;
1725 current_thread = thread;
1726
1727 if (pc != lp->stop_pc)
1728 {
1729 if (debug_threads)
1730 debug_printf ("PC of %ld changed\n",
1731 lwpid_of (thread));
1732 discard = 1;
1733 }
3e572f71
PA
1734
1735#if !USE_SIGTRAP_SIGINFO
15c66dd6 1736 else if (lp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT
582511be
PA
1737 && !(*the_low_target.breakpoint_at) (pc))
1738 {
1739 if (debug_threads)
1740 debug_printf ("previous SW breakpoint of %ld gone\n",
1741 lwpid_of (thread));
1742 discard = 1;
1743 }
15c66dd6 1744 else if (lp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT
582511be
PA
1745 && !hardware_breakpoint_inserted_here (pc))
1746 {
1747 if (debug_threads)
1748 debug_printf ("previous HW breakpoint of %ld gone\n",
1749 lwpid_of (thread));
1750 discard = 1;
1751 }
3e572f71 1752#endif
582511be
PA
1753
1754 current_thread = saved_thread;
1755
1756 if (discard)
1757 {
1758 if (debug_threads)
1759 debug_printf ("discarding pending breakpoint status\n");
1760 lp->status_pending_p = 0;
1761 return 0;
1762 }
1763 }
1764
1765 return 1;
1766}
1767
a681f9c9
PA
1768/* Returns true if LWP is resumed from the client's perspective. */
1769
1770static int
1771lwp_resumed (struct lwp_info *lwp)
1772{
1773 struct thread_info *thread = get_lwp_thread (lwp);
1774
1775 if (thread->last_resume_kind != resume_stop)
1776 return 1;
1777
1778 /* Did gdb send us a `vCont;t', but we haven't reported the
1779 corresponding stop to gdb yet? If so, the thread is still
1780 resumed/running from gdb's perspective. */
1781 if (thread->last_resume_kind == resume_stop
1782 && thread->last_status.kind == TARGET_WAITKIND_IGNORE)
1783 return 1;
1784
1785 return 0;
1786}
1787
83e1b6c1
SM
1788/* Return true if this lwp has an interesting status pending. */
1789static bool
1790status_pending_p_callback (thread_info *thread, ptid_t ptid)
0d62e5e8 1791{
582511be 1792 struct lwp_info *lp = get_thread_lwp (thread);
95954743
PA
1793
1794 /* Check if we're only interested in events from a specific process
afa8d396 1795 or a specific LWP. */
83e1b6c1 1796 if (!thread->id.matches (ptid))
95954743 1797 return 0;
0d62e5e8 1798
a681f9c9
PA
1799 if (!lwp_resumed (lp))
1800 return 0;
1801
582511be
PA
1802 if (lp->status_pending_p
1803 && !thread_still_has_status_pending_p (thread))
1804 {
1805 linux_resume_one_lwp (lp, lp->stepping, GDB_SIGNAL_0, NULL);
1806 return 0;
1807 }
0d62e5e8 1808
582511be 1809 return lp->status_pending_p;
0d62e5e8
DJ
1810}
1811
95954743
PA
1812struct lwp_info *
1813find_lwp_pid (ptid_t ptid)
1814{
da4ae14a 1815 thread_info *thread = find_thread ([&] (thread_info *thr_arg)
454296a2
SM
1816 {
1817 int lwp = ptid.lwp () != 0 ? ptid.lwp () : ptid.pid ();
da4ae14a 1818 return thr_arg->id.lwp () == lwp;
454296a2 1819 });
d86d4aaf
DE
1820
1821 if (thread == NULL)
1822 return NULL;
1823
9c80ecd6 1824 return get_thread_lwp (thread);
95954743
PA
1825}
1826
fa96cb38 1827/* Return the number of known LWPs in the tgid given by PID. */
0d62e5e8 1828
fa96cb38
PA
1829static int
1830num_lwps (int pid)
1831{
fa96cb38 1832 int count = 0;
0d62e5e8 1833
4d3bb80e
SM
1834 for_each_thread (pid, [&] (thread_info *thread)
1835 {
9c80ecd6 1836 count++;
4d3bb80e 1837 });
3aee8918 1838
fa96cb38
PA
1839 return count;
1840}
d61ddec4 1841
6d4ee8c6
GB
1842/* See nat/linux-nat.h. */
1843
1844struct lwp_info *
1845iterate_over_lwps (ptid_t filter,
d3a70e03 1846 gdb::function_view<iterate_over_lwps_ftype> callback)
6d4ee8c6 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 1851
d3a70e03 1852 return callback (lwp);
6d1e5673 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 {
1ef53e6b
AH
5361 if (errno == EIO
5362 || (errno == EINVAL && regset->type == OPTIONAL_REGS))
58caa3dc 5363 {
1ef53e6b
AH
5364 /* If we get EIO on a regset, or an EINVAL and the regset is
5365 optional, do not try it again for this process mode. */
030031ee 5366 disable_regset (regsets_info, regset);
58caa3dc 5367 }
e5a9158d
AA
5368 else if (errno == ENODATA)
5369 {
5370 /* ENODATA may be returned if the regset is currently
5371 not "active". This can happen in normal operation,
5372 so suppress the warning in this case. */
5373 }
fcd4a73d
YQ
5374 else if (errno == ESRCH)
5375 {
5376 /* At this point, ESRCH should mean the process is
5377 already gone, in which case we simply ignore attempts
5378 to read its registers. */
5379 }
58caa3dc
DJ
5380 else
5381 {
0d62e5e8 5382 char s[256];
95954743
PA
5383 sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d",
5384 pid);
0d62e5e8 5385 perror (s);
58caa3dc
DJ
5386 }
5387 }
098dbe61
AA
5388 else
5389 {
5390 if (regset->type == GENERAL_REGS)
5391 saw_general_regs = 1;
5392 regset->store_function (regcache, buf);
5393 }
fdeb2a12 5394 free (buf);
58caa3dc 5395 }
e9d25b98
DJ
5396 if (saw_general_regs)
5397 return 0;
5398 else
5399 return 1;
58caa3dc
DJ
5400}
5401
5402static int
3aee8918
PA
5403regsets_store_inferior_registers (struct regsets_info *regsets_info,
5404 struct regcache *regcache)
58caa3dc
DJ
5405{
5406 struct regset_info *regset;
e9d25b98 5407 int saw_general_regs = 0;
95954743 5408 int pid;
1570b33e 5409 struct iovec iov;
58caa3dc 5410
0bfdf32f 5411 pid = lwpid_of (current_thread);
28eef672 5412 for (regset = regsets_info->regsets; regset->size >= 0; regset++)
58caa3dc 5413 {
1570b33e
L
5414 void *buf, *data;
5415 int nt_type, res;
58caa3dc 5416
feea5f36
AA
5417 if (regset->size == 0 || regset_disabled (regsets_info, regset)
5418 || regset->fill_function == NULL)
28eef672 5419 continue;
58caa3dc 5420
bca929d3 5421 buf = xmalloc (regset->size);
545587ee
DJ
5422
5423 /* First fill the buffer with the current register set contents,
5424 in case there are any items in the kernel's regset that are
5425 not in gdbserver's regcache. */
1570b33e
L
5426
5427 nt_type = regset->nt_type;
5428 if (nt_type)
5429 {
5430 iov.iov_base = buf;
5431 iov.iov_len = regset->size;
5432 data = (void *) &iov;
5433 }
5434 else
5435 data = buf;
5436
dfb64f85 5437#ifndef __sparc__
f15f9948 5438 res = ptrace (regset->get_request, pid,
b8e1b30e 5439 (PTRACE_TYPE_ARG3) (long) nt_type, data);
dfb64f85 5440#else
689cc2ae 5441 res = ptrace (regset->get_request, pid, data, nt_type);
dfb64f85 5442#endif
545587ee
DJ
5443
5444 if (res == 0)
5445 {
5446 /* Then overlay our cached registers on that. */
442ea881 5447 regset->fill_function (regcache, buf);
545587ee
DJ
5448
5449 /* Only now do we write the register set. */
dfb64f85 5450#ifndef __sparc__
f15f9948 5451 res = ptrace (regset->set_request, pid,
b8e1b30e 5452 (PTRACE_TYPE_ARG3) (long) nt_type, data);
dfb64f85 5453#else
1570b33e 5454 res = ptrace (regset->set_request, pid, data, nt_type);
dfb64f85 5455#endif
545587ee
DJ
5456 }
5457
58caa3dc
DJ
5458 if (res < 0)
5459 {
1ef53e6b
AH
5460 if (errno == EIO
5461 || (errno == EINVAL && regset->type == OPTIONAL_REGS))
58caa3dc 5462 {
1ef53e6b
AH
5463 /* If we get EIO on a regset, or an EINVAL and the regset is
5464 optional, do not try it again for this process mode. */
030031ee 5465 disable_regset (regsets_info, regset);
58caa3dc 5466 }
3221518c
UW
5467 else if (errno == ESRCH)
5468 {
1b3f6016
PA
5469 /* At this point, ESRCH should mean the process is
5470 already gone, in which case we simply ignore attempts
5471 to change its registers. See also the related
5472 comment in linux_resume_one_lwp. */
fdeb2a12 5473 free (buf);
3221518c
UW
5474 return 0;
5475 }
58caa3dc
DJ
5476 else
5477 {
ce3a066d 5478 perror ("Warning: ptrace(regsets_store_inferior_registers)");
58caa3dc
DJ
5479 }
5480 }
e9d25b98
DJ
5481 else if (regset->type == GENERAL_REGS)
5482 saw_general_regs = 1;
09ec9b38 5483 free (buf);
58caa3dc 5484 }
e9d25b98
DJ
5485 if (saw_general_regs)
5486 return 0;
5487 else
5488 return 1;
58caa3dc
DJ
5489}
5490
1faeff08 5491#else /* !HAVE_LINUX_REGSETS */
58caa3dc 5492
1faeff08 5493#define use_linux_regsets 0
3aee8918
PA
5494#define regsets_fetch_inferior_registers(regsets_info, regcache) 1
5495#define regsets_store_inferior_registers(regsets_info, regcache) 1
58caa3dc 5496
58caa3dc 5497#endif
1faeff08
MR
5498
5499/* Return 1 if register REGNO is supported by one of the regset ptrace
5500 calls or 0 if it has to be transferred individually. */
5501
5502static int
3aee8918 5503linux_register_in_regsets (const struct regs_info *regs_info, int regno)
1faeff08
MR
5504{
5505 unsigned char mask = 1 << (regno % 8);
5506 size_t index = regno / 8;
5507
5508 return (use_linux_regsets
3aee8918
PA
5509 && (regs_info->regset_bitmap == NULL
5510 || (regs_info->regset_bitmap[index] & mask) != 0));
1faeff08
MR
5511}
5512
58caa3dc 5513#ifdef HAVE_LINUX_USRREGS
1faeff08 5514
5b3da067 5515static int
3aee8918 5516register_addr (const struct usrregs_info *usrregs, int regnum)
1faeff08
MR
5517{
5518 int addr;
5519
3aee8918 5520 if (regnum < 0 || regnum >= usrregs->num_regs)
1faeff08
MR
5521 error ("Invalid register number %d.", regnum);
5522
3aee8918 5523 addr = usrregs->regmap[regnum];
1faeff08
MR
5524
5525 return addr;
5526}
5527
5528/* Fetch one register. */
5529static void
3aee8918
PA
5530fetch_register (const struct usrregs_info *usrregs,
5531 struct regcache *regcache, int regno)
1faeff08
MR
5532{
5533 CORE_ADDR regaddr;
5534 int i, size;
5535 char *buf;
5536 int pid;
5537
3aee8918 5538 if (regno >= usrregs->num_regs)
1faeff08
MR
5539 return;
5540 if ((*the_low_target.cannot_fetch_register) (regno))
5541 return;
5542
3aee8918 5543 regaddr = register_addr (usrregs, regno);
1faeff08
MR
5544 if (regaddr == -1)
5545 return;
5546
3aee8918
PA
5547 size = ((register_size (regcache->tdesc, regno)
5548 + sizeof (PTRACE_XFER_TYPE) - 1)
1faeff08 5549 & -sizeof (PTRACE_XFER_TYPE));
224c3ddb 5550 buf = (char *) alloca (size);
1faeff08 5551
0bfdf32f 5552 pid = lwpid_of (current_thread);
1faeff08
MR
5553 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
5554 {
5555 errno = 0;
5556 *(PTRACE_XFER_TYPE *) (buf + i) =
5557 ptrace (PTRACE_PEEKUSER, pid,
5558 /* Coerce to a uintptr_t first to avoid potential gcc warning
5559 of coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e 5560 (PTRACE_TYPE_ARG3) (uintptr_t) regaddr, (PTRACE_TYPE_ARG4) 0);
1faeff08
MR
5561 regaddr += sizeof (PTRACE_XFER_TYPE);
5562 if (errno != 0)
9a70f35c
YQ
5563 {
5564 /* Mark register REGNO unavailable. */
5565 supply_register (regcache, regno, NULL);
5566 return;
5567 }
1faeff08
MR
5568 }
5569
5570 if (the_low_target.supply_ptrace_register)
5571 the_low_target.supply_ptrace_register (regcache, regno, buf);
5572 else
5573 supply_register (regcache, regno, buf);
5574}
5575
5576/* Store one register. */
5577static void
3aee8918
PA
5578store_register (const struct usrregs_info *usrregs,
5579 struct regcache *regcache, int regno)
1faeff08
MR
5580{
5581 CORE_ADDR regaddr;
5582 int i, size;
5583 char *buf;
5584 int pid;
5585
3aee8918 5586 if (regno >= usrregs->num_regs)
1faeff08
MR
5587 return;
5588 if ((*the_low_target.cannot_store_register) (regno))
5589 return;
5590
3aee8918 5591 regaddr = register_addr (usrregs, regno);
1faeff08
MR
5592 if (regaddr == -1)
5593 return;
5594
3aee8918
PA
5595 size = ((register_size (regcache->tdesc, regno)
5596 + sizeof (PTRACE_XFER_TYPE) - 1)
1faeff08 5597 & -sizeof (PTRACE_XFER_TYPE));
224c3ddb 5598 buf = (char *) alloca (size);
1faeff08
MR
5599 memset (buf, 0, size);
5600
5601 if (the_low_target.collect_ptrace_register)
5602 the_low_target.collect_ptrace_register (regcache, regno, buf);
5603 else
5604 collect_register (regcache, regno, buf);
5605
0bfdf32f 5606 pid = lwpid_of (current_thread);
1faeff08
MR
5607 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
5608 {
5609 errno = 0;
5610 ptrace (PTRACE_POKEUSER, pid,
5611 /* Coerce to a uintptr_t first to avoid potential gcc warning
5612 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e
LM
5613 (PTRACE_TYPE_ARG3) (uintptr_t) regaddr,
5614 (PTRACE_TYPE_ARG4) *(PTRACE_XFER_TYPE *) (buf + i));
1faeff08
MR
5615 if (errno != 0)
5616 {
5617 /* At this point, ESRCH should mean the process is
5618 already gone, in which case we simply ignore attempts
5619 to change its registers. See also the related
5620 comment in linux_resume_one_lwp. */
5621 if (errno == ESRCH)
5622 return;
5623
5624 if ((*the_low_target.cannot_store_register) (regno) == 0)
5625 error ("writing register %d: %s", regno, strerror (errno));
5626 }
5627 regaddr += sizeof (PTRACE_XFER_TYPE);
5628 }
5629}
5630
5631/* Fetch all registers, or just one, from the child process.
5632 If REGNO is -1, do this for all registers, skipping any that are
5633 assumed to have been retrieved by regsets_fetch_inferior_registers,
5634 unless ALL is non-zero.
5635 Otherwise, REGNO specifies which register (so we can save time). */
5636static void
3aee8918
PA
5637usr_fetch_inferior_registers (const struct regs_info *regs_info,
5638 struct regcache *regcache, int regno, int all)
1faeff08 5639{
3aee8918
PA
5640 struct usrregs_info *usr = regs_info->usrregs;
5641
1faeff08
MR
5642 if (regno == -1)
5643 {
3aee8918
PA
5644 for (regno = 0; regno < usr->num_regs; regno++)
5645 if (all || !linux_register_in_regsets (regs_info, regno))
5646 fetch_register (usr, regcache, regno);
1faeff08
MR
5647 }
5648 else
3aee8918 5649 fetch_register (usr, regcache, regno);
1faeff08
MR
5650}
5651
5652/* Store our register values back into the inferior.
5653 If REGNO is -1, do this for all registers, skipping any that are
5654 assumed to have been saved by regsets_store_inferior_registers,
5655 unless ALL is non-zero.
5656 Otherwise, REGNO specifies which register (so we can save time). */
5657static void
3aee8918
PA
5658usr_store_inferior_registers (const struct regs_info *regs_info,
5659 struct regcache *regcache, int regno, int all)
1faeff08 5660{
3aee8918
PA
5661 struct usrregs_info *usr = regs_info->usrregs;
5662
1faeff08
MR
5663 if (regno == -1)
5664 {
3aee8918
PA
5665 for (regno = 0; regno < usr->num_regs; regno++)
5666 if (all || !linux_register_in_regsets (regs_info, regno))
5667 store_register (usr, regcache, regno);
1faeff08
MR
5668 }
5669 else
3aee8918 5670 store_register (usr, regcache, regno);
1faeff08
MR
5671}
5672
5673#else /* !HAVE_LINUX_USRREGS */
5674
3aee8918
PA
5675#define usr_fetch_inferior_registers(regs_info, regcache, regno, all) do {} while (0)
5676#define usr_store_inferior_registers(regs_info, regcache, regno, all) do {} while (0)
1faeff08 5677
58caa3dc 5678#endif
1faeff08
MR
5679
5680
5b3da067 5681static void
1faeff08
MR
5682linux_fetch_registers (struct regcache *regcache, int regno)
5683{
5684 int use_regsets;
5685 int all = 0;
3aee8918 5686 const struct regs_info *regs_info = (*the_low_target.regs_info) ();
1faeff08
MR
5687
5688 if (regno == -1)
5689 {
3aee8918
PA
5690 if (the_low_target.fetch_register != NULL
5691 && regs_info->usrregs != NULL)
5692 for (regno = 0; regno < regs_info->usrregs->num_regs; regno++)
c14dfd32
PA
5693 (*the_low_target.fetch_register) (regcache, regno);
5694
3aee8918
PA
5695 all = regsets_fetch_inferior_registers (regs_info->regsets_info, regcache);
5696 if (regs_info->usrregs != NULL)
5697 usr_fetch_inferior_registers (regs_info, regcache, -1, all);
1faeff08
MR
5698 }
5699 else
5700 {
c14dfd32
PA
5701 if (the_low_target.fetch_register != NULL
5702 && (*the_low_target.fetch_register) (regcache, regno))
5703 return;
5704
3aee8918 5705 use_regsets = linux_register_in_regsets (regs_info, regno);
1faeff08 5706 if (use_regsets)
3aee8918
PA
5707 all = regsets_fetch_inferior_registers (regs_info->regsets_info,
5708 regcache);
5709 if ((!use_regsets || all) && regs_info->usrregs != NULL)
5710 usr_fetch_inferior_registers (regs_info, regcache, regno, 1);
1faeff08 5711 }
58caa3dc
DJ
5712}
5713
5b3da067 5714static void
442ea881 5715linux_store_registers (struct regcache *regcache, int regno)
58caa3dc 5716{
1faeff08
MR
5717 int use_regsets;
5718 int all = 0;
3aee8918 5719 const struct regs_info *regs_info = (*the_low_target.regs_info) ();
1faeff08
MR
5720
5721 if (regno == -1)
5722 {
3aee8918
PA
5723 all = regsets_store_inferior_registers (regs_info->regsets_info,
5724 regcache);
5725 if (regs_info->usrregs != NULL)
5726 usr_store_inferior_registers (regs_info, regcache, regno, all);
1faeff08
MR
5727 }
5728 else
5729 {
3aee8918 5730 use_regsets = linux_register_in_regsets (regs_info, regno);
1faeff08 5731 if (use_regsets)
3aee8918
PA
5732 all = regsets_store_inferior_registers (regs_info->regsets_info,
5733 regcache);
5734 if ((!use_regsets || all) && regs_info->usrregs != NULL)
5735 usr_store_inferior_registers (regs_info, regcache, regno, 1);
1faeff08 5736 }
58caa3dc
DJ
5737}
5738
da6d8c04 5739
da6d8c04
DJ
5740/* Copy LEN bytes from inferior's memory starting at MEMADDR
5741 to debugger memory starting at MYADDR. */
5742
c3e735a6 5743static int
f450004a 5744linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
da6d8c04 5745{
0bfdf32f 5746 int pid = lwpid_of (current_thread);
ae3e2ccf
SM
5747 PTRACE_XFER_TYPE *buffer;
5748 CORE_ADDR addr;
5749 int count;
4934b29e 5750 char filename[64];
ae3e2ccf 5751 int i;
4934b29e 5752 int ret;
fd462a61 5753 int fd;
fd462a61
DJ
5754
5755 /* Try using /proc. Don't bother for one word. */
5756 if (len >= 3 * sizeof (long))
5757 {
4934b29e
MR
5758 int bytes;
5759
fd462a61
DJ
5760 /* We could keep this file open and cache it - possibly one per
5761 thread. That requires some juggling, but is even faster. */
95954743 5762 sprintf (filename, "/proc/%d/mem", pid);
fd462a61
DJ
5763 fd = open (filename, O_RDONLY | O_LARGEFILE);
5764 if (fd == -1)
5765 goto no_proc;
5766
5767 /* If pread64 is available, use it. It's faster if the kernel
5768 supports it (only one syscall), and it's 64-bit safe even on
5769 32-bit platforms (for instance, SPARC debugging a SPARC64
5770 application). */
5771#ifdef HAVE_PREAD64
4934b29e 5772 bytes = pread64 (fd, myaddr, len, memaddr);
fd462a61 5773#else
4934b29e
MR
5774 bytes = -1;
5775 if (lseek (fd, memaddr, SEEK_SET) != -1)
5776 bytes = read (fd, myaddr, len);
fd462a61 5777#endif
fd462a61
DJ
5778
5779 close (fd);
4934b29e
MR
5780 if (bytes == len)
5781 return 0;
5782
5783 /* Some data was read, we'll try to get the rest with ptrace. */
5784 if (bytes > 0)
5785 {
5786 memaddr += bytes;
5787 myaddr += bytes;
5788 len -= bytes;
5789 }
fd462a61 5790 }
da6d8c04 5791
fd462a61 5792 no_proc:
4934b29e
MR
5793 /* Round starting address down to longword boundary. */
5794 addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
5795 /* Round ending address up; get number of longwords that makes. */
5796 count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
5797 / sizeof (PTRACE_XFER_TYPE));
5798 /* Allocate buffer of that many longwords. */
8d749320 5799 buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count);
4934b29e 5800
da6d8c04 5801 /* Read all the longwords */
4934b29e 5802 errno = 0;
da6d8c04
DJ
5803 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
5804 {
14ce3065
DE
5805 /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
5806 about coercing an 8 byte integer to a 4 byte pointer. */
5807 buffer[i] = ptrace (PTRACE_PEEKTEXT, pid,
b8e1b30e
LM
5808 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
5809 (PTRACE_TYPE_ARG4) 0);
c3e735a6 5810 if (errno)
4934b29e 5811 break;
da6d8c04 5812 }
4934b29e 5813 ret = errno;
da6d8c04
DJ
5814
5815 /* Copy appropriate bytes out of the buffer. */
8d409d16
MR
5816 if (i > 0)
5817 {
5818 i *= sizeof (PTRACE_XFER_TYPE);
5819 i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
5820 memcpy (myaddr,
5821 (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
5822 i < len ? i : len);
5823 }
c3e735a6 5824
4934b29e 5825 return ret;
da6d8c04
DJ
5826}
5827
93ae6fdc
PA
5828/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
5829 memory at MEMADDR. On failure (cannot write to the inferior)
f0ae6fc3 5830 returns the value of errno. Always succeeds if LEN is zero. */
da6d8c04 5831
ce3a066d 5832static int
f450004a 5833linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
da6d8c04 5834{
ae3e2ccf 5835 int i;
da6d8c04 5836 /* Round starting address down to longword boundary. */
ae3e2ccf 5837 CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
da6d8c04 5838 /* Round ending address up; get number of longwords that makes. */
ae3e2ccf 5839 int count
493e2a69
MS
5840 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
5841 / sizeof (PTRACE_XFER_TYPE);
5842
da6d8c04 5843 /* Allocate buffer of that many longwords. */
ae3e2ccf 5844 PTRACE_XFER_TYPE *buffer = XALLOCAVEC (PTRACE_XFER_TYPE, count);
493e2a69 5845
0bfdf32f 5846 int pid = lwpid_of (current_thread);
da6d8c04 5847
f0ae6fc3
PA
5848 if (len == 0)
5849 {
5850 /* Zero length write always succeeds. */
5851 return 0;
5852 }
5853
0d62e5e8
DJ
5854 if (debug_threads)
5855 {
58d6951d 5856 /* Dump up to four bytes. */
bf47e248
PA
5857 char str[4 * 2 + 1];
5858 char *p = str;
5859 int dump = len < 4 ? len : 4;
5860
5861 for (i = 0; i < dump; i++)
5862 {
5863 sprintf (p, "%02x", myaddr[i]);
5864 p += 2;
5865 }
5866 *p = '\0';
5867
5868 debug_printf ("Writing %s to 0x%08lx in process %d\n",
5869 str, (long) memaddr, pid);
0d62e5e8
DJ
5870 }
5871
da6d8c04
DJ
5872 /* Fill start and end extra bytes of buffer with existing memory data. */
5873
93ae6fdc 5874 errno = 0;
14ce3065
DE
5875 /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
5876 about coercing an 8 byte integer to a 4 byte pointer. */
5877 buffer[0] = ptrace (PTRACE_PEEKTEXT, pid,
b8e1b30e
LM
5878 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
5879 (PTRACE_TYPE_ARG4) 0);
93ae6fdc
PA
5880 if (errno)
5881 return errno;
da6d8c04
DJ
5882
5883 if (count > 1)
5884 {
93ae6fdc 5885 errno = 0;
da6d8c04 5886 buffer[count - 1]
95954743 5887 = ptrace (PTRACE_PEEKTEXT, pid,
14ce3065
DE
5888 /* Coerce to a uintptr_t first to avoid potential gcc warning
5889 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e 5890 (PTRACE_TYPE_ARG3) (uintptr_t) (addr + (count - 1)
14ce3065 5891 * sizeof (PTRACE_XFER_TYPE)),
b8e1b30e 5892 (PTRACE_TYPE_ARG4) 0);
93ae6fdc
PA
5893 if (errno)
5894 return errno;
da6d8c04
DJ
5895 }
5896
93ae6fdc 5897 /* Copy data to be written over corresponding part of buffer. */
da6d8c04 5898
493e2a69
MS
5899 memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
5900 myaddr, len);
da6d8c04
DJ
5901
5902 /* Write the entire buffer. */
5903
5904 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
5905 {
5906 errno = 0;
14ce3065
DE
5907 ptrace (PTRACE_POKETEXT, pid,
5908 /* Coerce to a uintptr_t first to avoid potential gcc warning
5909 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e
LM
5910 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
5911 (PTRACE_TYPE_ARG4) buffer[i]);
da6d8c04
DJ
5912 if (errno)
5913 return errno;
5914 }
5915
5916 return 0;
5917}
2f2893d9
DJ
5918
5919static void
5920linux_look_up_symbols (void)
5921{
0d62e5e8 5922#ifdef USE_THREAD_DB
95954743
PA
5923 struct process_info *proc = current_process ();
5924
fe978cb0 5925 if (proc->priv->thread_db != NULL)
0d62e5e8
DJ
5926 return;
5927
9b4c5f87 5928 thread_db_init ();
0d62e5e8
DJ
5929#endif
5930}
5931
e5379b03 5932static void
ef57601b 5933linux_request_interrupt (void)
e5379b03 5934{
78708b7c
PA
5935 /* Send a SIGINT to the process group. This acts just like the user
5936 typed a ^C on the controlling terminal. */
5937 kill (-signal_pid, SIGINT);
e5379b03
DJ
5938}
5939
aa691b87
RM
5940/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
5941 to debugger memory starting at MYADDR. */
5942
5943static int
f450004a 5944linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
aa691b87
RM
5945{
5946 char filename[PATH_MAX];
5947 int fd, n;
0bfdf32f 5948 int pid = lwpid_of (current_thread);
aa691b87 5949
6cebaf6e 5950 xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
aa691b87
RM
5951
5952 fd = open (filename, O_RDONLY);
5953 if (fd < 0)
5954 return -1;
5955
5956 if (offset != (CORE_ADDR) 0
5957 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
5958 n = -1;
5959 else
5960 n = read (fd, myaddr, len);
5961
5962 close (fd);
5963
5964 return n;
5965}
5966
d993e290
PA
5967/* These breakpoint and watchpoint related wrapper functions simply
5968 pass on the function call if the target has registered a
5969 corresponding function. */
e013ee27
OF
5970
5971static int
802e8e6d
PA
5972linux_supports_z_point_type (char z_type)
5973{
5974 return (the_low_target.supports_z_point_type != NULL
5975 && the_low_target.supports_z_point_type (z_type));
5976}
5977
5978static int
5979linux_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
5980 int size, struct raw_breakpoint *bp)
e013ee27 5981{
c8f4bfdd
YQ
5982 if (type == raw_bkpt_type_sw)
5983 return insert_memory_breakpoint (bp);
5984 else if (the_low_target.insert_point != NULL)
802e8e6d 5985 return the_low_target.insert_point (type, addr, size, bp);
e013ee27
OF
5986 else
5987 /* Unsupported (see target.h). */
5988 return 1;
5989}
5990
5991static int
802e8e6d
PA
5992linux_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
5993 int size, struct raw_breakpoint *bp)
e013ee27 5994{
c8f4bfdd
YQ
5995 if (type == raw_bkpt_type_sw)
5996 return remove_memory_breakpoint (bp);
5997 else if (the_low_target.remove_point != NULL)
802e8e6d 5998 return the_low_target.remove_point (type, addr, size, bp);
e013ee27
OF
5999 else
6000 /* Unsupported (see target.h). */
6001 return 1;
6002}
6003
3e572f71
PA
6004/* Implement the to_stopped_by_sw_breakpoint target_ops
6005 method. */
6006
6007static int
6008linux_stopped_by_sw_breakpoint (void)
6009{
6010 struct lwp_info *lwp = get_thread_lwp (current_thread);
6011
6012 return (lwp->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
6013}
6014
6015/* Implement the to_supports_stopped_by_sw_breakpoint target_ops
6016 method. */
6017
6018static int
6019linux_supports_stopped_by_sw_breakpoint (void)
6020{
6021 return USE_SIGTRAP_SIGINFO;
6022}
6023
6024/* Implement the to_stopped_by_hw_breakpoint target_ops
6025 method. */
6026
6027static int
6028linux_stopped_by_hw_breakpoint (void)
6029{
6030 struct lwp_info *lwp = get_thread_lwp (current_thread);
6031
6032 return (lwp->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
6033}
6034
6035/* Implement the to_supports_stopped_by_hw_breakpoint target_ops
6036 method. */
6037
6038static int
6039linux_supports_stopped_by_hw_breakpoint (void)
6040{
6041 return USE_SIGTRAP_SIGINFO;
6042}
6043
70b90b91 6044/* Implement the supports_hardware_single_step target_ops method. */
45614f15
YQ
6045
6046static int
70b90b91 6047linux_supports_hardware_single_step (void)
45614f15 6048{
45614f15
YQ
6049 return can_hardware_single_step ();
6050}
6051
7d00775e
AT
6052static int
6053linux_supports_software_single_step (void)
6054{
6055 return can_software_single_step ();
6056}
6057
e013ee27
OF
6058static int
6059linux_stopped_by_watchpoint (void)
6060{
0bfdf32f 6061 struct lwp_info *lwp = get_thread_lwp (current_thread);
c3adc08c 6062
15c66dd6 6063 return lwp->stop_reason == TARGET_STOPPED_BY_WATCHPOINT;
e013ee27
OF
6064}
6065
6066static CORE_ADDR
6067linux_stopped_data_address (void)
6068{
0bfdf32f 6069 struct lwp_info *lwp = get_thread_lwp (current_thread);
c3adc08c
PA
6070
6071 return lwp->stopped_data_address;
e013ee27
OF
6072}
6073
db0dfaa0
LM
6074#if defined(__UCLIBC__) && defined(HAS_NOMMU) \
6075 && defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) \
6076 && defined(PT_TEXT_END_ADDR)
6077
6078/* This is only used for targets that define PT_TEXT_ADDR,
6079 PT_DATA_ADDR and PT_TEXT_END_ADDR. If those are not defined, supposedly
6080 the target has different ways of acquiring this information, like
6081 loadmaps. */
52fb6437
NS
6082
6083/* Under uClinux, programs are loaded at non-zero offsets, which we need
6084 to tell gdb about. */
6085
6086static int
6087linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
6088{
52fb6437 6089 unsigned long text, text_end, data;
62828379 6090 int pid = lwpid_of (current_thread);
52fb6437
NS
6091
6092 errno = 0;
6093
b8e1b30e
LM
6094 text = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_ADDR,
6095 (PTRACE_TYPE_ARG4) 0);
6096 text_end = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_END_ADDR,
6097 (PTRACE_TYPE_ARG4) 0);
6098 data = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_DATA_ADDR,
6099 (PTRACE_TYPE_ARG4) 0);
52fb6437
NS
6100
6101 if (errno == 0)
6102 {
6103 /* Both text and data offsets produced at compile-time (and so
1b3f6016
PA
6104 used by gdb) are relative to the beginning of the program,
6105 with the data segment immediately following the text segment.
6106 However, the actual runtime layout in memory may put the data
6107 somewhere else, so when we send gdb a data base-address, we
6108 use the real data base address and subtract the compile-time
6109 data base-address from it (which is just the length of the
6110 text segment). BSS immediately follows data in both
6111 cases. */
52fb6437
NS
6112 *text_p = text;
6113 *data_p = data - (text_end - text);
1b3f6016 6114
52fb6437
NS
6115 return 1;
6116 }
52fb6437
NS
6117 return 0;
6118}
6119#endif
6120
07e059b5
VP
6121static int
6122linux_qxfer_osdata (const char *annex,
1b3f6016
PA
6123 unsigned char *readbuf, unsigned const char *writebuf,
6124 CORE_ADDR offset, int len)
07e059b5 6125{
d26e3629 6126 return linux_common_xfer_osdata (annex, readbuf, offset, len);
07e059b5
VP
6127}
6128
d0722149
DE
6129/* Convert a native/host siginfo object, into/from the siginfo in the
6130 layout of the inferiors' architecture. */
6131
6132static void
8adce034 6133siginfo_fixup (siginfo_t *siginfo, gdb_byte *inf_siginfo, int direction)
d0722149
DE
6134{
6135 int done = 0;
6136
6137 if (the_low_target.siginfo_fixup != NULL)
6138 done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
6139
6140 /* If there was no callback, or the callback didn't do anything,
6141 then just do a straight memcpy. */
6142 if (!done)
6143 {
6144 if (direction == 1)
a5362b9a 6145 memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
d0722149 6146 else
a5362b9a 6147 memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
d0722149
DE
6148 }
6149}
6150
4aa995e1
PA
6151static int
6152linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
6153 unsigned const char *writebuf, CORE_ADDR offset, int len)
6154{
d0722149 6155 int pid;
a5362b9a 6156 siginfo_t siginfo;
8adce034 6157 gdb_byte inf_siginfo[sizeof (siginfo_t)];
4aa995e1 6158
0bfdf32f 6159 if (current_thread == NULL)
4aa995e1
PA
6160 return -1;
6161
0bfdf32f 6162 pid = lwpid_of (current_thread);
4aa995e1
PA
6163
6164 if (debug_threads)
87ce2a04
DE
6165 debug_printf ("%s siginfo for lwp %d.\n",
6166 readbuf != NULL ? "Reading" : "Writing",
6167 pid);
4aa995e1 6168
0adea5f7 6169 if (offset >= sizeof (siginfo))
4aa995e1
PA
6170 return -1;
6171
b8e1b30e 6172 if (ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0)
4aa995e1
PA
6173 return -1;
6174
d0722149
DE
6175 /* When GDBSERVER is built as a 64-bit application, ptrace writes into
6176 SIGINFO an object with 64-bit layout. Since debugging a 32-bit
6177 inferior with a 64-bit GDBSERVER should look the same as debugging it
6178 with a 32-bit GDBSERVER, we need to convert it. */
6179 siginfo_fixup (&siginfo, inf_siginfo, 0);
6180
4aa995e1
PA
6181 if (offset + len > sizeof (siginfo))
6182 len = sizeof (siginfo) - offset;
6183
6184 if (readbuf != NULL)
d0722149 6185 memcpy (readbuf, inf_siginfo + offset, len);
4aa995e1
PA
6186 else
6187 {
d0722149
DE
6188 memcpy (inf_siginfo + offset, writebuf, len);
6189
6190 /* Convert back to ptrace layout before flushing it out. */
6191 siginfo_fixup (&siginfo, inf_siginfo, 1);
6192
b8e1b30e 6193 if (ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0)
4aa995e1
PA
6194 return -1;
6195 }
6196
6197 return len;
6198}
6199
bd99dc85
PA
6200/* SIGCHLD handler that serves two purposes: In non-stop/async mode,
6201 so we notice when children change state; as the handler for the
6202 sigsuspend in my_waitpid. */
6203
6204static void
6205sigchld_handler (int signo)
6206{
6207 int old_errno = errno;
6208
6209 if (debug_threads)
e581f2b4
PA
6210 {
6211 do
6212 {
6213 /* fprintf is not async-signal-safe, so call write
6214 directly. */
6215 if (write (2, "sigchld_handler\n",
6216 sizeof ("sigchld_handler\n") - 1) < 0)
6217 break; /* just ignore */
6218 } while (0);
6219 }
bd99dc85
PA
6220
6221 if (target_is_async_p ())
6222 async_file_mark (); /* trigger a linux_wait */
6223
6224 errno = old_errno;
6225}
6226
6227static int
6228linux_supports_non_stop (void)
6229{
6230 return 1;
6231}
6232
6233static int
6234linux_async (int enable)
6235{
7089dca4 6236 int previous = target_is_async_p ();
bd99dc85 6237
8336d594 6238 if (debug_threads)
87ce2a04
DE
6239 debug_printf ("linux_async (%d), previous=%d\n",
6240 enable, previous);
8336d594 6241
bd99dc85
PA
6242 if (previous != enable)
6243 {
6244 sigset_t mask;
6245 sigemptyset (&mask);
6246 sigaddset (&mask, SIGCHLD);
6247
6248 sigprocmask (SIG_BLOCK, &mask, NULL);
6249
6250 if (enable)
6251 {
6252 if (pipe (linux_event_pipe) == -1)
aa96c426
GB
6253 {
6254 linux_event_pipe[0] = -1;
6255 linux_event_pipe[1] = -1;
6256 sigprocmask (SIG_UNBLOCK, &mask, NULL);
6257
6258 warning ("creating event pipe failed.");
6259 return previous;
6260 }
bd99dc85
PA
6261
6262 fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
6263 fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
6264
6265 /* Register the event loop handler. */
6266 add_file_handler (linux_event_pipe[0],
6267 handle_target_event, NULL);
6268
6269 /* Always trigger a linux_wait. */
6270 async_file_mark ();
6271 }
6272 else
6273 {
6274 delete_file_handler (linux_event_pipe[0]);
6275
6276 close (linux_event_pipe[0]);
6277 close (linux_event_pipe[1]);
6278 linux_event_pipe[0] = -1;
6279 linux_event_pipe[1] = -1;
6280 }
6281
6282 sigprocmask (SIG_UNBLOCK, &mask, NULL);
6283 }
6284
6285 return previous;
6286}
6287
6288static int
6289linux_start_non_stop (int nonstop)
6290{
6291 /* Register or unregister from event-loop accordingly. */
6292 linux_async (nonstop);
aa96c426
GB
6293
6294 if (target_is_async_p () != (nonstop != 0))
6295 return -1;
6296
bd99dc85
PA
6297 return 0;
6298}
6299
cf8fd78b
PA
6300static int
6301linux_supports_multi_process (void)
6302{
6303 return 1;
6304}
6305
89245bc0
DB
6306/* Check if fork events are supported. */
6307
6308static int
6309linux_supports_fork_events (void)
6310{
6311 return linux_supports_tracefork ();
6312}
6313
6314/* Check if vfork events are supported. */
6315
6316static int
6317linux_supports_vfork_events (void)
6318{
6319 return linux_supports_tracefork ();
6320}
6321
94585166
DB
6322/* Check if exec events are supported. */
6323
6324static int
6325linux_supports_exec_events (void)
6326{
6327 return linux_supports_traceexec ();
6328}
6329
de0d863e
DB
6330/* Target hook for 'handle_new_gdb_connection'. Causes a reset of the
6331 ptrace flags for all inferiors. This is in case the new GDB connection
6332 doesn't support the same set of events that the previous one did. */
6333
6334static void
6335linux_handle_new_gdb_connection (void)
6336{
de0d863e 6337 /* Request that all the lwps reset their ptrace options. */
bbf550d5
SM
6338 for_each_thread ([] (thread_info *thread)
6339 {
6340 struct lwp_info *lwp = get_thread_lwp (thread);
6341
6342 if (!lwp->stopped)
6343 {
6344 /* Stop the lwp so we can modify its ptrace options. */
6345 lwp->must_set_ptrace_flags = 1;
6346 linux_stop_lwp (lwp);
6347 }
6348 else
6349 {
6350 /* Already stopped; go ahead and set the ptrace options. */
6351 struct process_info *proc = find_process_pid (pid_of (thread));
6352 int options = linux_low_ptrace_options (proc->attached);
6353
6354 linux_enable_event_reporting (lwpid_of (thread), options);
6355 lwp->must_set_ptrace_flags = 0;
6356 }
6357 });
de0d863e
DB
6358}
6359
03583c20
UW
6360static int
6361linux_supports_disable_randomization (void)
6362{
6363#ifdef HAVE_PERSONALITY
6364 return 1;
6365#else
6366 return 0;
6367#endif
6368}
efcbbd14 6369
d1feda86
YQ
6370static int
6371linux_supports_agent (void)
6372{
6373 return 1;
6374}
6375
c2d6af84
PA
6376static int
6377linux_supports_range_stepping (void)
6378{
c3805894
YQ
6379 if (can_software_single_step ())
6380 return 1;
c2d6af84
PA
6381 if (*the_low_target.supports_range_stepping == NULL)
6382 return 0;
6383
6384 return (*the_low_target.supports_range_stepping) ();
6385}
6386
efcbbd14
UW
6387/* Enumerate spufs IDs for process PID. */
6388static int
6389spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
6390{
6391 int pos = 0;
6392 int written = 0;
6393 char path[128];
6394 DIR *dir;
6395 struct dirent *entry;
6396
6397 sprintf (path, "/proc/%ld/fd", pid);
6398 dir = opendir (path);
6399 if (!dir)
6400 return -1;
6401
6402 rewinddir (dir);
6403 while ((entry = readdir (dir)) != NULL)
6404 {
6405 struct stat st;
6406 struct statfs stfs;
6407 int fd;
6408
6409 fd = atoi (entry->d_name);
6410 if (!fd)
6411 continue;
6412
6413 sprintf (path, "/proc/%ld/fd/%d", pid, fd);
6414 if (stat (path, &st) != 0)
6415 continue;
6416 if (!S_ISDIR (st.st_mode))
6417 continue;
6418
6419 if (statfs (path, &stfs) != 0)
6420 continue;
6421 if (stfs.f_type != SPUFS_MAGIC)
6422 continue;
6423
6424 if (pos >= offset && pos + 4 <= offset + len)
6425 {
6426 *(unsigned int *)(buf + pos - offset) = fd;
6427 written += 4;
6428 }
6429 pos += 4;
6430 }
6431
6432 closedir (dir);
6433 return written;
6434}
6435
6436/* Implements the to_xfer_partial interface for the TARGET_OBJECT_SPU
6437 object type, using the /proc file system. */
6438static int
6439linux_qxfer_spu (const char *annex, unsigned char *readbuf,
6440 unsigned const char *writebuf,
6441 CORE_ADDR offset, int len)
6442{
0bfdf32f 6443 long pid = lwpid_of (current_thread);
efcbbd14
UW
6444 char buf[128];
6445 int fd = 0;
6446 int ret = 0;
6447
6448 if (!writebuf && !readbuf)
6449 return -1;
6450
6451 if (!*annex)
6452 {
6453 if (!readbuf)
6454 return -1;
6455 else
6456 return spu_enumerate_spu_ids (pid, readbuf, offset, len);
6457 }
6458
6459 sprintf (buf, "/proc/%ld/fd/%s", pid, annex);
6460 fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
6461 if (fd <= 0)
6462 return -1;
6463
6464 if (offset != 0
6465 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
6466 {
6467 close (fd);
6468 return 0;
6469 }
6470
6471 if (writebuf)
6472 ret = write (fd, writebuf, (size_t) len);
6473 else
6474 ret = read (fd, readbuf, (size_t) len);
6475
6476 close (fd);
6477 return ret;
6478}
6479
723b724b 6480#if defined PT_GETDSBT || defined PTRACE_GETFDPIC
78d85199
YQ
6481struct target_loadseg
6482{
6483 /* Core address to which the segment is mapped. */
6484 Elf32_Addr addr;
6485 /* VMA recorded in the program header. */
6486 Elf32_Addr p_vaddr;
6487 /* Size of this segment in memory. */
6488 Elf32_Word p_memsz;
6489};
6490
723b724b 6491# if defined PT_GETDSBT
78d85199
YQ
6492struct target_loadmap
6493{
6494 /* Protocol version number, must be zero. */
6495 Elf32_Word version;
6496 /* Pointer to the DSBT table, its size, and the DSBT index. */
6497 unsigned *dsbt_table;
6498 unsigned dsbt_size, dsbt_index;
6499 /* Number of segments in this map. */
6500 Elf32_Word nsegs;
6501 /* The actual memory map. */
6502 struct target_loadseg segs[/*nsegs*/];
6503};
723b724b
MF
6504# define LINUX_LOADMAP PT_GETDSBT
6505# define LINUX_LOADMAP_EXEC PTRACE_GETDSBT_EXEC
6506# define LINUX_LOADMAP_INTERP PTRACE_GETDSBT_INTERP
6507# else
6508struct target_loadmap
6509{
6510 /* Protocol version number, must be zero. */
6511 Elf32_Half version;
6512 /* Number of segments in this map. */
6513 Elf32_Half nsegs;
6514 /* The actual memory map. */
6515 struct target_loadseg segs[/*nsegs*/];
6516};
6517# define LINUX_LOADMAP PTRACE_GETFDPIC
6518# define LINUX_LOADMAP_EXEC PTRACE_GETFDPIC_EXEC
6519# define LINUX_LOADMAP_INTERP PTRACE_GETFDPIC_INTERP
6520# endif
78d85199 6521
78d85199
YQ
6522static int
6523linux_read_loadmap (const char *annex, CORE_ADDR offset,
6524 unsigned char *myaddr, unsigned int len)
6525{
0bfdf32f 6526 int pid = lwpid_of (current_thread);
78d85199
YQ
6527 int addr = -1;
6528 struct target_loadmap *data = NULL;
6529 unsigned int actual_length, copy_length;
6530
6531 if (strcmp (annex, "exec") == 0)
723b724b 6532 addr = (int) LINUX_LOADMAP_EXEC;
78d85199 6533 else if (strcmp (annex, "interp") == 0)
723b724b 6534 addr = (int) LINUX_LOADMAP_INTERP;
78d85199
YQ
6535 else
6536 return -1;
6537
723b724b 6538 if (ptrace (LINUX_LOADMAP, pid, addr, &data) != 0)
78d85199
YQ
6539 return -1;
6540
6541 if (data == NULL)
6542 return -1;
6543
6544 actual_length = sizeof (struct target_loadmap)
6545 + sizeof (struct target_loadseg) * data->nsegs;
6546
6547 if (offset < 0 || offset > actual_length)
6548 return -1;
6549
6550 copy_length = actual_length - offset < len ? actual_length - offset : len;
6551 memcpy (myaddr, (char *) data + offset, copy_length);
6552 return copy_length;
6553}
723b724b
MF
6554#else
6555# define linux_read_loadmap NULL
6556#endif /* defined PT_GETDSBT || defined PTRACE_GETFDPIC */
78d85199 6557
1570b33e 6558static void
06e03fff 6559linux_process_qsupported (char **features, int count)
1570b33e
L
6560{
6561 if (the_low_target.process_qsupported != NULL)
06e03fff 6562 the_low_target.process_qsupported (features, count);
1570b33e
L
6563}
6564
82075af2
JS
6565static int
6566linux_supports_catch_syscall (void)
6567{
6568 return (the_low_target.get_syscall_trapinfo != NULL
6569 && linux_supports_tracesysgood ());
6570}
6571
ae91f625
MK
6572static int
6573linux_get_ipa_tdesc_idx (void)
6574{
6575 if (the_low_target.get_ipa_tdesc_idx == NULL)
6576 return 0;
6577
6578 return (*the_low_target.get_ipa_tdesc_idx) ();
6579}
6580
219f2f23
PA
6581static int
6582linux_supports_tracepoints (void)
6583{
6584 if (*the_low_target.supports_tracepoints == NULL)
6585 return 0;
6586
6587 return (*the_low_target.supports_tracepoints) ();
6588}
6589
6590static CORE_ADDR
6591linux_read_pc (struct regcache *regcache)
6592{
6593 if (the_low_target.get_pc == NULL)
6594 return 0;
6595
6596 return (*the_low_target.get_pc) (regcache);
6597}
6598
6599static void
6600linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
6601{
6602 gdb_assert (the_low_target.set_pc != NULL);
6603
6604 (*the_low_target.set_pc) (regcache, pc);
6605}
6606
8336d594
PA
6607static int
6608linux_thread_stopped (struct thread_info *thread)
6609{
6610 return get_thread_lwp (thread)->stopped;
6611}
6612
6613/* This exposes stop-all-threads functionality to other modules. */
6614
6615static void
7984d532 6616linux_pause_all (int freeze)
8336d594 6617{
7984d532
PA
6618 stop_all_lwps (freeze, NULL);
6619}
6620
6621/* This exposes unstop-all-threads functionality to other gdbserver
6622 modules. */
6623
6624static void
6625linux_unpause_all (int unfreeze)
6626{
6627 unstop_all_lwps (unfreeze, NULL);
8336d594
PA
6628}
6629
90d74c30
PA
6630static int
6631linux_prepare_to_access_memory (void)
6632{
6633 /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
6634 running LWP. */
6635 if (non_stop)
6636 linux_pause_all (1);
6637 return 0;
6638}
6639
6640static void
0146f85b 6641linux_done_accessing_memory (void)
90d74c30
PA
6642{
6643 /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
6644 running LWP. */
6645 if (non_stop)
6646 linux_unpause_all (1);
6647}
6648
fa593d66
PA
6649static int
6650linux_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
6651 CORE_ADDR collector,
6652 CORE_ADDR lockaddr,
6653 ULONGEST orig_size,
6654 CORE_ADDR *jump_entry,
405f8e94
SS
6655 CORE_ADDR *trampoline,
6656 ULONGEST *trampoline_size,
fa593d66
PA
6657 unsigned char *jjump_pad_insn,
6658 ULONGEST *jjump_pad_insn_size,
6659 CORE_ADDR *adjusted_insn_addr,
405f8e94
SS
6660 CORE_ADDR *adjusted_insn_addr_end,
6661 char *err)
fa593d66
PA
6662{
6663 return (*the_low_target.install_fast_tracepoint_jump_pad)
6664 (tpoint, tpaddr, collector, lockaddr, orig_size,
405f8e94
SS
6665 jump_entry, trampoline, trampoline_size,
6666 jjump_pad_insn, jjump_pad_insn_size,
6667 adjusted_insn_addr, adjusted_insn_addr_end,
6668 err);
fa593d66
PA
6669}
6670
6a271cae
PA
6671static struct emit_ops *
6672linux_emit_ops (void)
6673{
6674 if (the_low_target.emit_ops != NULL)
6675 return (*the_low_target.emit_ops) ();
6676 else
6677 return NULL;
6678}
6679
405f8e94
SS
6680static int
6681linux_get_min_fast_tracepoint_insn_len (void)
6682{
6683 return (*the_low_target.get_min_fast_tracepoint_insn_len) ();
6684}
6685
2268b414
JK
6686/* Extract &phdr and num_phdr in the inferior. Return 0 on success. */
6687
6688static int
6689get_phdr_phnum_from_proc_auxv (const int pid, const int is_elf64,
6690 CORE_ADDR *phdr_memaddr, int *num_phdr)
6691{
6692 char filename[PATH_MAX];
6693 int fd;
6694 const int auxv_size = is_elf64
6695 ? sizeof (Elf64_auxv_t) : sizeof (Elf32_auxv_t);
6696 char buf[sizeof (Elf64_auxv_t)]; /* The larger of the two. */
6697
6698 xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
6699
6700 fd = open (filename, O_RDONLY);
6701 if (fd < 0)
6702 return 1;
6703
6704 *phdr_memaddr = 0;
6705 *num_phdr = 0;
6706 while (read (fd, buf, auxv_size) == auxv_size
6707 && (*phdr_memaddr == 0 || *num_phdr == 0))
6708 {
6709 if (is_elf64)
6710 {
6711 Elf64_auxv_t *const aux = (Elf64_auxv_t *) buf;
6712
6713 switch (aux->a_type)
6714 {
6715 case AT_PHDR:
6716 *phdr_memaddr = aux->a_un.a_val;
6717 break;
6718 case AT_PHNUM:
6719 *num_phdr = aux->a_un.a_val;
6720 break;
6721 }
6722 }
6723 else
6724 {
6725 Elf32_auxv_t *const aux = (Elf32_auxv_t *) buf;
6726
6727 switch (aux->a_type)
6728 {
6729 case AT_PHDR:
6730 *phdr_memaddr = aux->a_un.a_val;
6731 break;
6732 case AT_PHNUM:
6733 *num_phdr = aux->a_un.a_val;
6734 break;
6735 }
6736 }
6737 }
6738
6739 close (fd);
6740
6741 if (*phdr_memaddr == 0 || *num_phdr == 0)
6742 {
6743 warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: "
6744 "phdr_memaddr = %ld, phdr_num = %d",
6745 (long) *phdr_memaddr, *num_phdr);
6746 return 2;
6747 }
6748
6749 return 0;
6750}
6751
6752/* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present. */
6753
6754static CORE_ADDR
6755get_dynamic (const int pid, const int is_elf64)
6756{
6757 CORE_ADDR phdr_memaddr, relocation;
db1ff28b 6758 int num_phdr, i;
2268b414 6759 unsigned char *phdr_buf;
db1ff28b 6760 const int phdr_size = is_elf64 ? sizeof (Elf64_Phdr) : sizeof (Elf32_Phdr);
2268b414
JK
6761
6762 if (get_phdr_phnum_from_proc_auxv (pid, is_elf64, &phdr_memaddr, &num_phdr))
6763 return 0;
6764
6765 gdb_assert (num_phdr < 100); /* Basic sanity check. */
224c3ddb 6766 phdr_buf = (unsigned char *) alloca (num_phdr * phdr_size);
2268b414
JK
6767
6768 if (linux_read_memory (phdr_memaddr, phdr_buf, num_phdr * phdr_size))
6769 return 0;
6770
6771 /* Compute relocation: it is expected to be 0 for "regular" executables,
6772 non-zero for PIE ones. */
6773 relocation = -1;
db1ff28b
JK
6774 for (i = 0; relocation == -1 && i < num_phdr; i++)
6775 if (is_elf64)
6776 {
6777 Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
6778
6779 if (p->p_type == PT_PHDR)
6780 relocation = phdr_memaddr - p->p_vaddr;
6781 }
6782 else
6783 {
6784 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
6785
6786 if (p->p_type == PT_PHDR)
6787 relocation = phdr_memaddr - p->p_vaddr;
6788 }
6789
2268b414
JK
6790 if (relocation == -1)
6791 {
e237a7e2
JK
6792 /* PT_PHDR is optional, but necessary for PIE in general. Fortunately
6793 any real world executables, including PIE executables, have always
6794 PT_PHDR present. PT_PHDR is not present in some shared libraries or
6795 in fpc (Free Pascal 2.4) binaries but neither of those have a need for
6796 or present DT_DEBUG anyway (fpc binaries are statically linked).
6797
6798 Therefore if there exists DT_DEBUG there is always also PT_PHDR.
6799
6800 GDB could find RELOCATION also from AT_ENTRY - e_entry. */
6801
2268b414
JK
6802 return 0;
6803 }
6804
db1ff28b
JK
6805 for (i = 0; i < num_phdr; i++)
6806 {
6807 if (is_elf64)
6808 {
6809 Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
6810
6811 if (p->p_type == PT_DYNAMIC)
6812 return p->p_vaddr + relocation;
6813 }
6814 else
6815 {
6816 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
2268b414 6817
db1ff28b
JK
6818 if (p->p_type == PT_DYNAMIC)
6819 return p->p_vaddr + relocation;
6820 }
6821 }
2268b414
JK
6822
6823 return 0;
6824}
6825
6826/* Return &_r_debug in the inferior, or -1 if not present. Return value
367ba2c2
MR
6827 can be 0 if the inferior does not yet have the library list initialized.
6828 We look for DT_MIPS_RLD_MAP first. MIPS executables use this instead of
6829 DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too. */
2268b414
JK
6830
6831static CORE_ADDR
6832get_r_debug (const int pid, const int is_elf64)
6833{
6834 CORE_ADDR dynamic_memaddr;
6835 const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn);
6836 unsigned char buf[sizeof (Elf64_Dyn)]; /* The larger of the two. */
367ba2c2 6837 CORE_ADDR map = -1;
2268b414
JK
6838
6839 dynamic_memaddr = get_dynamic (pid, is_elf64);
6840 if (dynamic_memaddr == 0)
367ba2c2 6841 return map;
2268b414
JK
6842
6843 while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0)
6844 {
6845 if (is_elf64)
6846 {
6847 Elf64_Dyn *const dyn = (Elf64_Dyn *) buf;
a738da3a 6848#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL
367ba2c2
MR
6849 union
6850 {
6851 Elf64_Xword map;
6852 unsigned char buf[sizeof (Elf64_Xword)];
6853 }
6854 rld_map;
a738da3a
MF
6855#endif
6856#ifdef DT_MIPS_RLD_MAP
367ba2c2
MR
6857 if (dyn->d_tag == DT_MIPS_RLD_MAP)
6858 {
6859 if (linux_read_memory (dyn->d_un.d_val,
6860 rld_map.buf, sizeof (rld_map.buf)) == 0)
6861 return rld_map.map;
6862 else
6863 break;
6864 }
75f62ce7 6865#endif /* DT_MIPS_RLD_MAP */
a738da3a
MF
6866#ifdef DT_MIPS_RLD_MAP_REL
6867 if (dyn->d_tag == DT_MIPS_RLD_MAP_REL)
6868 {
6869 if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr,
6870 rld_map.buf, sizeof (rld_map.buf)) == 0)
6871 return rld_map.map;
6872 else
6873 break;
6874 }
6875#endif /* DT_MIPS_RLD_MAP_REL */
2268b414 6876
367ba2c2
MR
6877 if (dyn->d_tag == DT_DEBUG && map == -1)
6878 map = dyn->d_un.d_val;
2268b414
JK
6879
6880 if (dyn->d_tag == DT_NULL)
6881 break;
6882 }
6883 else
6884 {
6885 Elf32_Dyn *const dyn = (Elf32_Dyn *) buf;
a738da3a 6886#if defined DT_MIPS_RLD_MAP || defined DT_MIPS_RLD_MAP_REL
367ba2c2
MR
6887 union
6888 {
6889 Elf32_Word map;
6890 unsigned char buf[sizeof (Elf32_Word)];
6891 }
6892 rld_map;
a738da3a
MF
6893#endif
6894#ifdef DT_MIPS_RLD_MAP
367ba2c2
MR
6895 if (dyn->d_tag == DT_MIPS_RLD_MAP)
6896 {
6897 if (linux_read_memory (dyn->d_un.d_val,
6898 rld_map.buf, sizeof (rld_map.buf)) == 0)
6899 return rld_map.map;
6900 else
6901 break;
6902 }
75f62ce7 6903#endif /* DT_MIPS_RLD_MAP */
a738da3a
MF
6904#ifdef DT_MIPS_RLD_MAP_REL
6905 if (dyn->d_tag == DT_MIPS_RLD_MAP_REL)
6906 {
6907 if (linux_read_memory (dyn->d_un.d_val + dynamic_memaddr,
6908 rld_map.buf, sizeof (rld_map.buf)) == 0)
6909 return rld_map.map;
6910 else
6911 break;
6912 }
6913#endif /* DT_MIPS_RLD_MAP_REL */
2268b414 6914
367ba2c2
MR
6915 if (dyn->d_tag == DT_DEBUG && map == -1)
6916 map = dyn->d_un.d_val;
2268b414
JK
6917
6918 if (dyn->d_tag == DT_NULL)
6919 break;
6920 }
6921
6922 dynamic_memaddr += dyn_size;
6923 }
6924
367ba2c2 6925 return map;
2268b414
JK
6926}
6927
6928/* Read one pointer from MEMADDR in the inferior. */
6929
6930static int
6931read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size)
6932{
485f1ee4
PA
6933 int ret;
6934
6935 /* Go through a union so this works on either big or little endian
6936 hosts, when the inferior's pointer size is smaller than the size
6937 of CORE_ADDR. It is assumed the inferior's endianness is the
6938 same of the superior's. */
6939 union
6940 {
6941 CORE_ADDR core_addr;
6942 unsigned int ui;
6943 unsigned char uc;
6944 } addr;
6945
6946 ret = linux_read_memory (memaddr, &addr.uc, ptr_size);
6947 if (ret == 0)
6948 {
6949 if (ptr_size == sizeof (CORE_ADDR))
6950 *ptr = addr.core_addr;
6951 else if (ptr_size == sizeof (unsigned int))
6952 *ptr = addr.ui;
6953 else
6954 gdb_assert_not_reached ("unhandled pointer size");
6955 }
6956 return ret;
2268b414
JK
6957}
6958
6959struct link_map_offsets
6960 {
6961 /* Offset and size of r_debug.r_version. */
6962 int r_version_offset;
6963
6964 /* Offset and size of r_debug.r_map. */
6965 int r_map_offset;
6966
6967 /* Offset to l_addr field in struct link_map. */
6968 int l_addr_offset;
6969
6970 /* Offset to l_name field in struct link_map. */
6971 int l_name_offset;
6972
6973 /* Offset to l_ld field in struct link_map. */
6974 int l_ld_offset;
6975
6976 /* Offset to l_next field in struct link_map. */
6977 int l_next_offset;
6978
6979 /* Offset to l_prev field in struct link_map. */
6980 int l_prev_offset;
6981 };
6982
fb723180 6983/* Construct qXfer:libraries-svr4:read reply. */
2268b414
JK
6984
6985static int
6986linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
6987 unsigned const char *writebuf,
6988 CORE_ADDR offset, int len)
6989{
fe978cb0 6990 struct process_info_private *const priv = current_process ()->priv;
2268b414
JK
6991 char filename[PATH_MAX];
6992 int pid, is_elf64;
6993
6994 static const struct link_map_offsets lmo_32bit_offsets =
6995 {
6996 0, /* r_version offset. */
6997 4, /* r_debug.r_map offset. */
6998 0, /* l_addr offset in link_map. */
6999 4, /* l_name offset in link_map. */
7000 8, /* l_ld offset in link_map. */
7001 12, /* l_next offset in link_map. */
7002 16 /* l_prev offset in link_map. */
7003 };
7004
7005 static const struct link_map_offsets lmo_64bit_offsets =
7006 {
7007 0, /* r_version offset. */
7008 8, /* r_debug.r_map offset. */
7009 0, /* l_addr offset in link_map. */
7010 8, /* l_name offset in link_map. */
7011 16, /* l_ld offset in link_map. */
7012 24, /* l_next offset in link_map. */
7013 32 /* l_prev offset in link_map. */
7014 };
7015 const struct link_map_offsets *lmo;
214d508e 7016 unsigned int machine;
b1fbec62
GB
7017 int ptr_size;
7018 CORE_ADDR lm_addr = 0, lm_prev = 0;
b1fbec62
GB
7019 CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev;
7020 int header_done = 0;
2268b414
JK
7021
7022 if (writebuf != NULL)
7023 return -2;
7024 if (readbuf == NULL)
7025 return -1;
7026
0bfdf32f 7027 pid = lwpid_of (current_thread);
2268b414 7028 xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid);
214d508e 7029 is_elf64 = elf_64_file_p (filename, &machine);
2268b414 7030 lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets;
b1fbec62 7031 ptr_size = is_elf64 ? 8 : 4;
2268b414 7032
b1fbec62
GB
7033 while (annex[0] != '\0')
7034 {
7035 const char *sep;
7036 CORE_ADDR *addrp;
da4ae14a 7037 int name_len;
2268b414 7038
b1fbec62
GB
7039 sep = strchr (annex, '=');
7040 if (sep == NULL)
7041 break;
0c5bf5a9 7042
da4ae14a
TT
7043 name_len = sep - annex;
7044 if (name_len == 5 && startswith (annex, "start"))
b1fbec62 7045 addrp = &lm_addr;
da4ae14a 7046 else if (name_len == 4 && startswith (annex, "prev"))
b1fbec62
GB
7047 addrp = &lm_prev;
7048 else
7049 {
7050 annex = strchr (sep, ';');
7051 if (annex == NULL)
7052 break;
7053 annex++;
7054 continue;
7055 }
7056
7057 annex = decode_address_to_semicolon (addrp, sep + 1);
2268b414 7058 }
b1fbec62
GB
7059
7060 if (lm_addr == 0)
2268b414 7061 {
b1fbec62
GB
7062 int r_version = 0;
7063
7064 if (priv->r_debug == 0)
7065 priv->r_debug = get_r_debug (pid, is_elf64);
7066
7067 /* We failed to find DT_DEBUG. Such situation will not change
7068 for this inferior - do not retry it. Report it to GDB as
7069 E01, see for the reasons at the GDB solib-svr4.c side. */
7070 if (priv->r_debug == (CORE_ADDR) -1)
7071 return -1;
7072
7073 if (priv->r_debug != 0)
2268b414 7074 {
b1fbec62
GB
7075 if (linux_read_memory (priv->r_debug + lmo->r_version_offset,
7076 (unsigned char *) &r_version,
7077 sizeof (r_version)) != 0
7078 || r_version != 1)
7079 {
7080 warning ("unexpected r_debug version %d", r_version);
7081 }
7082 else if (read_one_ptr (priv->r_debug + lmo->r_map_offset,
7083 &lm_addr, ptr_size) != 0)
7084 {
7085 warning ("unable to read r_map from 0x%lx",
7086 (long) priv->r_debug + lmo->r_map_offset);
7087 }
2268b414 7088 }
b1fbec62 7089 }
2268b414 7090
f6e8a41e 7091 std::string document = "<library-list-svr4 version=\"1.0\"";
b1fbec62
GB
7092
7093 while (lm_addr
7094 && read_one_ptr (lm_addr + lmo->l_name_offset,
7095 &l_name, ptr_size) == 0
7096 && read_one_ptr (lm_addr + lmo->l_addr_offset,
7097 &l_addr, ptr_size) == 0
7098 && read_one_ptr (lm_addr + lmo->l_ld_offset,
7099 &l_ld, ptr_size) == 0
7100 && read_one_ptr (lm_addr + lmo->l_prev_offset,
7101 &l_prev, ptr_size) == 0
7102 && read_one_ptr (lm_addr + lmo->l_next_offset,
7103 &l_next, ptr_size) == 0)
7104 {
7105 unsigned char libname[PATH_MAX];
7106
7107 if (lm_prev != l_prev)
2268b414 7108 {
b1fbec62
GB
7109 warning ("Corrupted shared library list: 0x%lx != 0x%lx",
7110 (long) lm_prev, (long) l_prev);
7111 break;
2268b414
JK
7112 }
7113
d878444c
JK
7114 /* Ignore the first entry even if it has valid name as the first entry
7115 corresponds to the main executable. The first entry should not be
7116 skipped if the dynamic loader was loaded late by a static executable
7117 (see solib-svr4.c parameter ignore_first). But in such case the main
7118 executable does not have PT_DYNAMIC present and this function already
7119 exited above due to failed get_r_debug. */
7120 if (lm_prev == 0)
f6e8a41e 7121 string_appendf (document, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
d878444c
JK
7122 else
7123 {
7124 /* Not checking for error because reading may stop before
7125 we've got PATH_MAX worth of characters. */
7126 libname[0] = '\0';
7127 linux_read_memory (l_name, libname, sizeof (libname) - 1);
7128 libname[sizeof (libname) - 1] = '\0';
7129 if (libname[0] != '\0')
2268b414 7130 {
d878444c
JK
7131 if (!header_done)
7132 {
7133 /* Terminate `<library-list-svr4'. */
f6e8a41e 7134 document += '>';
d878444c
JK
7135 header_done = 1;
7136 }
2268b414 7137
e6a58aa8
SM
7138 string_appendf (document, "<library name=\"");
7139 xml_escape_text_append (&document, (char *) libname);
7140 string_appendf (document, "\" lm=\"0x%lx\" "
f6e8a41e 7141 "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
e6a58aa8
SM
7142 (unsigned long) lm_addr, (unsigned long) l_addr,
7143 (unsigned long) l_ld);
d878444c 7144 }
0afae3cf 7145 }
b1fbec62
GB
7146
7147 lm_prev = lm_addr;
7148 lm_addr = l_next;
2268b414
JK
7149 }
7150
b1fbec62
GB
7151 if (!header_done)
7152 {
7153 /* Empty list; terminate `<library-list-svr4'. */
f6e8a41e 7154 document += "/>";
b1fbec62
GB
7155 }
7156 else
f6e8a41e 7157 document += "</library-list-svr4>";
b1fbec62 7158
f6e8a41e 7159 int document_len = document.length ();
2268b414
JK
7160 if (offset < document_len)
7161 document_len -= offset;
7162 else
7163 document_len = 0;
7164 if (len > document_len)
7165 len = document_len;
7166
f6e8a41e 7167 memcpy (readbuf, document.data () + offset, len);
2268b414
JK
7168
7169 return len;
7170}
7171
9accd112
MM
7172#ifdef HAVE_LINUX_BTRACE
7173
969c39fb 7174/* See to_disable_btrace target method. */
9accd112 7175
969c39fb
MM
7176static int
7177linux_low_disable_btrace (struct btrace_target_info *tinfo)
7178{
7179 enum btrace_error err;
7180
7181 err = linux_disable_btrace (tinfo);
7182 return (err == BTRACE_ERR_NONE ? 0 : -1);
7183}
7184
bc504a31 7185/* Encode an Intel Processor Trace configuration. */
b20a6524
MM
7186
7187static void
7188linux_low_encode_pt_config (struct buffer *buffer,
7189 const struct btrace_data_pt_config *config)
7190{
7191 buffer_grow_str (buffer, "<pt-config>\n");
7192
7193 switch (config->cpu.vendor)
7194 {
7195 case CV_INTEL:
7196 buffer_xml_printf (buffer, "<cpu vendor=\"GenuineIntel\" family=\"%u\" "
7197 "model=\"%u\" stepping=\"%u\"/>\n",
7198 config->cpu.family, config->cpu.model,
7199 config->cpu.stepping);
7200 break;
7201
7202 default:
7203 break;
7204 }
7205
7206 buffer_grow_str (buffer, "</pt-config>\n");
7207}
7208
7209/* Encode a raw buffer. */
7210
7211static void
7212linux_low_encode_raw (struct buffer *buffer, const gdb_byte *data,
7213 unsigned int size)
7214{
7215 if (size == 0)
7216 return;
7217
7218 /* We use hex encoding - see common/rsp-low.h. */
7219 buffer_grow_str (buffer, "<raw>\n");
7220
7221 while (size-- > 0)
7222 {
7223 char elem[2];
7224
7225 elem[0] = tohex ((*data >> 4) & 0xf);
7226 elem[1] = tohex (*data++ & 0xf);
7227
7228 buffer_grow (buffer, elem, 2);
7229 }
7230
7231 buffer_grow_str (buffer, "</raw>\n");
7232}
7233
969c39fb
MM
7234/* See to_read_btrace target method. */
7235
7236static int
9accd112 7237linux_low_read_btrace (struct btrace_target_info *tinfo, struct buffer *buffer,
add67df8 7238 enum btrace_read_type type)
9accd112 7239{
734b0e4b 7240 struct btrace_data btrace;
9accd112 7241 struct btrace_block *block;
969c39fb 7242 enum btrace_error err;
9accd112
MM
7243 int i;
7244
969c39fb
MM
7245 err = linux_read_btrace (&btrace, tinfo, type);
7246 if (err != BTRACE_ERR_NONE)
7247 {
7248 if (err == BTRACE_ERR_OVERFLOW)
7249 buffer_grow_str0 (buffer, "E.Overflow.");
7250 else
7251 buffer_grow_str0 (buffer, "E.Generic Error.");
7252
8dcc53b3 7253 return -1;
969c39fb 7254 }
9accd112 7255
734b0e4b
MM
7256 switch (btrace.format)
7257 {
7258 case BTRACE_FORMAT_NONE:
7259 buffer_grow_str0 (buffer, "E.No Trace.");
8dcc53b3 7260 return -1;
734b0e4b
MM
7261
7262 case BTRACE_FORMAT_BTS:
7263 buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n");
7264 buffer_grow_str (buffer, "<btrace version=\"1.0\">\n");
9accd112 7265
734b0e4b
MM
7266 for (i = 0;
7267 VEC_iterate (btrace_block_s, btrace.variant.bts.blocks, i, block);
7268 i++)
7269 buffer_xml_printf (buffer, "<block begin=\"0x%s\" end=\"0x%s\"/>\n",
7270 paddress (block->begin), paddress (block->end));
9accd112 7271
734b0e4b
MM
7272 buffer_grow_str0 (buffer, "</btrace>\n");
7273 break;
7274
b20a6524
MM
7275 case BTRACE_FORMAT_PT:
7276 buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n");
7277 buffer_grow_str (buffer, "<btrace version=\"1.0\">\n");
7278 buffer_grow_str (buffer, "<pt>\n");
7279
7280 linux_low_encode_pt_config (buffer, &btrace.variant.pt.config);
9accd112 7281
b20a6524
MM
7282 linux_low_encode_raw (buffer, btrace.variant.pt.data,
7283 btrace.variant.pt.size);
7284
7285 buffer_grow_str (buffer, "</pt>\n");
7286 buffer_grow_str0 (buffer, "</btrace>\n");
7287 break;
7288
7289 default:
7290 buffer_grow_str0 (buffer, "E.Unsupported Trace Format.");
8dcc53b3 7291 return -1;
734b0e4b 7292 }
969c39fb
MM
7293
7294 return 0;
9accd112 7295}
f4abbc16
MM
7296
7297/* See to_btrace_conf target method. */
7298
7299static int
7300linux_low_btrace_conf (const struct btrace_target_info *tinfo,
7301 struct buffer *buffer)
7302{
7303 const struct btrace_config *conf;
7304
7305 buffer_grow_str (buffer, "<!DOCTYPE btrace-conf SYSTEM \"btrace-conf.dtd\">\n");
7306 buffer_grow_str (buffer, "<btrace-conf version=\"1.0\">\n");
7307
7308 conf = linux_btrace_conf (tinfo);
7309 if (conf != NULL)
7310 {
7311 switch (conf->format)
7312 {
7313 case BTRACE_FORMAT_NONE:
7314 break;
7315
7316 case BTRACE_FORMAT_BTS:
d33501a5
MM
7317 buffer_xml_printf (buffer, "<bts");
7318 buffer_xml_printf (buffer, " size=\"0x%x\"", conf->bts.size);
7319 buffer_xml_printf (buffer, " />\n");
f4abbc16 7320 break;
b20a6524
MM
7321
7322 case BTRACE_FORMAT_PT:
7323 buffer_xml_printf (buffer, "<pt");
7324 buffer_xml_printf (buffer, " size=\"0x%x\"", conf->pt.size);
7325 buffer_xml_printf (buffer, "/>\n");
7326 break;
f4abbc16
MM
7327 }
7328 }
7329
7330 buffer_grow_str0 (buffer, "</btrace-conf>\n");
7331 return 0;
7332}
9accd112
MM
7333#endif /* HAVE_LINUX_BTRACE */
7334
7b669087
GB
7335/* See nat/linux-nat.h. */
7336
7337ptid_t
7338current_lwp_ptid (void)
7339{
7340 return ptid_of (current_thread);
7341}
7342
dd373349
AT
7343/* Implementation of the target_ops method "breakpoint_kind_from_pc". */
7344
7345static int
7346linux_breakpoint_kind_from_pc (CORE_ADDR *pcptr)
7347{
7348 if (the_low_target.breakpoint_kind_from_pc != NULL)
7349 return (*the_low_target.breakpoint_kind_from_pc) (pcptr);
7350 else
1652a986 7351 return default_breakpoint_kind_from_pc (pcptr);
dd373349
AT
7352}
7353
7354/* Implementation of the target_ops method "sw_breakpoint_from_kind". */
7355
7356static const gdb_byte *
7357linux_sw_breakpoint_from_kind (int kind, int *size)
7358{
7359 gdb_assert (the_low_target.sw_breakpoint_from_kind != NULL);
7360
7361 return (*the_low_target.sw_breakpoint_from_kind) (kind, size);
7362}
7363
769ef81f
AT
7364/* Implementation of the target_ops method
7365 "breakpoint_kind_from_current_state". */
7366
7367static int
7368linux_breakpoint_kind_from_current_state (CORE_ADDR *pcptr)
7369{
7370 if (the_low_target.breakpoint_kind_from_current_state != NULL)
7371 return (*the_low_target.breakpoint_kind_from_current_state) (pcptr);
7372 else
7373 return linux_breakpoint_kind_from_pc (pcptr);
7374}
7375
276d4552
YQ
7376/* Default implementation of linux_target_ops method "set_pc" for
7377 32-bit pc register which is literally named "pc". */
7378
7379void
7380linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc)
7381{
7382 uint32_t newpc = pc;
7383
7384 supply_register_by_name (regcache, "pc", &newpc);
7385}
7386
7387/* Default implementation of linux_target_ops method "get_pc" for
7388 32-bit pc register which is literally named "pc". */
7389
7390CORE_ADDR
7391linux_get_pc_32bit (struct regcache *regcache)
7392{
7393 uint32_t pc;
7394
7395 collect_register_by_name (regcache, "pc", &pc);
7396 if (debug_threads)
7397 debug_printf ("stop pc is 0x%" PRIx32 "\n", pc);
7398 return pc;
7399}
7400
6f69e520
YQ
7401/* Default implementation of linux_target_ops method "set_pc" for
7402 64-bit pc register which is literally named "pc". */
7403
7404void
7405linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc)
7406{
7407 uint64_t newpc = pc;
7408
7409 supply_register_by_name (regcache, "pc", &newpc);
7410}
7411
7412/* Default implementation of linux_target_ops method "get_pc" for
7413 64-bit pc register which is literally named "pc". */
7414
7415CORE_ADDR
7416linux_get_pc_64bit (struct regcache *regcache)
7417{
7418 uint64_t pc;
7419
7420 collect_register_by_name (regcache, "pc", &pc);
7421 if (debug_threads)
7422 debug_printf ("stop pc is 0x%" PRIx64 "\n", pc);
7423 return pc;
7424}
7425
7426
ce3a066d
DJ
7427static struct target_ops linux_target_ops = {
7428 linux_create_inferior,
ece66d65 7429 linux_post_create_inferior,
ce3a066d
DJ
7430 linux_attach,
7431 linux_kill,
6ad8ae5c 7432 linux_detach,
8336d594 7433 linux_mourn,
444d6139 7434 linux_join,
ce3a066d
DJ
7435 linux_thread_alive,
7436 linux_resume,
7437 linux_wait,
7438 linux_fetch_registers,
7439 linux_store_registers,
90d74c30 7440 linux_prepare_to_access_memory,
0146f85b 7441 linux_done_accessing_memory,
ce3a066d
DJ
7442 linux_read_memory,
7443 linux_write_memory,
2f2893d9 7444 linux_look_up_symbols,
ef57601b 7445 linux_request_interrupt,
aa691b87 7446 linux_read_auxv,
802e8e6d 7447 linux_supports_z_point_type,
d993e290
PA
7448 linux_insert_point,
7449 linux_remove_point,
3e572f71
PA
7450 linux_stopped_by_sw_breakpoint,
7451 linux_supports_stopped_by_sw_breakpoint,
7452 linux_stopped_by_hw_breakpoint,
7453 linux_supports_stopped_by_hw_breakpoint,
70b90b91 7454 linux_supports_hardware_single_step,
e013ee27
OF
7455 linux_stopped_by_watchpoint,
7456 linux_stopped_data_address,
db0dfaa0
LM
7457#if defined(__UCLIBC__) && defined(HAS_NOMMU) \
7458 && defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) \
7459 && defined(PT_TEXT_END_ADDR)
52fb6437 7460 linux_read_offsets,
dae5f5cf
DJ
7461#else
7462 NULL,
7463#endif
7464#ifdef USE_THREAD_DB
7465 thread_db_get_tls_address,
7466#else
7467 NULL,
52fb6437 7468#endif
efcbbd14 7469 linux_qxfer_spu,
59a016f0 7470 hostio_last_error_from_errno,
07e059b5 7471 linux_qxfer_osdata,
4aa995e1 7472 linux_xfer_siginfo,
bd99dc85
PA
7473 linux_supports_non_stop,
7474 linux_async,
7475 linux_start_non_stop,
cdbfd419 7476 linux_supports_multi_process,
89245bc0
DB
7477 linux_supports_fork_events,
7478 linux_supports_vfork_events,
94585166 7479 linux_supports_exec_events,
de0d863e 7480 linux_handle_new_gdb_connection,
cdbfd419 7481#ifdef USE_THREAD_DB
dc146f7c 7482 thread_db_handle_monitor_command,
cdbfd419 7483#else
dc146f7c 7484 NULL,
cdbfd419 7485#endif
d26e3629 7486 linux_common_core_of_thread,
78d85199 7487 linux_read_loadmap,
219f2f23
PA
7488 linux_process_qsupported,
7489 linux_supports_tracepoints,
7490 linux_read_pc,
8336d594
PA
7491 linux_write_pc,
7492 linux_thread_stopped,
7984d532 7493 NULL,
711e434b 7494 linux_pause_all,
7984d532 7495 linux_unpause_all,
fa593d66 7496 linux_stabilize_threads,
6a271cae 7497 linux_install_fast_tracepoint_jump_pad,
03583c20
UW
7498 linux_emit_ops,
7499 linux_supports_disable_randomization,
405f8e94 7500 linux_get_min_fast_tracepoint_insn_len,
2268b414 7501 linux_qxfer_libraries_svr4,
d1feda86 7502 linux_supports_agent,
9accd112 7503#ifdef HAVE_LINUX_BTRACE
0568462b 7504 linux_enable_btrace,
969c39fb 7505 linux_low_disable_btrace,
9accd112 7506 linux_low_read_btrace,
f4abbc16 7507 linux_low_btrace_conf,
9accd112
MM
7508#else
7509 NULL,
7510 NULL,
7511 NULL,
7512 NULL,
9accd112 7513#endif
c2d6af84 7514 linux_supports_range_stepping,
e57f1de3 7515 linux_proc_pid_to_exec_file,
14d2069a
GB
7516 linux_mntns_open_cloexec,
7517 linux_mntns_unlink,
7518 linux_mntns_readlink,
dd373349 7519 linux_breakpoint_kind_from_pc,
79efa585
SM
7520 linux_sw_breakpoint_from_kind,
7521 linux_proc_tid_get_name,
7d00775e 7522 linux_breakpoint_kind_from_current_state,
82075af2
JS
7523 linux_supports_software_single_step,
7524 linux_supports_catch_syscall,
ae91f625 7525 linux_get_ipa_tdesc_idx,
f6327dcb
KB
7526#if USE_THREAD_DB
7527 thread_db_thread_handle,
7528#else
7529 NULL,
7530#endif
ce3a066d
DJ
7531};
7532
3aee8918
PA
7533#ifdef HAVE_LINUX_REGSETS
7534void
7535initialize_regsets_info (struct regsets_info *info)
7536{
7537 for (info->num_regsets = 0;
7538 info->regsets[info->num_regsets].size >= 0;
7539 info->num_regsets++)
7540 ;
3aee8918
PA
7541}
7542#endif
7543
da6d8c04
DJ
7544void
7545initialize_low (void)
7546{
bd99dc85 7547 struct sigaction sigchld_action;
dd373349 7548
bd99dc85 7549 memset (&sigchld_action, 0, sizeof (sigchld_action));
ce3a066d 7550 set_target_ops (&linux_target_ops);
dd373349 7551
aa7c7447 7552 linux_ptrace_init_warnings ();
1b919490 7553 linux_proc_init_warnings ();
bd99dc85
PA
7554
7555 sigchld_action.sa_handler = sigchld_handler;
7556 sigemptyset (&sigchld_action.sa_mask);
7557 sigchld_action.sa_flags = SA_RESTART;
7558 sigaction (SIGCHLD, &sigchld_action, NULL);
3aee8918
PA
7559
7560 initialize_low_arch ();
89245bc0
DB
7561
7562 linux_check_ptrace_features ();
da6d8c04 7563}