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