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