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