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