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