2011-12-14 Pedro Alves <pedro@codesourcery.com>
[external/binutils.git] / gdb / gdbserver / linux-low.c
1 /* Low level interface to ptrace, for the remote server for GDB.
2    Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3    2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "server.h"
21 #include "linux-low.h"
22 #include "linux-osdata.h"
23
24 #include <sys/wait.h>
25 #include <stdio.h>
26 #include <sys/param.h>
27 #include <sys/ptrace.h>
28 #include "linux-ptrace.h"
29 #include "linux-procfs.h"
30 #include <signal.h>
31 #include <sys/ioctl.h>
32 #include <fcntl.h>
33 #include <string.h>
34 #include <stdlib.h>
35 #include <unistd.h>
36 #include <errno.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 #ifndef ELFMAG0
47 /* Don't include <linux/elf.h> here.  If it got included by gdb_proc_service.h
48    then ELFMAG0 will have been defined.  If it didn't get included by
49    gdb_proc_service.h then including it will likely introduce a duplicate
50    definition of elf_fpregset_t.  */
51 #include <elf.h>
52 #endif
53
54 #ifndef SPUFS_MAGIC
55 #define SPUFS_MAGIC 0x23c9b64e
56 #endif
57
58 #ifdef HAVE_PERSONALITY
59 # include <sys/personality.h>
60 # if !HAVE_DECL_ADDR_NO_RANDOMIZE
61 #  define ADDR_NO_RANDOMIZE 0x0040000
62 # endif
63 #endif
64
65 #ifndef O_LARGEFILE
66 #define O_LARGEFILE 0
67 #endif
68
69 #ifndef W_STOPCODE
70 #define W_STOPCODE(sig) ((sig) << 8 | 0x7f)
71 #endif
72
73 /* This is the kernel's hard limit.  Not to be confused with
74    SIGRTMIN.  */
75 #ifndef __SIGRTMIN
76 #define __SIGRTMIN 32
77 #endif
78
79 #ifdef __UCLIBC__
80 #if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
81 #define HAS_NOMMU
82 #endif
83 #endif
84
85 /* ``all_threads'' is keyed by the LWP ID, which we use as the GDB protocol
86    representation of the thread ID.
87
88    ``all_lwps'' is keyed by the process ID - which on Linux is (presently)
89    the same as the LWP ID.
90
91    ``all_processes'' is keyed by the "overall process ID", which
92    GNU/Linux calls tgid, "thread group ID".  */
93
94 struct inferior_list all_lwps;
95
96 /* A list of all unknown processes which receive stop signals.  Some other
97    process will presumably claim each of these as forked children
98    momentarily.  */
99
100 struct inferior_list stopped_pids;
101
102 /* FIXME this is a bit of a hack, and could be removed.  */
103 int stopping_threads;
104
105 /* FIXME make into a target method?  */
106 int using_threads = 1;
107
108 /* True if we're presently stabilizing threads (moving them out of
109    jump pads).  */
110 static int stabilizing_threads;
111
112 /* This flag is true iff we've just created or attached to our first
113    inferior but it has not stopped yet.  As soon as it does, we need
114    to call the low target's arch_setup callback.  Doing this only on
115    the first inferior avoids reinializing the architecture on every
116    inferior, and avoids messing with the register caches of the
117    already running inferiors.  NOTE: this assumes all inferiors under
118    control of gdbserver have the same architecture.  */
119 static int new_inferior;
120
121 static void linux_resume_one_lwp (struct lwp_info *lwp,
122                                   int step, int signal, siginfo_t *info);
123 static void linux_resume (struct thread_resume *resume_info, size_t n);
124 static void stop_all_lwps (int suspend, struct lwp_info *except);
125 static void unstop_all_lwps (int unsuspend, struct lwp_info *except);
126 static int linux_wait_for_event (ptid_t ptid, int *wstat, int options);
127 static void *add_lwp (ptid_t ptid);
128 static int linux_stopped_by_watchpoint (void);
129 static void mark_lwp_dead (struct lwp_info *lwp, int wstat);
130 static void proceed_all_lwps (void);
131 static int finish_step_over (struct lwp_info *lwp);
132 static CORE_ADDR get_stop_pc (struct lwp_info *lwp);
133 static int kill_lwp (unsigned long lwpid, int signo);
134 static void linux_enable_event_reporting (int pid);
135
136 /* True if the low target can hardware single-step.  Such targets
137    don't need a BREAKPOINT_REINSERT_ADDR callback.  */
138
139 static int
140 can_hardware_single_step (void)
141 {
142   return (the_low_target.breakpoint_reinsert_addr == NULL);
143 }
144
145 /* True if the low target supports memory breakpoints.  If so, we'll
146    have a GET_PC implementation.  */
147
148 static int
149 supports_breakpoints (void)
150 {
151   return (the_low_target.get_pc != NULL);
152 }
153
154 /* Returns true if this target can support fast tracepoints.  This
155    does not mean that the in-process agent has been loaded in the
156    inferior.  */
157
158 static int
159 supports_fast_tracepoints (void)
160 {
161   return the_low_target.install_fast_tracepoint_jump_pad != NULL;
162 }
163
164 struct pending_signals
165 {
166   int signal;
167   siginfo_t info;
168   struct pending_signals *prev;
169 };
170
171 #define PTRACE_ARG3_TYPE void *
172 #define PTRACE_ARG4_TYPE void *
173 #define PTRACE_XFER_TYPE long
174
175 #ifdef HAVE_LINUX_REGSETS
176 static char *disabled_regsets;
177 static int num_regsets;
178 #endif
179
180 /* The read/write ends of the pipe registered as waitable file in the
181    event loop.  */
182 static int linux_event_pipe[2] = { -1, -1 };
183
184 /* True if we're currently in async mode.  */
185 #define target_is_async_p() (linux_event_pipe[0] != -1)
186
187 static void send_sigstop (struct lwp_info *lwp);
188 static void wait_for_sigstop (struct inferior_list_entry *entry);
189
190 /* Accepts an integer PID; Returns a string representing a file that
191    can be opened to get info for the child process.
192    Space for the result is malloc'd, caller must free.  */
193
194 char *
195 linux_child_pid_to_exec_file (int pid)
196 {
197   char *name1, *name2;
198
199   name1 = xmalloc (MAXPATHLEN);
200   name2 = xmalloc (MAXPATHLEN);
201   memset (name2, 0, MAXPATHLEN);
202
203   sprintf (name1, "/proc/%d/exe", pid);
204   if (readlink (name1, name2, MAXPATHLEN) > 0)
205     {
206       free (name1);
207       return name2;
208     }
209   else
210     {
211       free (name2);
212       return name1;
213     }
214 }
215
216 /* Return non-zero if HEADER is a 64-bit ELF file.  */
217
218 static int
219 elf_64_header_p (const Elf64_Ehdr *header)
220 {
221   return (header->e_ident[EI_MAG0] == ELFMAG0
222           && header->e_ident[EI_MAG1] == ELFMAG1
223           && header->e_ident[EI_MAG2] == ELFMAG2
224           && header->e_ident[EI_MAG3] == ELFMAG3
225           && header->e_ident[EI_CLASS] == ELFCLASS64);
226 }
227
228 /* Return non-zero if FILE is a 64-bit ELF file,
229    zero if the file is not a 64-bit ELF file,
230    and -1 if the file is not accessible or doesn't exist.  */
231
232 int
233 elf_64_file_p (const char *file)
234 {
235   Elf64_Ehdr header;
236   int fd;
237
238   fd = open (file, O_RDONLY);
239   if (fd < 0)
240     return -1;
241
242   if (read (fd, &header, sizeof (header)) != sizeof (header))
243     {
244       close (fd);
245       return 0;
246     }
247   close (fd);
248
249   return elf_64_header_p (&header);
250 }
251
252 static void
253 delete_lwp (struct lwp_info *lwp)
254 {
255   remove_thread (get_lwp_thread (lwp));
256   remove_inferior (&all_lwps, &lwp->head);
257   free (lwp->arch_private);
258   free (lwp);
259 }
260
261 /* Add a process to the common process list, and set its private
262    data.  */
263
264 static struct process_info *
265 linux_add_process (int pid, int attached)
266 {
267   struct process_info *proc;
268
269   /* Is this the first process?  If so, then set the arch.  */
270   if (all_processes.head == NULL)
271     new_inferior = 1;
272
273   proc = add_process (pid, attached);
274   proc->private = xcalloc (1, sizeof (*proc->private));
275
276   if (the_low_target.new_process != NULL)
277     proc->private->arch_private = the_low_target.new_process ();
278
279   return proc;
280 }
281
282 /* Wrapper function for waitpid which handles EINTR, and emulates
283    __WALL for systems where that is not available.  */
284
285 static int
286 my_waitpid (int pid, int *status, int flags)
287 {
288   int ret, out_errno;
289
290   if (debug_threads)
291     fprintf (stderr, "my_waitpid (%d, 0x%x)\n", pid, flags);
292
293   if (flags & __WALL)
294     {
295       sigset_t block_mask, org_mask, wake_mask;
296       int wnohang;
297
298       wnohang = (flags & WNOHANG) != 0;
299       flags &= ~(__WALL | __WCLONE);
300       flags |= WNOHANG;
301
302       /* Block all signals while here.  This avoids knowing about
303          LinuxThread's signals.  */
304       sigfillset (&block_mask);
305       sigprocmask (SIG_BLOCK, &block_mask, &org_mask);
306
307       /* ... except during the sigsuspend below.  */
308       sigemptyset (&wake_mask);
309
310       while (1)
311         {
312           /* Since all signals are blocked, there's no need to check
313              for EINTR here.  */
314           ret = waitpid (pid, status, flags);
315           out_errno = errno;
316
317           if (ret == -1 && out_errno != ECHILD)
318             break;
319           else if (ret > 0)
320             break;
321
322           if (flags & __WCLONE)
323             {
324               /* We've tried both flavors now.  If WNOHANG is set,
325                  there's nothing else to do, just bail out.  */
326               if (wnohang)
327                 break;
328
329               if (debug_threads)
330                 fprintf (stderr, "blocking\n");
331
332               /* Block waiting for signals.  */
333               sigsuspend (&wake_mask);
334             }
335
336           flags ^= __WCLONE;
337         }
338
339       sigprocmask (SIG_SETMASK, &org_mask, NULL);
340     }
341   else
342     {
343       do
344         ret = waitpid (pid, status, flags);
345       while (ret == -1 && errno == EINTR);
346       out_errno = errno;
347     }
348
349   if (debug_threads)
350     fprintf (stderr, "my_waitpid (%d, 0x%x): status(%x), %d\n",
351              pid, flags, status ? *status : -1, ret);
352
353   errno = out_errno;
354   return ret;
355 }
356
357 /* Handle a GNU/Linux extended wait response.  If we see a clone
358    event, we need to add the new LWP to our list (and not report the
359    trap to higher layers).  */
360
361 static void
362 handle_extended_wait (struct lwp_info *event_child, int wstat)
363 {
364   int event = wstat >> 16;
365   struct lwp_info *new_lwp;
366
367   if (event == PTRACE_EVENT_CLONE)
368     {
369       ptid_t ptid;
370       unsigned long new_pid;
371       int ret, status = W_STOPCODE (SIGSTOP);
372
373       ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_child), 0, &new_pid);
374
375       /* If we haven't already seen the new PID stop, wait for it now.  */
376       if (! pull_pid_from_list (&stopped_pids, new_pid))
377         {
378           /* The new child has a pending SIGSTOP.  We can't affect it until it
379              hits the SIGSTOP, but we're already attached.  */
380
381           ret = my_waitpid (new_pid, &status, __WALL);
382
383           if (ret == -1)
384             perror_with_name ("waiting for new child");
385           else if (ret != new_pid)
386             warning ("wait returned unexpected PID %d", ret);
387           else if (!WIFSTOPPED (status))
388             warning ("wait returned unexpected status 0x%x", status);
389         }
390
391       linux_enable_event_reporting (new_pid);
392
393       ptid = ptid_build (pid_of (event_child), new_pid, 0);
394       new_lwp = (struct lwp_info *) add_lwp (ptid);
395       add_thread (ptid, new_lwp);
396
397       /* Either we're going to immediately resume the new thread
398          or leave it stopped.  linux_resume_one_lwp is a nop if it
399          thinks the thread is currently running, so set this first
400          before calling linux_resume_one_lwp.  */
401       new_lwp->stopped = 1;
402
403       /* Normally we will get the pending SIGSTOP.  But in some cases
404          we might get another signal delivered to the group first.
405          If we do get another signal, be sure not to lose it.  */
406       if (WSTOPSIG (status) == SIGSTOP)
407         {
408           if (stopping_threads)
409             new_lwp->stop_pc = get_stop_pc (new_lwp);
410           else
411             linux_resume_one_lwp (new_lwp, 0, 0, NULL);
412         }
413       else
414         {
415           new_lwp->stop_expected = 1;
416
417           if (stopping_threads)
418             {
419               new_lwp->stop_pc = get_stop_pc (new_lwp);
420               new_lwp->status_pending_p = 1;
421               new_lwp->status_pending = status;
422             }
423           else
424             /* Pass the signal on.  This is what GDB does - except
425                shouldn't we really report it instead?  */
426             linux_resume_one_lwp (new_lwp, 0, WSTOPSIG (status), NULL);
427         }
428
429       /* Always resume the current thread.  If we are stopping
430          threads, it will have a pending SIGSTOP; we may as well
431          collect it now.  */
432       linux_resume_one_lwp (event_child, event_child->stepping, 0, NULL);
433     }
434 }
435
436 /* Return the PC as read from the regcache of LWP, without any
437    adjustment.  */
438
439 static CORE_ADDR
440 get_pc (struct lwp_info *lwp)
441 {
442   struct thread_info *saved_inferior;
443   struct regcache *regcache;
444   CORE_ADDR pc;
445
446   if (the_low_target.get_pc == NULL)
447     return 0;
448
449   saved_inferior = current_inferior;
450   current_inferior = get_lwp_thread (lwp);
451
452   regcache = get_thread_regcache (current_inferior, 1);
453   pc = (*the_low_target.get_pc) (regcache);
454
455   if (debug_threads)
456     fprintf (stderr, "pc is 0x%lx\n", (long) pc);
457
458   current_inferior = saved_inferior;
459   return pc;
460 }
461
462 /* This function should only be called if LWP got a SIGTRAP.
463    The SIGTRAP could mean several things.
464
465    On i386, where decr_pc_after_break is non-zero:
466    If we were single-stepping this process using PTRACE_SINGLESTEP,
467    we will get only the one SIGTRAP (even if the instruction we
468    stepped over was a breakpoint).  The value of $eip will be the
469    next instruction.
470    If we continue the process using PTRACE_CONT, we will get a
471    SIGTRAP when we hit a breakpoint.  The value of $eip will be
472    the instruction after the breakpoint (i.e. needs to be
473    decremented).  If we report the SIGTRAP to GDB, we must also
474    report the undecremented PC.  If we cancel the SIGTRAP, we
475    must resume at the decremented PC.
476
477    (Presumably, not yet tested) On a non-decr_pc_after_break machine
478    with hardware or kernel single-step:
479    If we single-step over a breakpoint instruction, our PC will
480    point at the following instruction.  If we continue and hit a
481    breakpoint instruction, our PC will point at the breakpoint
482    instruction.  */
483
484 static CORE_ADDR
485 get_stop_pc (struct lwp_info *lwp)
486 {
487   CORE_ADDR stop_pc;
488
489   if (the_low_target.get_pc == NULL)
490     return 0;
491
492   stop_pc = get_pc (lwp);
493
494   if (WSTOPSIG (lwp->last_status) == SIGTRAP
495       && !lwp->stepping
496       && !lwp->stopped_by_watchpoint
497       && lwp->last_status >> 16 == 0)
498     stop_pc -= the_low_target.decr_pc_after_break;
499
500   if (debug_threads)
501     fprintf (stderr, "stop pc is 0x%lx\n", (long) stop_pc);
502
503   return stop_pc;
504 }
505
506 static void *
507 add_lwp (ptid_t ptid)
508 {
509   struct lwp_info *lwp;
510
511   lwp = (struct lwp_info *) xmalloc (sizeof (*lwp));
512   memset (lwp, 0, sizeof (*lwp));
513
514   lwp->head.id = ptid;
515
516   if (the_low_target.new_thread != NULL)
517     lwp->arch_private = the_low_target.new_thread ();
518
519   add_inferior_to_list (&all_lwps, &lwp->head);
520
521   return lwp;
522 }
523
524 /* Start an inferior process and returns its pid.
525    ALLARGS is a vector of program-name and args. */
526
527 static int
528 linux_create_inferior (char *program, char **allargs)
529 {
530 #ifdef HAVE_PERSONALITY
531   int personality_orig = 0, personality_set = 0;
532 #endif
533   struct lwp_info *new_lwp;
534   int pid;
535   ptid_t ptid;
536
537 #ifdef HAVE_PERSONALITY
538   if (disable_randomization)
539     {
540       errno = 0;
541       personality_orig = personality (0xffffffff);
542       if (errno == 0 && !(personality_orig & ADDR_NO_RANDOMIZE))
543         {
544           personality_set = 1;
545           personality (personality_orig | ADDR_NO_RANDOMIZE);
546         }
547       if (errno != 0 || (personality_set
548                          && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
549         warning ("Error disabling address space randomization: %s",
550                  strerror (errno));
551     }
552 #endif
553
554 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
555   pid = vfork ();
556 #else
557   pid = fork ();
558 #endif
559   if (pid < 0)
560     perror_with_name ("fork");
561
562   if (pid == 0)
563     {
564       ptrace (PTRACE_TRACEME, 0, 0, 0);
565
566 #ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does.  */
567       signal (__SIGRTMIN + 1, SIG_DFL);
568 #endif
569
570       setpgid (0, 0);
571
572       execv (program, allargs);
573       if (errno == ENOENT)
574         execvp (program, allargs);
575
576       fprintf (stderr, "Cannot exec %s: %s.\n", program,
577                strerror (errno));
578       fflush (stderr);
579       _exit (0177);
580     }
581
582 #ifdef HAVE_PERSONALITY
583   if (personality_set)
584     {
585       errno = 0;
586       personality (personality_orig);
587       if (errno != 0)
588         warning ("Error restoring address space randomization: %s",
589                  strerror (errno));
590     }
591 #endif
592
593   linux_add_process (pid, 0);
594
595   ptid = ptid_build (pid, pid, 0);
596   new_lwp = add_lwp (ptid);
597   add_thread (ptid, new_lwp);
598   new_lwp->must_set_ptrace_flags = 1;
599
600   return pid;
601 }
602
603 /* Attach to an inferior process.  */
604
605 static void
606 linux_attach_lwp_1 (unsigned long lwpid, int initial)
607 {
608   ptid_t ptid;
609   struct lwp_info *new_lwp;
610
611   if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) != 0)
612     {
613       if (!initial)
614         {
615           /* If we fail to attach to an LWP, just warn.  */
616           fprintf (stderr, "Cannot attach to lwp %ld: %s (%d)\n", lwpid,
617                    strerror (errno), errno);
618           fflush (stderr);
619           return;
620         }
621       else
622         /* If we fail to attach to a process, report an error.  */
623         error ("Cannot attach to lwp %ld: %s (%d)\n", lwpid,
624                strerror (errno), errno);
625     }
626
627   if (initial)
628     /* If lwp is the tgid, we handle adding existing threads later.
629        Otherwise we just add lwp without bothering about any other
630        threads.  */
631     ptid = ptid_build (lwpid, lwpid, 0);
632   else
633     {
634       /* Note that extracting the pid from the current inferior is
635          safe, since we're always called in the context of the same
636          process as this new thread.  */
637       int pid = pid_of (get_thread_lwp (current_inferior));
638       ptid = ptid_build (pid, lwpid, 0);
639     }
640
641   new_lwp = (struct lwp_info *) add_lwp (ptid);
642   add_thread (ptid, new_lwp);
643
644   /* We need to wait for SIGSTOP before being able to make the next
645      ptrace call on this LWP.  */
646   new_lwp->must_set_ptrace_flags = 1;
647
648   /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
649      brings it to a halt.
650
651      There are several cases to consider here:
652
653      1) gdbserver has already attached to the process and is being notified
654         of a new thread that is being created.
655         In this case we should ignore that SIGSTOP and resume the
656         process.  This is handled below by setting stop_expected = 1,
657         and the fact that add_thread sets last_resume_kind ==
658         resume_continue.
659
660      2) This is the first thread (the process thread), and we're attaching
661         to it via attach_inferior.
662         In this case we want the process thread to stop.
663         This is handled by having linux_attach set last_resume_kind ==
664         resume_stop after we return.
665
666         If the pid we are attaching to is also the tgid, we attach to and
667         stop all the existing threads.  Otherwise, we attach to pid and
668         ignore any other threads in the same group as this pid.
669
670      3) GDB is connecting to gdbserver and is requesting an enumeration of all
671         existing threads.
672         In this case we want the thread to stop.
673         FIXME: This case is currently not properly handled.
674         We should wait for the SIGSTOP but don't.  Things work apparently
675         because enough time passes between when we ptrace (ATTACH) and when
676         gdb makes the next ptrace call on the thread.
677
678      On the other hand, if we are currently trying to stop all threads, we
679      should treat the new thread as if we had sent it a SIGSTOP.  This works
680      because we are guaranteed that the add_lwp call above added us to the
681      end of the list, and so the new thread has not yet reached
682      wait_for_sigstop (but will).  */
683   new_lwp->stop_expected = 1;
684 }
685
686 void
687 linux_attach_lwp (unsigned long lwpid)
688 {
689   linux_attach_lwp_1 (lwpid, 0);
690 }
691
692 /* Attach to PID.  If PID is the tgid, attach to it and all
693    of its threads.  */
694
695 int
696 linux_attach (unsigned long pid)
697 {
698   /* Attach to PID.  We will check for other threads
699      soon.  */
700   linux_attach_lwp_1 (pid, 1);
701   linux_add_process (pid, 1);
702
703   if (!non_stop)
704     {
705       struct thread_info *thread;
706
707      /* Don't ignore the initial SIGSTOP if we just attached to this
708         process.  It will be collected by wait shortly.  */
709       thread = find_thread_ptid (ptid_build (pid, pid, 0));
710       thread->last_resume_kind = resume_stop;
711     }
712
713   if (linux_proc_get_tgid (pid) == pid)
714     {
715       DIR *dir;
716       char pathname[128];
717
718       sprintf (pathname, "/proc/%ld/task", pid);
719
720       dir = opendir (pathname);
721
722       if (!dir)
723         {
724           fprintf (stderr, "Could not open /proc/%ld/task.\n", pid);
725           fflush (stderr);
726         }
727       else
728         {
729           /* At this point we attached to the tgid.  Scan the task for
730              existing threads.  */
731           unsigned long lwp;
732           int new_threads_found;
733           int iterations = 0;
734           struct dirent *dp;
735
736           while (iterations < 2)
737             {
738               new_threads_found = 0;
739               /* Add all the other threads.  While we go through the
740                  threads, new threads may be spawned.  Cycle through
741                  the list of threads until we have done two iterations without
742                  finding new threads.  */
743               while ((dp = readdir (dir)) != NULL)
744                 {
745                   /* Fetch one lwp.  */
746                   lwp = strtoul (dp->d_name, NULL, 10);
747
748                   /* Is this a new thread?  */
749                   if (lwp
750                       && find_thread_ptid (ptid_build (pid, lwp, 0)) == NULL)
751                     {
752                       linux_attach_lwp_1 (lwp, 0);
753                       new_threads_found++;
754
755                       if (debug_threads)
756                         fprintf (stderr, "\
757 Found and attached to new lwp %ld\n", lwp);
758                     }
759                 }
760
761               if (!new_threads_found)
762                 iterations++;
763               else
764                 iterations = 0;
765
766               rewinddir (dir);
767             }
768           closedir (dir);
769         }
770     }
771
772   return 0;
773 }
774
775 struct counter
776 {
777   int pid;
778   int count;
779 };
780
781 static int
782 second_thread_of_pid_p (struct inferior_list_entry *entry, void *args)
783 {
784   struct counter *counter = args;
785
786   if (ptid_get_pid (entry->id) == counter->pid)
787     {
788       if (++counter->count > 1)
789         return 1;
790     }
791
792   return 0;
793 }
794
795 static int
796 last_thread_of_process_p (struct thread_info *thread)
797 {
798   ptid_t ptid = ((struct inferior_list_entry *)thread)->id;
799   int pid = ptid_get_pid (ptid);
800   struct counter counter = { pid , 0 };
801
802   return (find_inferior (&all_threads,
803                          second_thread_of_pid_p, &counter) == NULL);
804 }
805
806 /* Kill the inferior lwp.  */
807
808 static int
809 linux_kill_one_lwp (struct inferior_list_entry *entry, void *args)
810 {
811   struct thread_info *thread = (struct thread_info *) entry;
812   struct lwp_info *lwp = get_thread_lwp (thread);
813   int wstat;
814   int pid = * (int *) args;
815
816   if (ptid_get_pid (entry->id) != pid)
817     return 0;
818
819   /* We avoid killing the first thread here, because of a Linux kernel (at
820      least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
821      the children get a chance to be reaped, it will remain a zombie
822      forever.  */
823
824   if (lwpid_of (lwp) == pid)
825     {
826       if (debug_threads)
827         fprintf (stderr, "lkop: is last of process %s\n",
828                  target_pid_to_str (entry->id));
829       return 0;
830     }
831
832   do
833     {
834       ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0);
835
836       /* Make sure it died.  The loop is most likely unnecessary.  */
837       pid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
838     } while (pid > 0 && WIFSTOPPED (wstat));
839
840   return 0;
841 }
842
843 static int
844 linux_kill (int pid)
845 {
846   struct process_info *process;
847   struct lwp_info *lwp;
848   int wstat;
849   int lwpid;
850
851   process = find_process_pid (pid);
852   if (process == NULL)
853     return -1;
854
855   /* If we're killing a running inferior, make sure it is stopped
856      first, as PTRACE_KILL will not work otherwise.  */
857   stop_all_lwps (0, NULL);
858
859   find_inferior (&all_threads, linux_kill_one_lwp, &pid);
860
861   /* See the comment in linux_kill_one_lwp.  We did not kill the first
862      thread in the list, so do so now.  */
863   lwp = find_lwp_pid (pid_to_ptid (pid));
864
865   if (lwp == NULL)
866     {
867       if (debug_threads)
868         fprintf (stderr, "lk_1: cannot find lwp %ld, for pid: %d\n",
869                  lwpid_of (lwp), pid);
870     }
871   else
872     {
873       if (debug_threads)
874         fprintf (stderr, "lk_1: killing lwp %ld, for pid: %d\n",
875                  lwpid_of (lwp), pid);
876
877       do
878         {
879           ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0);
880
881           /* Make sure it died.  The loop is most likely unnecessary.  */
882           lwpid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
883         } while (lwpid > 0 && WIFSTOPPED (wstat));
884     }
885
886   the_target->mourn (process);
887
888   /* Since we presently can only stop all lwps of all processes, we
889      need to unstop lwps of other processes.  */
890   unstop_all_lwps (0, NULL);
891   return 0;
892 }
893
894 static int
895 linux_detach_one_lwp (struct inferior_list_entry *entry, void *args)
896 {
897   struct thread_info *thread = (struct thread_info *) entry;
898   struct lwp_info *lwp = get_thread_lwp (thread);
899   int pid = * (int *) args;
900
901   if (ptid_get_pid (entry->id) != pid)
902     return 0;
903
904   /* If this process is stopped but is expecting a SIGSTOP, then make
905      sure we take care of that now.  This isn't absolutely guaranteed
906      to collect the SIGSTOP, but is fairly likely to.  */
907   if (lwp->stop_expected)
908     {
909       int wstat;
910       /* Clear stop_expected, so that the SIGSTOP will be reported.  */
911       lwp->stop_expected = 0;
912       linux_resume_one_lwp (lwp, 0, 0, NULL);
913       linux_wait_for_event (lwp->head.id, &wstat, __WALL);
914     }
915
916   /* Flush any pending changes to the process's registers.  */
917   regcache_invalidate_one ((struct inferior_list_entry *)
918                            get_lwp_thread (lwp));
919
920   /* Finally, let it resume.  */
921   if (the_low_target.prepare_to_resume != NULL)
922     the_low_target.prepare_to_resume (lwp);
923   ptrace (PTRACE_DETACH, lwpid_of (lwp), 0, 0);
924
925   delete_lwp (lwp);
926   return 0;
927 }
928
929 static int
930 linux_detach (int pid)
931 {
932   struct process_info *process;
933
934   process = find_process_pid (pid);
935   if (process == NULL)
936     return -1;
937
938   /* Stop all threads before detaching.  First, ptrace requires that
939      the thread is stopped to sucessfully detach.  Second, thread_db
940      may need to uninstall thread event breakpoints from memory, which
941      only works with a stopped process anyway.  */
942   stop_all_lwps (0, NULL);
943
944 #ifdef USE_THREAD_DB
945   thread_db_detach (process);
946 #endif
947
948   /* Stabilize threads (move out of jump pads).  */
949   stabilize_threads ();
950
951   find_inferior (&all_threads, linux_detach_one_lwp, &pid);
952
953   the_target->mourn (process);
954
955   /* Since we presently can only stop all lwps of all processes, we
956      need to unstop lwps of other processes.  */
957   unstop_all_lwps (0, NULL);
958   return 0;
959 }
960
961 /* Remove all LWPs that belong to process PROC from the lwp list.  */
962
963 static int
964 delete_lwp_callback (struct inferior_list_entry *entry, void *proc)
965 {
966   struct lwp_info *lwp = (struct lwp_info *) entry;
967   struct process_info *process = proc;
968
969   if (pid_of (lwp) == pid_of (process))
970     delete_lwp (lwp);
971
972   return 0;
973 }
974
975 static void
976 linux_mourn (struct process_info *process)
977 {
978   struct process_info_private *priv;
979
980 #ifdef USE_THREAD_DB
981   thread_db_mourn (process);
982 #endif
983
984   find_inferior (&all_lwps, delete_lwp_callback, process);
985
986   /* Freeing all private data.  */
987   priv = process->private;
988   free (priv->arch_private);
989   free (priv);
990   process->private = NULL;
991
992   remove_process (process);
993 }
994
995 static void
996 linux_join (int pid)
997 {
998   int status, ret;
999
1000   do {
1001     ret = my_waitpid (pid, &status, 0);
1002     if (WIFEXITED (status) || WIFSIGNALED (status))
1003       break;
1004   } while (ret != -1 || errno != ECHILD);
1005 }
1006
1007 /* Return nonzero if the given thread is still alive.  */
1008 static int
1009 linux_thread_alive (ptid_t ptid)
1010 {
1011   struct lwp_info *lwp = find_lwp_pid (ptid);
1012
1013   /* We assume we always know if a thread exits.  If a whole process
1014      exited but we still haven't been able to report it to GDB, we'll
1015      hold on to the last lwp of the dead process.  */
1016   if (lwp != NULL)
1017     return !lwp->dead;
1018   else
1019     return 0;
1020 }
1021
1022 /* Return 1 if this lwp has an interesting status pending.  */
1023 static int
1024 status_pending_p_callback (struct inferior_list_entry *entry, void *arg)
1025 {
1026   struct lwp_info *lwp = (struct lwp_info *) entry;
1027   ptid_t ptid = * (ptid_t *) arg;
1028   struct thread_info *thread;
1029
1030   /* Check if we're only interested in events from a specific process
1031      or its lwps.  */
1032   if (!ptid_equal (minus_one_ptid, ptid)
1033       && ptid_get_pid (ptid) != ptid_get_pid (lwp->head.id))
1034     return 0;
1035
1036   thread = get_lwp_thread (lwp);
1037
1038   /* If we got a `vCont;t', but we haven't reported a stop yet, do
1039      report any status pending the LWP may have.  */
1040   if (thread->last_resume_kind == resume_stop
1041       && thread->last_status.kind != TARGET_WAITKIND_IGNORE)
1042     return 0;
1043
1044   return lwp->status_pending_p;
1045 }
1046
1047 static int
1048 same_lwp (struct inferior_list_entry *entry, void *data)
1049 {
1050   ptid_t ptid = *(ptid_t *) data;
1051   int lwp;
1052
1053   if (ptid_get_lwp (ptid) != 0)
1054     lwp = ptid_get_lwp (ptid);
1055   else
1056     lwp = ptid_get_pid (ptid);
1057
1058   if (ptid_get_lwp (entry->id) == lwp)
1059     return 1;
1060
1061   return 0;
1062 }
1063
1064 struct lwp_info *
1065 find_lwp_pid (ptid_t ptid)
1066 {
1067   return (struct lwp_info*) find_inferior (&all_lwps, same_lwp, &ptid);
1068 }
1069
1070 static struct lwp_info *
1071 linux_wait_for_lwp (ptid_t ptid, int *wstatp, int options)
1072 {
1073   int ret;
1074   int to_wait_for = -1;
1075   struct lwp_info *child = NULL;
1076
1077   if (debug_threads)
1078     fprintf (stderr, "linux_wait_for_lwp: %s\n", target_pid_to_str (ptid));
1079
1080   if (ptid_equal (ptid, minus_one_ptid))
1081     to_wait_for = -1;                   /* any child */
1082   else
1083     to_wait_for = ptid_get_lwp (ptid);  /* this lwp only */
1084
1085   options |= __WALL;
1086
1087 retry:
1088
1089   ret = my_waitpid (to_wait_for, wstatp, options);
1090   if (ret == 0 || (ret == -1 && errno == ECHILD && (options & WNOHANG)))
1091     return NULL;
1092   else if (ret == -1)
1093     perror_with_name ("waitpid");
1094
1095   if (debug_threads
1096       && (!WIFSTOPPED (*wstatp)
1097           || (WSTOPSIG (*wstatp) != 32
1098               && WSTOPSIG (*wstatp) != 33)))
1099     fprintf (stderr, "Got an event from %d (%x)\n", ret, *wstatp);
1100
1101   child = find_lwp_pid (pid_to_ptid (ret));
1102
1103   /* If we didn't find a process, one of two things presumably happened:
1104      - A process we started and then detached from has exited.  Ignore it.
1105      - A process we are controlling has forked and the new child's stop
1106      was reported to us by the kernel.  Save its PID.  */
1107   if (child == NULL && WIFSTOPPED (*wstatp))
1108     {
1109       add_pid_to_list (&stopped_pids, ret);
1110       goto retry;
1111     }
1112   else if (child == NULL)
1113     goto retry;
1114
1115   child->stopped = 1;
1116
1117   child->last_status = *wstatp;
1118
1119   /* Architecture-specific setup after inferior is running.
1120      This needs to happen after we have attached to the inferior
1121      and it is stopped for the first time, but before we access
1122      any inferior registers.  */
1123   if (new_inferior)
1124     {
1125       the_low_target.arch_setup ();
1126 #ifdef HAVE_LINUX_REGSETS
1127       memset (disabled_regsets, 0, num_regsets);
1128 #endif
1129       new_inferior = 0;
1130     }
1131
1132   /* Fetch the possibly triggered data watchpoint info and store it in
1133      CHILD.
1134
1135      On some archs, like x86, that use debug registers to set
1136      watchpoints, it's possible that the way to know which watched
1137      address trapped, is to check the register that is used to select
1138      which address to watch.  Problem is, between setting the
1139      watchpoint and reading back which data address trapped, the user
1140      may change the set of watchpoints, and, as a consequence, GDB
1141      changes the debug registers in the inferior.  To avoid reading
1142      back a stale stopped-data-address when that happens, we cache in
1143      LP the fact that a watchpoint trapped, and the corresponding data
1144      address, as soon as we see CHILD stop with a SIGTRAP.  If GDB
1145      changes the debug registers meanwhile, we have the cached data we
1146      can rely on.  */
1147
1148   if (WIFSTOPPED (*wstatp) && WSTOPSIG (*wstatp) == SIGTRAP)
1149     {
1150       if (the_low_target.stopped_by_watchpoint == NULL)
1151         {
1152           child->stopped_by_watchpoint = 0;
1153         }
1154       else
1155         {
1156           struct thread_info *saved_inferior;
1157
1158           saved_inferior = current_inferior;
1159           current_inferior = get_lwp_thread (child);
1160
1161           child->stopped_by_watchpoint
1162             = the_low_target.stopped_by_watchpoint ();
1163
1164           if (child->stopped_by_watchpoint)
1165             {
1166               if (the_low_target.stopped_data_address != NULL)
1167                 child->stopped_data_address
1168                   = the_low_target.stopped_data_address ();
1169               else
1170                 child->stopped_data_address = 0;
1171             }
1172
1173           current_inferior = saved_inferior;
1174         }
1175     }
1176
1177   /* Store the STOP_PC, with adjustment applied.  This depends on the
1178      architecture being defined already (so that CHILD has a valid
1179      regcache), and on LAST_STATUS being set (to check for SIGTRAP or
1180      not).  */
1181   if (WIFSTOPPED (*wstatp))
1182     child->stop_pc = get_stop_pc (child);
1183
1184   if (debug_threads
1185       && WIFSTOPPED (*wstatp)
1186       && the_low_target.get_pc != NULL)
1187     {
1188       struct thread_info *saved_inferior = current_inferior;
1189       struct regcache *regcache;
1190       CORE_ADDR pc;
1191
1192       current_inferior = get_lwp_thread (child);
1193       regcache = get_thread_regcache (current_inferior, 1);
1194       pc = (*the_low_target.get_pc) (regcache);
1195       fprintf (stderr, "linux_wait_for_lwp: pc is 0x%lx\n", (long) pc);
1196       current_inferior = saved_inferior;
1197     }
1198
1199   return child;
1200 }
1201
1202 /* This function should only be called if the LWP got a SIGTRAP.
1203
1204    Handle any tracepoint steps or hits.  Return true if a tracepoint
1205    event was handled, 0 otherwise.  */
1206
1207 static int
1208 handle_tracepoints (struct lwp_info *lwp)
1209 {
1210   struct thread_info *tinfo = get_lwp_thread (lwp);
1211   int tpoint_related_event = 0;
1212
1213   /* If this tracepoint hit causes a tracing stop, we'll immediately
1214      uninsert tracepoints.  To do this, we temporarily pause all
1215      threads, unpatch away, and then unpause threads.  We need to make
1216      sure the unpausing doesn't resume LWP too.  */
1217   lwp->suspended++;
1218
1219   /* And we need to be sure that any all-threads-stopping doesn't try
1220      to move threads out of the jump pads, as it could deadlock the
1221      inferior (LWP could be in the jump pad, maybe even holding the
1222      lock.)  */
1223
1224   /* Do any necessary step collect actions.  */
1225   tpoint_related_event |= tracepoint_finished_step (tinfo, lwp->stop_pc);
1226
1227   tpoint_related_event |= handle_tracepoint_bkpts (tinfo, lwp->stop_pc);
1228
1229   /* See if we just hit a tracepoint and do its main collect
1230      actions.  */
1231   tpoint_related_event |= tracepoint_was_hit (tinfo, lwp->stop_pc);
1232
1233   lwp->suspended--;
1234
1235   gdb_assert (lwp->suspended == 0);
1236   gdb_assert (!stabilizing_threads || lwp->collecting_fast_tracepoint);
1237
1238   if (tpoint_related_event)
1239     {
1240       if (debug_threads)
1241         fprintf (stderr, "got a tracepoint event\n");
1242       return 1;
1243     }
1244
1245   return 0;
1246 }
1247
1248 /* Convenience wrapper.  Returns true if LWP is presently collecting a
1249    fast tracepoint.  */
1250
1251 static int
1252 linux_fast_tracepoint_collecting (struct lwp_info *lwp,
1253                                   struct fast_tpoint_collect_status *status)
1254 {
1255   CORE_ADDR thread_area;
1256
1257   if (the_low_target.get_thread_area == NULL)
1258     return 0;
1259
1260   /* Get the thread area address.  This is used to recognize which
1261      thread is which when tracing with the in-process agent library.
1262      We don't read anything from the address, and treat it as opaque;
1263      it's the address itself that we assume is unique per-thread.  */
1264   if ((*the_low_target.get_thread_area) (lwpid_of (lwp), &thread_area) == -1)
1265     return 0;
1266
1267   return fast_tracepoint_collecting (thread_area, lwp->stop_pc, status);
1268 }
1269
1270 /* The reason we resume in the caller, is because we want to be able
1271    to pass lwp->status_pending as WSTAT, and we need to clear
1272    status_pending_p before resuming, otherwise, linux_resume_one_lwp
1273    refuses to resume.  */
1274
1275 static int
1276 maybe_move_out_of_jump_pad (struct lwp_info *lwp, int *wstat)
1277 {
1278   struct thread_info *saved_inferior;
1279
1280   saved_inferior = current_inferior;
1281   current_inferior = get_lwp_thread (lwp);
1282
1283   if ((wstat == NULL
1284        || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP))
1285       && supports_fast_tracepoints ()
1286       && in_process_agent_loaded ())
1287     {
1288       struct fast_tpoint_collect_status status;
1289       int r;
1290
1291       if (debug_threads)
1292         fprintf (stderr, "\
1293 Checking whether LWP %ld needs to move out of the jump pad.\n",
1294                  lwpid_of (lwp));
1295
1296       r = linux_fast_tracepoint_collecting (lwp, &status);
1297
1298       if (wstat == NULL
1299           || (WSTOPSIG (*wstat) != SIGILL
1300               && WSTOPSIG (*wstat) != SIGFPE
1301               && WSTOPSIG (*wstat) != SIGSEGV
1302               && WSTOPSIG (*wstat) != SIGBUS))
1303         {
1304           lwp->collecting_fast_tracepoint = r;
1305
1306           if (r != 0)
1307             {
1308               if (r == 1 && lwp->exit_jump_pad_bkpt == NULL)
1309                 {
1310                   /* Haven't executed the original instruction yet.
1311                      Set breakpoint there, and wait till it's hit,
1312                      then single-step until exiting the jump pad.  */
1313                   lwp->exit_jump_pad_bkpt
1314                     = set_breakpoint_at (status.adjusted_insn_addr, NULL);
1315                 }
1316
1317               if (debug_threads)
1318                 fprintf (stderr, "\
1319 Checking whether LWP %ld needs to move out of the jump pad...it does\n",
1320                  lwpid_of (lwp));
1321               current_inferior = saved_inferior;
1322
1323               return 1;
1324             }
1325         }
1326       else
1327         {
1328           /* If we get a synchronous signal while collecting, *and*
1329              while executing the (relocated) original instruction,
1330              reset the PC to point at the tpoint address, before
1331              reporting to GDB.  Otherwise, it's an IPA lib bug: just
1332              report the signal to GDB, and pray for the best.  */
1333
1334           lwp->collecting_fast_tracepoint = 0;
1335
1336           if (r != 0
1337               && (status.adjusted_insn_addr <= lwp->stop_pc
1338                   && lwp->stop_pc < status.adjusted_insn_addr_end))
1339             {
1340               siginfo_t info;
1341               struct regcache *regcache;
1342
1343               /* The si_addr on a few signals references the address
1344                  of the faulting instruction.  Adjust that as
1345                  well.  */
1346               if ((WSTOPSIG (*wstat) == SIGILL
1347                    || WSTOPSIG (*wstat) == SIGFPE
1348                    || WSTOPSIG (*wstat) == SIGBUS
1349                    || WSTOPSIG (*wstat) == SIGSEGV)
1350                   && ptrace (PTRACE_GETSIGINFO, lwpid_of (lwp), 0, &info) == 0
1351                   /* Final check just to make sure we don't clobber
1352                      the siginfo of non-kernel-sent signals.  */
1353                   && (uintptr_t) info.si_addr == lwp->stop_pc)
1354                 {
1355                   info.si_addr = (void *) (uintptr_t) status.tpoint_addr;
1356                   ptrace (PTRACE_SETSIGINFO, lwpid_of (lwp), 0, &info);
1357                 }
1358
1359               regcache = get_thread_regcache (get_lwp_thread (lwp), 1);
1360               (*the_low_target.set_pc) (regcache, status.tpoint_addr);
1361               lwp->stop_pc = status.tpoint_addr;
1362
1363               /* Cancel any fast tracepoint lock this thread was
1364                  holding.  */
1365               force_unlock_trace_buffer ();
1366             }
1367
1368           if (lwp->exit_jump_pad_bkpt != NULL)
1369             {
1370               if (debug_threads)
1371                 fprintf (stderr,
1372                          "Cancelling fast exit-jump-pad: removing bkpt. "
1373                          "stopping all threads momentarily.\n");
1374
1375               stop_all_lwps (1, lwp);
1376               cancel_breakpoints ();
1377
1378               delete_breakpoint (lwp->exit_jump_pad_bkpt);
1379               lwp->exit_jump_pad_bkpt = NULL;
1380
1381               unstop_all_lwps (1, lwp);
1382
1383               gdb_assert (lwp->suspended >= 0);
1384             }
1385         }
1386     }
1387
1388   if (debug_threads)
1389     fprintf (stderr, "\
1390 Checking whether LWP %ld needs to move out of the jump pad...no\n",
1391              lwpid_of (lwp));
1392
1393   current_inferior = saved_inferior;
1394   return 0;
1395 }
1396
1397 /* Enqueue one signal in the "signals to report later when out of the
1398    jump pad" list.  */
1399
1400 static void
1401 enqueue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
1402 {
1403   struct pending_signals *p_sig;
1404
1405   if (debug_threads)
1406     fprintf (stderr, "\
1407 Deferring signal %d for LWP %ld.\n", WSTOPSIG (*wstat), lwpid_of (lwp));
1408
1409   if (debug_threads)
1410     {
1411       struct pending_signals *sig;
1412
1413       for (sig = lwp->pending_signals_to_report;
1414            sig != NULL;
1415            sig = sig->prev)
1416         fprintf (stderr,
1417                  "   Already queued %d\n",
1418                  sig->signal);
1419
1420       fprintf (stderr, "   (no more currently queued signals)\n");
1421     }
1422
1423   /* Don't enqueue non-RT signals if they are already in the deferred
1424      queue.  (SIGSTOP being the easiest signal to see ending up here
1425      twice)  */
1426   if (WSTOPSIG (*wstat) < __SIGRTMIN)
1427     {
1428       struct pending_signals *sig;
1429
1430       for (sig = lwp->pending_signals_to_report;
1431            sig != NULL;
1432            sig = sig->prev)
1433         {
1434           if (sig->signal == WSTOPSIG (*wstat))
1435             {
1436               if (debug_threads)
1437                 fprintf (stderr,
1438                          "Not requeuing already queued non-RT signal %d"
1439                          " for LWP %ld\n",
1440                          sig->signal,
1441                          lwpid_of (lwp));
1442               return;
1443             }
1444         }
1445     }
1446
1447   p_sig = xmalloc (sizeof (*p_sig));
1448   p_sig->prev = lwp->pending_signals_to_report;
1449   p_sig->signal = WSTOPSIG (*wstat);
1450   memset (&p_sig->info, 0, sizeof (siginfo_t));
1451   ptrace (PTRACE_GETSIGINFO, lwpid_of (lwp), 0, &p_sig->info);
1452
1453   lwp->pending_signals_to_report = p_sig;
1454 }
1455
1456 /* Dequeue one signal from the "signals to report later when out of
1457    the jump pad" list.  */
1458
1459 static int
1460 dequeue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
1461 {
1462   if (lwp->pending_signals_to_report != NULL)
1463     {
1464       struct pending_signals **p_sig;
1465
1466       p_sig = &lwp->pending_signals_to_report;
1467       while ((*p_sig)->prev != NULL)
1468         p_sig = &(*p_sig)->prev;
1469
1470       *wstat = W_STOPCODE ((*p_sig)->signal);
1471       if ((*p_sig)->info.si_signo != 0)
1472         ptrace (PTRACE_SETSIGINFO, lwpid_of (lwp), 0, &(*p_sig)->info);
1473       free (*p_sig);
1474       *p_sig = NULL;
1475
1476       if (debug_threads)
1477         fprintf (stderr, "Reporting deferred signal %d for LWP %ld.\n",
1478                  WSTOPSIG (*wstat), lwpid_of (lwp));
1479
1480       if (debug_threads)
1481         {
1482           struct pending_signals *sig;
1483
1484           for (sig = lwp->pending_signals_to_report;
1485                sig != NULL;
1486                sig = sig->prev)
1487             fprintf (stderr,
1488                      "   Still queued %d\n",
1489                      sig->signal);
1490
1491           fprintf (stderr, "   (no more queued signals)\n");
1492         }
1493
1494       return 1;
1495     }
1496
1497   return 0;
1498 }
1499
1500 /* Arrange for a breakpoint to be hit again later.  We don't keep the
1501    SIGTRAP status and don't forward the SIGTRAP signal to the LWP.  We
1502    will handle the current event, eventually we will resume this LWP,
1503    and this breakpoint will trap again.  */
1504
1505 static int
1506 cancel_breakpoint (struct lwp_info *lwp)
1507 {
1508   struct thread_info *saved_inferior;
1509
1510   /* There's nothing to do if we don't support breakpoints.  */
1511   if (!supports_breakpoints ())
1512     return 0;
1513
1514   /* breakpoint_at reads from current inferior.  */
1515   saved_inferior = current_inferior;
1516   current_inferior = get_lwp_thread (lwp);
1517
1518   if ((*the_low_target.breakpoint_at) (lwp->stop_pc))
1519     {
1520       if (debug_threads)
1521         fprintf (stderr,
1522                  "CB: Push back breakpoint for %s\n",
1523                  target_pid_to_str (ptid_of (lwp)));
1524
1525       /* Back up the PC if necessary.  */
1526       if (the_low_target.decr_pc_after_break)
1527         {
1528           struct regcache *regcache
1529             = get_thread_regcache (current_inferior, 1);
1530           (*the_low_target.set_pc) (regcache, lwp->stop_pc);
1531         }
1532
1533       current_inferior = saved_inferior;
1534       return 1;
1535     }
1536   else
1537     {
1538       if (debug_threads)
1539         fprintf (stderr,
1540                  "CB: No breakpoint found at %s for [%s]\n",
1541                  paddress (lwp->stop_pc),
1542                  target_pid_to_str (ptid_of (lwp)));
1543     }
1544
1545   current_inferior = saved_inferior;
1546   return 0;
1547 }
1548
1549 /* When the event-loop is doing a step-over, this points at the thread
1550    being stepped.  */
1551 ptid_t step_over_bkpt;
1552
1553 /* Wait for an event from child PID.  If PID is -1, wait for any
1554    child.  Store the stop status through the status pointer WSTAT.
1555    OPTIONS is passed to the waitpid call.  Return 0 if no child stop
1556    event was found and OPTIONS contains WNOHANG.  Return the PID of
1557    the stopped child otherwise.  */
1558
1559 static int
1560 linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
1561 {
1562   struct lwp_info *event_child, *requested_child;
1563
1564   event_child = NULL;
1565   requested_child = NULL;
1566
1567   /* Check for a lwp with a pending status.  */
1568
1569   if (ptid_equal (ptid, minus_one_ptid)
1570       || ptid_equal (pid_to_ptid (ptid_get_pid (ptid)), ptid))
1571     {
1572       event_child = (struct lwp_info *)
1573         find_inferior (&all_lwps, status_pending_p_callback, &ptid);
1574       if (debug_threads && event_child)
1575         fprintf (stderr, "Got a pending child %ld\n", lwpid_of (event_child));
1576     }
1577   else
1578     {
1579       requested_child = find_lwp_pid (ptid);
1580
1581       if (!stopping_threads
1582           && requested_child->status_pending_p
1583           && requested_child->collecting_fast_tracepoint)
1584         {
1585           enqueue_one_deferred_signal (requested_child,
1586                                        &requested_child->status_pending);
1587           requested_child->status_pending_p = 0;
1588           requested_child->status_pending = 0;
1589           linux_resume_one_lwp (requested_child, 0, 0, NULL);
1590         }
1591
1592       if (requested_child->suspended
1593           && requested_child->status_pending_p)
1594         fatal ("requesting an event out of a suspended child?");
1595
1596       if (requested_child->status_pending_p)
1597         event_child = requested_child;
1598     }
1599
1600   if (event_child != NULL)
1601     {
1602       if (debug_threads)
1603         fprintf (stderr, "Got an event from pending child %ld (%04x)\n",
1604                  lwpid_of (event_child), event_child->status_pending);
1605       *wstat = event_child->status_pending;
1606       event_child->status_pending_p = 0;
1607       event_child->status_pending = 0;
1608       current_inferior = get_lwp_thread (event_child);
1609       return lwpid_of (event_child);
1610     }
1611
1612   /* We only enter this loop if no process has a pending wait status.  Thus
1613      any action taken in response to a wait status inside this loop is
1614      responding as soon as we detect the status, not after any pending
1615      events.  */
1616   while (1)
1617     {
1618       event_child = linux_wait_for_lwp (ptid, wstat, options);
1619
1620       if ((options & WNOHANG) && event_child == NULL)
1621         {
1622           if (debug_threads)
1623             fprintf (stderr, "WNOHANG set, no event found\n");
1624           return 0;
1625         }
1626
1627       if (event_child == NULL)
1628         error ("event from unknown child");
1629
1630       current_inferior = get_lwp_thread (event_child);
1631
1632       /* Check for thread exit.  */
1633       if (! WIFSTOPPED (*wstat))
1634         {
1635           if (debug_threads)
1636             fprintf (stderr, "LWP %ld exiting\n", lwpid_of (event_child));
1637
1638           /* If the last thread is exiting, just return.  */
1639           if (last_thread_of_process_p (current_inferior))
1640             {
1641               if (debug_threads)
1642                 fprintf (stderr, "LWP %ld is last lwp of process\n",
1643                          lwpid_of (event_child));
1644               return lwpid_of (event_child);
1645             }
1646
1647           if (!non_stop)
1648             {
1649               current_inferior = (struct thread_info *) all_threads.head;
1650               if (debug_threads)
1651                 fprintf (stderr, "Current inferior is now %ld\n",
1652                          lwpid_of (get_thread_lwp (current_inferior)));
1653             }
1654           else
1655             {
1656               current_inferior = NULL;
1657               if (debug_threads)
1658                 fprintf (stderr, "Current inferior is now <NULL>\n");
1659             }
1660
1661           /* If we were waiting for this particular child to do something...
1662              well, it did something.  */
1663           if (requested_child != NULL)
1664             {
1665               int lwpid = lwpid_of (event_child);
1666
1667               /* Cancel the step-over operation --- the thread that
1668                  started it is gone.  */
1669               if (finish_step_over (event_child))
1670                 unstop_all_lwps (1, event_child);
1671               delete_lwp (event_child);
1672               return lwpid;
1673             }
1674
1675           delete_lwp (event_child);
1676
1677           /* Wait for a more interesting event.  */
1678           continue;
1679         }
1680
1681       if (event_child->must_set_ptrace_flags)
1682         {
1683           linux_enable_event_reporting (lwpid_of (event_child));
1684           event_child->must_set_ptrace_flags = 0;
1685         }
1686
1687       if (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) == SIGTRAP
1688           && *wstat >> 16 != 0)
1689         {
1690           handle_extended_wait (event_child, *wstat);
1691           continue;
1692         }
1693
1694       if (WIFSTOPPED (*wstat)
1695           && WSTOPSIG (*wstat) == SIGSTOP
1696           && event_child->stop_expected)
1697         {
1698           int should_stop;
1699
1700           if (debug_threads)
1701             fprintf (stderr, "Expected stop.\n");
1702           event_child->stop_expected = 0;
1703
1704           should_stop = (current_inferior->last_resume_kind == resume_stop
1705                          || stopping_threads);
1706
1707           if (!should_stop)
1708             {
1709               linux_resume_one_lwp (event_child,
1710                                     event_child->stepping, 0, NULL);
1711               continue;
1712             }
1713         }
1714
1715       return lwpid_of (event_child);
1716     }
1717
1718   /* NOTREACHED */
1719   return 0;
1720 }
1721
1722 static int
1723 linux_wait_for_event (ptid_t ptid, int *wstat, int options)
1724 {
1725   ptid_t wait_ptid;
1726
1727   if (ptid_is_pid (ptid))
1728     {
1729       /* A request to wait for a specific tgid.  This is not possible
1730          with waitpid, so instead, we wait for any child, and leave
1731          children we're not interested in right now with a pending
1732          status to report later.  */
1733       wait_ptid = minus_one_ptid;
1734     }
1735   else
1736     wait_ptid = ptid;
1737
1738   while (1)
1739     {
1740       int event_pid;
1741
1742       event_pid = linux_wait_for_event_1 (wait_ptid, wstat, options);
1743
1744       if (event_pid > 0
1745           && ptid_is_pid (ptid) && ptid_get_pid (ptid) != event_pid)
1746         {
1747           struct lwp_info *event_child
1748             = find_lwp_pid (pid_to_ptid (event_pid));
1749
1750           if (! WIFSTOPPED (*wstat))
1751             mark_lwp_dead (event_child, *wstat);
1752           else
1753             {
1754               event_child->status_pending_p = 1;
1755               event_child->status_pending = *wstat;
1756             }
1757         }
1758       else
1759         return event_pid;
1760     }
1761 }
1762
1763
1764 /* Count the LWP's that have had events.  */
1765
1766 static int
1767 count_events_callback (struct inferior_list_entry *entry, void *data)
1768 {
1769   struct lwp_info *lp = (struct lwp_info *) entry;
1770   struct thread_info *thread = get_lwp_thread (lp);
1771   int *count = data;
1772
1773   gdb_assert (count != NULL);
1774
1775   /* Count only resumed LWPs that have a SIGTRAP event pending that
1776      should be reported to GDB.  */
1777   if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
1778       && thread->last_resume_kind != resume_stop
1779       && lp->status_pending_p
1780       && WIFSTOPPED (lp->status_pending)
1781       && WSTOPSIG (lp->status_pending) == SIGTRAP
1782       && !breakpoint_inserted_here (lp->stop_pc))
1783     (*count)++;
1784
1785   return 0;
1786 }
1787
1788 /* Select the LWP (if any) that is currently being single-stepped.  */
1789
1790 static int
1791 select_singlestep_lwp_callback (struct inferior_list_entry *entry, void *data)
1792 {
1793   struct lwp_info *lp = (struct lwp_info *) entry;
1794   struct thread_info *thread = get_lwp_thread (lp);
1795
1796   if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
1797       && thread->last_resume_kind == resume_step
1798       && lp->status_pending_p)
1799     return 1;
1800   else
1801     return 0;
1802 }
1803
1804 /* Select the Nth LWP that has had a SIGTRAP event that should be
1805    reported to GDB.  */
1806
1807 static int
1808 select_event_lwp_callback (struct inferior_list_entry *entry, void *data)
1809 {
1810   struct lwp_info *lp = (struct lwp_info *) entry;
1811   struct thread_info *thread = get_lwp_thread (lp);
1812   int *selector = data;
1813
1814   gdb_assert (selector != NULL);
1815
1816   /* Select only resumed LWPs that have a SIGTRAP event pending. */
1817   if (thread->last_resume_kind != resume_stop
1818       && thread->last_status.kind == TARGET_WAITKIND_IGNORE
1819       && lp->status_pending_p
1820       && WIFSTOPPED (lp->status_pending)
1821       && WSTOPSIG (lp->status_pending) == SIGTRAP
1822       && !breakpoint_inserted_here (lp->stop_pc))
1823     if ((*selector)-- == 0)
1824       return 1;
1825
1826   return 0;
1827 }
1828
1829 static int
1830 cancel_breakpoints_callback (struct inferior_list_entry *entry, void *data)
1831 {
1832   struct lwp_info *lp = (struct lwp_info *) entry;
1833   struct thread_info *thread = get_lwp_thread (lp);
1834   struct lwp_info *event_lp = data;
1835
1836   /* Leave the LWP that has been elected to receive a SIGTRAP alone.  */
1837   if (lp == event_lp)
1838     return 0;
1839
1840   /* If a LWP other than the LWP that we're reporting an event for has
1841      hit a GDB breakpoint (as opposed to some random trap signal),
1842      then just arrange for it to hit it again later.  We don't keep
1843      the SIGTRAP status and don't forward the SIGTRAP signal to the
1844      LWP.  We will handle the current event, eventually we will resume
1845      all LWPs, and this one will get its breakpoint trap again.
1846
1847      If we do not do this, then we run the risk that the user will
1848      delete or disable the breakpoint, but the LWP will have already
1849      tripped on it.  */
1850
1851   if (thread->last_resume_kind != resume_stop
1852       && thread->last_status.kind == TARGET_WAITKIND_IGNORE
1853       && lp->status_pending_p
1854       && WIFSTOPPED (lp->status_pending)
1855       && WSTOPSIG (lp->status_pending) == SIGTRAP
1856       && !lp->stepping
1857       && !lp->stopped_by_watchpoint
1858       && cancel_breakpoint (lp))
1859     /* Throw away the SIGTRAP.  */
1860     lp->status_pending_p = 0;
1861
1862   return 0;
1863 }
1864
1865 static void
1866 linux_cancel_breakpoints (void)
1867 {
1868   find_inferior (&all_lwps, cancel_breakpoints_callback, NULL);
1869 }
1870
1871 /* Select one LWP out of those that have events pending.  */
1872
1873 static void
1874 select_event_lwp (struct lwp_info **orig_lp)
1875 {
1876   int num_events = 0;
1877   int random_selector;
1878   struct lwp_info *event_lp;
1879
1880   /* Give preference to any LWP that is being single-stepped.  */
1881   event_lp
1882     = (struct lwp_info *) find_inferior (&all_lwps,
1883                                          select_singlestep_lwp_callback, NULL);
1884   if (event_lp != NULL)
1885     {
1886       if (debug_threads)
1887         fprintf (stderr,
1888                  "SEL: Select single-step %s\n",
1889                  target_pid_to_str (ptid_of (event_lp)));
1890     }
1891   else
1892     {
1893       /* No single-stepping LWP.  Select one at random, out of those
1894          which have had SIGTRAP events.  */
1895
1896       /* First see how many SIGTRAP events we have.  */
1897       find_inferior (&all_lwps, count_events_callback, &num_events);
1898
1899       /* Now randomly pick a LWP out of those that have had a SIGTRAP.  */
1900       random_selector = (int)
1901         ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
1902
1903       if (debug_threads && num_events > 1)
1904         fprintf (stderr,
1905                  "SEL: Found %d SIGTRAP events, selecting #%d\n",
1906                  num_events, random_selector);
1907
1908       event_lp = (struct lwp_info *) find_inferior (&all_lwps,
1909                                                     select_event_lwp_callback,
1910                                                     &random_selector);
1911     }
1912
1913   if (event_lp != NULL)
1914     {
1915       /* Switch the event LWP.  */
1916       *orig_lp = event_lp;
1917     }
1918 }
1919
1920 /* Decrement the suspend count of an LWP.  */
1921
1922 static int
1923 unsuspend_one_lwp (struct inferior_list_entry *entry, void *except)
1924 {
1925   struct lwp_info *lwp = (struct lwp_info *) entry;
1926
1927   /* Ignore EXCEPT.  */
1928   if (lwp == except)
1929     return 0;
1930
1931   lwp->suspended--;
1932
1933   gdb_assert (lwp->suspended >= 0);
1934   return 0;
1935 }
1936
1937 /* Decrement the suspend count of all LWPs, except EXCEPT, if non
1938    NULL.  */
1939
1940 static void
1941 unsuspend_all_lwps (struct lwp_info *except)
1942 {
1943   find_inferior (&all_lwps, unsuspend_one_lwp, except);
1944 }
1945
1946 static void move_out_of_jump_pad_callback (struct inferior_list_entry *entry);
1947 static int stuck_in_jump_pad_callback (struct inferior_list_entry *entry,
1948                                        void *data);
1949 static int lwp_running (struct inferior_list_entry *entry, void *data);
1950 static ptid_t linux_wait_1 (ptid_t ptid,
1951                             struct target_waitstatus *ourstatus,
1952                             int target_options);
1953
1954 /* Stabilize threads (move out of jump pads).
1955
1956    If a thread is midway collecting a fast tracepoint, we need to
1957    finish the collection and move it out of the jump pad before
1958    reporting the signal.
1959
1960    This avoids recursion while collecting (when a signal arrives
1961    midway, and the signal handler itself collects), which would trash
1962    the trace buffer.  In case the user set a breakpoint in a signal
1963    handler, this avoids the backtrace showing the jump pad, etc..
1964    Most importantly, there are certain things we can't do safely if
1965    threads are stopped in a jump pad (or in its callee's).  For
1966    example:
1967
1968      - starting a new trace run.  A thread still collecting the
1969    previous run, could trash the trace buffer when resumed.  The trace
1970    buffer control structures would have been reset but the thread had
1971    no way to tell.  The thread could even midway memcpy'ing to the
1972    buffer, which would mean that when resumed, it would clobber the
1973    trace buffer that had been set for a new run.
1974
1975      - we can't rewrite/reuse the jump pads for new tracepoints
1976    safely.  Say you do tstart while a thread is stopped midway while
1977    collecting.  When the thread is later resumed, it finishes the
1978    collection, and returns to the jump pad, to execute the original
1979    instruction that was under the tracepoint jump at the time the
1980    older run had been started.  If the jump pad had been rewritten
1981    since for something else in the new run, the thread would now
1982    execute the wrong / random instructions.  */
1983
1984 static void
1985 linux_stabilize_threads (void)
1986 {
1987   struct thread_info *save_inferior;
1988   struct lwp_info *lwp_stuck;
1989
1990   lwp_stuck
1991     = (struct lwp_info *) find_inferior (&all_lwps,
1992                                          stuck_in_jump_pad_callback, NULL);
1993   if (lwp_stuck != NULL)
1994     {
1995       if (debug_threads)
1996         fprintf (stderr, "can't stabilize, LWP %ld is stuck in jump pad\n",
1997                  lwpid_of (lwp_stuck));
1998       return;
1999     }
2000
2001   save_inferior = current_inferior;
2002
2003   stabilizing_threads = 1;
2004
2005   /* Kick 'em all.  */
2006   for_each_inferior (&all_lwps, move_out_of_jump_pad_callback);
2007
2008   /* Loop until all are stopped out of the jump pads.  */
2009   while (find_inferior (&all_lwps, lwp_running, NULL) != NULL)
2010     {
2011       struct target_waitstatus ourstatus;
2012       struct lwp_info *lwp;
2013       int wstat;
2014
2015       /* Note that we go through the full wait even loop.  While
2016          moving threads out of jump pad, we need to be able to step
2017          over internal breakpoints and such.  */
2018       linux_wait_1 (minus_one_ptid, &ourstatus, 0);
2019
2020       if (ourstatus.kind == TARGET_WAITKIND_STOPPED)
2021         {
2022           lwp = get_thread_lwp (current_inferior);
2023
2024           /* Lock it.  */
2025           lwp->suspended++;
2026
2027           if (ourstatus.value.sig != TARGET_SIGNAL_0
2028               || current_inferior->last_resume_kind == resume_stop)
2029             {
2030               wstat = W_STOPCODE (target_signal_to_host (ourstatus.value.sig));
2031               enqueue_one_deferred_signal (lwp, &wstat);
2032             }
2033         }
2034     }
2035
2036   find_inferior (&all_lwps, unsuspend_one_lwp, NULL);
2037
2038   stabilizing_threads = 0;
2039
2040   current_inferior = save_inferior;
2041
2042   if (debug_threads)
2043     {
2044       lwp_stuck
2045         = (struct lwp_info *) find_inferior (&all_lwps,
2046                                          stuck_in_jump_pad_callback, NULL);
2047       if (lwp_stuck != NULL)
2048         fprintf (stderr, "couldn't stabilize, LWP %ld got stuck in jump pad\n",
2049                  lwpid_of (lwp_stuck));
2050     }
2051 }
2052
2053 /* Wait for process, returns status.  */
2054
2055 static ptid_t
2056 linux_wait_1 (ptid_t ptid,
2057               struct target_waitstatus *ourstatus, int target_options)
2058 {
2059   int w;
2060   struct lwp_info *event_child;
2061   int options;
2062   int pid;
2063   int step_over_finished;
2064   int bp_explains_trap;
2065   int maybe_internal_trap;
2066   int report_to_gdb;
2067   int trace_event;
2068
2069   /* Translate generic target options into linux options.  */
2070   options = __WALL;
2071   if (target_options & TARGET_WNOHANG)
2072     options |= WNOHANG;
2073
2074 retry:
2075   bp_explains_trap = 0;
2076   trace_event = 0;
2077   ourstatus->kind = TARGET_WAITKIND_IGNORE;
2078
2079   /* If we were only supposed to resume one thread, only wait for
2080      that thread - if it's still alive.  If it died, however - which
2081      can happen if we're coming from the thread death case below -
2082      then we need to make sure we restart the other threads.  We could
2083      pick a thread at random or restart all; restarting all is less
2084      arbitrary.  */
2085   if (!non_stop
2086       && !ptid_equal (cont_thread, null_ptid)
2087       && !ptid_equal (cont_thread, minus_one_ptid))
2088     {
2089       struct thread_info *thread;
2090
2091       thread = (struct thread_info *) find_inferior_id (&all_threads,
2092                                                         cont_thread);
2093
2094       /* No stepping, no signal - unless one is pending already, of course.  */
2095       if (thread == NULL)
2096         {
2097           struct thread_resume resume_info;
2098           resume_info.thread = minus_one_ptid;
2099           resume_info.kind = resume_continue;
2100           resume_info.sig = 0;
2101           linux_resume (&resume_info, 1);
2102         }
2103       else
2104         ptid = cont_thread;
2105     }
2106
2107   if (ptid_equal (step_over_bkpt, null_ptid))
2108     pid = linux_wait_for_event (ptid, &w, options);
2109   else
2110     {
2111       if (debug_threads)
2112         fprintf (stderr, "step_over_bkpt set [%s], doing a blocking wait\n",
2113                  target_pid_to_str (step_over_bkpt));
2114       pid = linux_wait_for_event (step_over_bkpt, &w, options & ~WNOHANG);
2115     }
2116
2117   if (pid == 0) /* only if TARGET_WNOHANG */
2118     return null_ptid;
2119
2120   event_child = get_thread_lwp (current_inferior);
2121
2122   /* If we are waiting for a particular child, and it exited,
2123      linux_wait_for_event will return its exit status.  Similarly if
2124      the last child exited.  If this is not the last child, however,
2125      do not report it as exited until there is a 'thread exited' response
2126      available in the remote protocol.  Instead, just wait for another event.
2127      This should be safe, because if the thread crashed we will already
2128      have reported the termination signal to GDB; that should stop any
2129      in-progress stepping operations, etc.
2130
2131      Report the exit status of the last thread to exit.  This matches
2132      LinuxThreads' behavior.  */
2133
2134   if (last_thread_of_process_p (current_inferior))
2135     {
2136       if (WIFEXITED (w) || WIFSIGNALED (w))
2137         {
2138           if (WIFEXITED (w))
2139             {
2140               ourstatus->kind = TARGET_WAITKIND_EXITED;
2141               ourstatus->value.integer = WEXITSTATUS (w);
2142
2143               if (debug_threads)
2144                 fprintf (stderr,
2145                          "\nChild exited with retcode = %x \n",
2146                          WEXITSTATUS (w));
2147             }
2148           else
2149             {
2150               ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
2151               ourstatus->value.sig = target_signal_from_host (WTERMSIG (w));
2152
2153               if (debug_threads)
2154                 fprintf (stderr,
2155                          "\nChild terminated with signal = %x \n",
2156                          WTERMSIG (w));
2157
2158             }
2159
2160           return ptid_of (event_child);
2161         }
2162     }
2163   else
2164     {
2165       if (!WIFSTOPPED (w))
2166         goto retry;
2167     }
2168
2169   /* If this event was not handled before, and is not a SIGTRAP, we
2170      report it.  SIGILL and SIGSEGV are also treated as traps in case
2171      a breakpoint is inserted at the current PC.  If this target does
2172      not support internal breakpoints at all, we also report the
2173      SIGTRAP without further processing; it's of no concern to us.  */
2174   maybe_internal_trap
2175     = (supports_breakpoints ()
2176        && (WSTOPSIG (w) == SIGTRAP
2177            || ((WSTOPSIG (w) == SIGILL
2178                 || WSTOPSIG (w) == SIGSEGV)
2179                && (*the_low_target.breakpoint_at) (event_child->stop_pc))));
2180
2181   if (maybe_internal_trap)
2182     {
2183       /* Handle anything that requires bookkeeping before deciding to
2184          report the event or continue waiting.  */
2185
2186       /* First check if we can explain the SIGTRAP with an internal
2187          breakpoint, or if we should possibly report the event to GDB.
2188          Do this before anything that may remove or insert a
2189          breakpoint.  */
2190       bp_explains_trap = breakpoint_inserted_here (event_child->stop_pc);
2191
2192       /* We have a SIGTRAP, possibly a step-over dance has just
2193          finished.  If so, tweak the state machine accordingly,
2194          reinsert breakpoints and delete any reinsert (software
2195          single-step) breakpoints.  */
2196       step_over_finished = finish_step_over (event_child);
2197
2198       /* Now invoke the callbacks of any internal breakpoints there.  */
2199       check_breakpoints (event_child->stop_pc);
2200
2201       /* Handle tracepoint data collecting.  This may overflow the
2202          trace buffer, and cause a tracing stop, removing
2203          breakpoints.  */
2204       trace_event = handle_tracepoints (event_child);
2205
2206       if (bp_explains_trap)
2207         {
2208           /* If we stepped or ran into an internal breakpoint, we've
2209              already handled it.  So next time we resume (from this
2210              PC), we should step over it.  */
2211           if (debug_threads)
2212             fprintf (stderr, "Hit a gdbserver breakpoint.\n");
2213
2214           if (breakpoint_here (event_child->stop_pc))
2215             event_child->need_step_over = 1;
2216         }
2217     }
2218   else
2219     {
2220       /* We have some other signal, possibly a step-over dance was in
2221          progress, and it should be cancelled too.  */
2222       step_over_finished = finish_step_over (event_child);
2223     }
2224
2225   /* We have all the data we need.  Either report the event to GDB, or
2226      resume threads and keep waiting for more.  */
2227
2228   /* If we're collecting a fast tracepoint, finish the collection and
2229      move out of the jump pad before delivering a signal.  See
2230      linux_stabilize_threads.  */
2231
2232   if (WIFSTOPPED (w)
2233       && WSTOPSIG (w) != SIGTRAP
2234       && supports_fast_tracepoints ()
2235       && in_process_agent_loaded ())
2236     {
2237       if (debug_threads)
2238         fprintf (stderr,
2239                  "Got signal %d for LWP %ld.  Check if we need "
2240                  "to defer or adjust it.\n",
2241                  WSTOPSIG (w), lwpid_of (event_child));
2242
2243       /* Allow debugging the jump pad itself.  */
2244       if (current_inferior->last_resume_kind != resume_step
2245           && maybe_move_out_of_jump_pad (event_child, &w))
2246         {
2247           enqueue_one_deferred_signal (event_child, &w);
2248
2249           if (debug_threads)
2250             fprintf (stderr,
2251                      "Signal %d for LWP %ld deferred (in jump pad)\n",
2252                      WSTOPSIG (w), lwpid_of (event_child));
2253
2254           linux_resume_one_lwp (event_child, 0, 0, NULL);
2255           goto retry;
2256         }
2257     }
2258
2259   if (event_child->collecting_fast_tracepoint)
2260     {
2261       if (debug_threads)
2262         fprintf (stderr, "\
2263 LWP %ld was trying to move out of the jump pad (%d).  \
2264 Check if we're already there.\n",
2265                  lwpid_of (event_child),
2266                  event_child->collecting_fast_tracepoint);
2267
2268       trace_event = 1;
2269
2270       event_child->collecting_fast_tracepoint
2271         = linux_fast_tracepoint_collecting (event_child, NULL);
2272
2273       if (event_child->collecting_fast_tracepoint != 1)
2274         {
2275           /* No longer need this breakpoint.  */
2276           if (event_child->exit_jump_pad_bkpt != NULL)
2277             {
2278               if (debug_threads)
2279                 fprintf (stderr,
2280                          "No longer need exit-jump-pad bkpt; removing it."
2281                          "stopping all threads momentarily.\n");
2282
2283               /* Other running threads could hit this breakpoint.
2284                  We don't handle moribund locations like GDB does,
2285                  instead we always pause all threads when removing
2286                  breakpoints, so that any step-over or
2287                  decr_pc_after_break adjustment is always taken
2288                  care of while the breakpoint is still
2289                  inserted.  */
2290               stop_all_lwps (1, event_child);
2291               cancel_breakpoints ();
2292
2293               delete_breakpoint (event_child->exit_jump_pad_bkpt);
2294               event_child->exit_jump_pad_bkpt = NULL;
2295
2296               unstop_all_lwps (1, event_child);
2297
2298               gdb_assert (event_child->suspended >= 0);
2299             }
2300         }
2301
2302       if (event_child->collecting_fast_tracepoint == 0)
2303         {
2304           if (debug_threads)
2305             fprintf (stderr,
2306                      "fast tracepoint finished "
2307                      "collecting successfully.\n");
2308
2309           /* We may have a deferred signal to report.  */
2310           if (dequeue_one_deferred_signal (event_child, &w))
2311             {
2312               if (debug_threads)
2313                 fprintf (stderr, "dequeued one signal.\n");
2314             }
2315           else
2316             {
2317               if (debug_threads)
2318                 fprintf (stderr, "no deferred signals.\n");
2319
2320               if (stabilizing_threads)
2321                 {
2322                   ourstatus->kind = TARGET_WAITKIND_STOPPED;
2323                   ourstatus->value.sig = TARGET_SIGNAL_0;
2324                   return ptid_of (event_child);
2325                 }
2326             }
2327         }
2328     }
2329
2330   /* Check whether GDB would be interested in this event.  */
2331
2332   /* If GDB is not interested in this signal, don't stop other
2333      threads, and don't report it to GDB.  Just resume the inferior
2334      right away.  We do this for threading-related signals as well as
2335      any that GDB specifically requested we ignore.  But never ignore
2336      SIGSTOP if we sent it ourselves, and do not ignore signals when
2337      stepping - they may require special handling to skip the signal
2338      handler.  */
2339   /* FIXME drow/2002-06-09: Get signal numbers from the inferior's
2340      thread library?  */
2341   if (WIFSTOPPED (w)
2342       && current_inferior->last_resume_kind != resume_step
2343       && (
2344 #if defined (USE_THREAD_DB) && !defined (__ANDROID__)
2345           (current_process ()->private->thread_db != NULL
2346            && (WSTOPSIG (w) == __SIGRTMIN
2347                || WSTOPSIG (w) == __SIGRTMIN + 1))
2348           ||
2349 #endif
2350           (pass_signals[target_signal_from_host (WSTOPSIG (w))]
2351            && !(WSTOPSIG (w) == SIGSTOP
2352                 && current_inferior->last_resume_kind == resume_stop))))
2353     {
2354       siginfo_t info, *info_p;
2355
2356       if (debug_threads)
2357         fprintf (stderr, "Ignored signal %d for LWP %ld.\n",
2358                  WSTOPSIG (w), lwpid_of (event_child));
2359
2360       if (ptrace (PTRACE_GETSIGINFO, lwpid_of (event_child), 0, &info) == 0)
2361         info_p = &info;
2362       else
2363         info_p = NULL;
2364       linux_resume_one_lwp (event_child, event_child->stepping,
2365                             WSTOPSIG (w), info_p);
2366       goto retry;
2367     }
2368
2369   /* If GDB wanted this thread to single step, we always want to
2370      report the SIGTRAP, and let GDB handle it.  Watchpoints should
2371      always be reported.  So should signals we can't explain.  A
2372      SIGTRAP we can't explain could be a GDB breakpoint --- we may or
2373      not support Z0 breakpoints.  If we do, we're be able to handle
2374      GDB breakpoints on top of internal breakpoints, by handling the
2375      internal breakpoint and still reporting the event to GDB.  If we
2376      don't, we're out of luck, GDB won't see the breakpoint hit.  */
2377   report_to_gdb = (!maybe_internal_trap
2378                    || current_inferior->last_resume_kind == resume_step
2379                    || event_child->stopped_by_watchpoint
2380                    || (!step_over_finished
2381                        && !bp_explains_trap && !trace_event)
2382                    || gdb_breakpoint_here (event_child->stop_pc));
2383
2384   /* We found no reason GDB would want us to stop.  We either hit one
2385      of our own breakpoints, or finished an internal step GDB
2386      shouldn't know about.  */
2387   if (!report_to_gdb)
2388     {
2389       if (debug_threads)
2390         {
2391           if (bp_explains_trap)
2392             fprintf (stderr, "Hit a gdbserver breakpoint.\n");
2393           if (step_over_finished)
2394             fprintf (stderr, "Step-over finished.\n");
2395           if (trace_event)
2396             fprintf (stderr, "Tracepoint event.\n");
2397         }
2398
2399       /* We're not reporting this breakpoint to GDB, so apply the
2400          decr_pc_after_break adjustment to the inferior's regcache
2401          ourselves.  */
2402
2403       if (the_low_target.set_pc != NULL)
2404         {
2405           struct regcache *regcache
2406             = get_thread_regcache (get_lwp_thread (event_child), 1);
2407           (*the_low_target.set_pc) (regcache, event_child->stop_pc);
2408         }
2409
2410       /* We may have finished stepping over a breakpoint.  If so,
2411          we've stopped and suspended all LWPs momentarily except the
2412          stepping one.  This is where we resume them all again.  We're
2413          going to keep waiting, so use proceed, which handles stepping
2414          over the next breakpoint.  */
2415       if (debug_threads)
2416         fprintf (stderr, "proceeding all threads.\n");
2417
2418       if (step_over_finished)
2419         unsuspend_all_lwps (event_child);
2420
2421       proceed_all_lwps ();
2422       goto retry;
2423     }
2424
2425   if (debug_threads)
2426     {
2427       if (current_inferior->last_resume_kind == resume_step)
2428         fprintf (stderr, "GDB wanted to single-step, reporting event.\n");
2429       if (event_child->stopped_by_watchpoint)
2430         fprintf (stderr, "Stopped by watchpoint.\n");
2431       if (gdb_breakpoint_here (event_child->stop_pc))
2432         fprintf (stderr, "Stopped by GDB breakpoint.\n");
2433       if (debug_threads)
2434         fprintf (stderr, "Hit a non-gdbserver trap event.\n");
2435     }
2436
2437   /* Alright, we're going to report a stop.  */
2438
2439   if (!non_stop && !stabilizing_threads)
2440     {
2441       /* In all-stop, stop all threads.  */
2442       stop_all_lwps (0, NULL);
2443
2444       /* If we're not waiting for a specific LWP, choose an event LWP
2445          from among those that have had events.  Giving equal priority
2446          to all LWPs that have had events helps prevent
2447          starvation.  */
2448       if (ptid_equal (ptid, minus_one_ptid))
2449         {
2450           event_child->status_pending_p = 1;
2451           event_child->status_pending = w;
2452
2453           select_event_lwp (&event_child);
2454
2455           event_child->status_pending_p = 0;
2456           w = event_child->status_pending;
2457         }
2458
2459       /* Now that we've selected our final event LWP, cancel any
2460          breakpoints in other LWPs that have hit a GDB breakpoint.
2461          See the comment in cancel_breakpoints_callback to find out
2462          why.  */
2463       find_inferior (&all_lwps, cancel_breakpoints_callback, event_child);
2464
2465       /* Stabilize threads (move out of jump pads).  */
2466       stabilize_threads ();
2467     }
2468   else
2469     {
2470       /* If we just finished a step-over, then all threads had been
2471          momentarily paused.  In all-stop, that's fine, we want
2472          threads stopped by now anyway.  In non-stop, we need to
2473          re-resume threads that GDB wanted to be running.  */
2474       if (step_over_finished)
2475         unstop_all_lwps (1, event_child);
2476     }
2477
2478   ourstatus->kind = TARGET_WAITKIND_STOPPED;
2479
2480   if (current_inferior->last_resume_kind == resume_stop
2481       && WSTOPSIG (w) == SIGSTOP)
2482     {
2483       /* A thread that has been requested to stop by GDB with vCont;t,
2484          and it stopped cleanly, so report as SIG0.  The use of
2485          SIGSTOP is an implementation detail.  */
2486       ourstatus->value.sig = TARGET_SIGNAL_0;
2487     }
2488   else if (current_inferior->last_resume_kind == resume_stop
2489            && WSTOPSIG (w) != SIGSTOP)
2490     {
2491       /* A thread that has been requested to stop by GDB with vCont;t,
2492          but, it stopped for other reasons.  */
2493       ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
2494     }
2495   else
2496     {
2497       ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
2498     }
2499
2500   gdb_assert (ptid_equal (step_over_bkpt, null_ptid));
2501
2502   if (debug_threads)
2503     fprintf (stderr, "linux_wait ret = %s, %d, %d\n",
2504              target_pid_to_str (ptid_of (event_child)),
2505              ourstatus->kind,
2506              ourstatus->value.sig);
2507
2508   return ptid_of (event_child);
2509 }
2510
2511 /* Get rid of any pending event in the pipe.  */
2512 static void
2513 async_file_flush (void)
2514 {
2515   int ret;
2516   char buf;
2517
2518   do
2519     ret = read (linux_event_pipe[0], &buf, 1);
2520   while (ret >= 0 || (ret == -1 && errno == EINTR));
2521 }
2522
2523 /* Put something in the pipe, so the event loop wakes up.  */
2524 static void
2525 async_file_mark (void)
2526 {
2527   int ret;
2528
2529   async_file_flush ();
2530
2531   do
2532     ret = write (linux_event_pipe[1], "+", 1);
2533   while (ret == 0 || (ret == -1 && errno == EINTR));
2534
2535   /* Ignore EAGAIN.  If the pipe is full, the event loop will already
2536      be awakened anyway.  */
2537 }
2538
2539 static ptid_t
2540 linux_wait (ptid_t ptid,
2541             struct target_waitstatus *ourstatus, int target_options)
2542 {
2543   ptid_t event_ptid;
2544
2545   if (debug_threads)
2546     fprintf (stderr, "linux_wait: [%s]\n", target_pid_to_str (ptid));
2547
2548   /* Flush the async file first.  */
2549   if (target_is_async_p ())
2550     async_file_flush ();
2551
2552   event_ptid = linux_wait_1 (ptid, ourstatus, target_options);
2553
2554   /* If at least one stop was reported, there may be more.  A single
2555      SIGCHLD can signal more than one child stop.  */
2556   if (target_is_async_p ()
2557       && (target_options & TARGET_WNOHANG) != 0
2558       && !ptid_equal (event_ptid, null_ptid))
2559     async_file_mark ();
2560
2561   return event_ptid;
2562 }
2563
2564 /* Send a signal to an LWP.  */
2565
2566 static int
2567 kill_lwp (unsigned long lwpid, int signo)
2568 {
2569   /* Use tkill, if possible, in case we are using nptl threads.  If tkill
2570      fails, then we are not using nptl threads and we should be using kill.  */
2571
2572 #ifdef __NR_tkill
2573   {
2574     static int tkill_failed;
2575
2576     if (!tkill_failed)
2577       {
2578         int ret;
2579
2580         errno = 0;
2581         ret = syscall (__NR_tkill, lwpid, signo);
2582         if (errno != ENOSYS)
2583           return ret;
2584         tkill_failed = 1;
2585       }
2586   }
2587 #endif
2588
2589   return kill (lwpid, signo);
2590 }
2591
2592 void
2593 linux_stop_lwp (struct lwp_info *lwp)
2594 {
2595   send_sigstop (lwp);
2596 }
2597
2598 static void
2599 send_sigstop (struct lwp_info *lwp)
2600 {
2601   int pid;
2602
2603   pid = lwpid_of (lwp);
2604
2605   /* If we already have a pending stop signal for this process, don't
2606      send another.  */
2607   if (lwp->stop_expected)
2608     {
2609       if (debug_threads)
2610         fprintf (stderr, "Have pending sigstop for lwp %d\n", pid);
2611
2612       return;
2613     }
2614
2615   if (debug_threads)
2616     fprintf (stderr, "Sending sigstop to lwp %d\n", pid);
2617
2618   lwp->stop_expected = 1;
2619   kill_lwp (pid, SIGSTOP);
2620 }
2621
2622 static int
2623 send_sigstop_callback (struct inferior_list_entry *entry, void *except)
2624 {
2625   struct lwp_info *lwp = (struct lwp_info *) entry;
2626
2627   /* Ignore EXCEPT.  */
2628   if (lwp == except)
2629     return 0;
2630
2631   if (lwp->stopped)
2632     return 0;
2633
2634   send_sigstop (lwp);
2635   return 0;
2636 }
2637
2638 /* Increment the suspend count of an LWP, and stop it, if not stopped
2639    yet.  */
2640 static int
2641 suspend_and_send_sigstop_callback (struct inferior_list_entry *entry,
2642                                    void *except)
2643 {
2644   struct lwp_info *lwp = (struct lwp_info *) entry;
2645
2646   /* Ignore EXCEPT.  */
2647   if (lwp == except)
2648     return 0;
2649
2650   lwp->suspended++;
2651
2652   return send_sigstop_callback (entry, except);
2653 }
2654
2655 static void
2656 mark_lwp_dead (struct lwp_info *lwp, int wstat)
2657 {
2658   /* It's dead, really.  */
2659   lwp->dead = 1;
2660
2661   /* Store the exit status for later.  */
2662   lwp->status_pending_p = 1;
2663   lwp->status_pending = wstat;
2664
2665   /* Prevent trying to stop it.  */
2666   lwp->stopped = 1;
2667
2668   /* No further stops are expected from a dead lwp.  */
2669   lwp->stop_expected = 0;
2670 }
2671
2672 static void
2673 wait_for_sigstop (struct inferior_list_entry *entry)
2674 {
2675   struct lwp_info *lwp = (struct lwp_info *) entry;
2676   struct thread_info *saved_inferior;
2677   int wstat;
2678   ptid_t saved_tid;
2679   ptid_t ptid;
2680   int pid;
2681
2682   if (lwp->stopped)
2683     {
2684       if (debug_threads)
2685         fprintf (stderr, "wait_for_sigstop: LWP %ld already stopped\n",
2686                  lwpid_of (lwp));
2687       return;
2688     }
2689
2690   saved_inferior = current_inferior;
2691   if (saved_inferior != NULL)
2692     saved_tid = ((struct inferior_list_entry *) saved_inferior)->id;
2693   else
2694     saved_tid = null_ptid; /* avoid bogus unused warning */
2695
2696   ptid = lwp->head.id;
2697
2698   if (debug_threads)
2699     fprintf (stderr, "wait_for_sigstop: pulling one event\n");
2700
2701   pid = linux_wait_for_event (ptid, &wstat, __WALL);
2702
2703   /* If we stopped with a non-SIGSTOP signal, save it for later
2704      and record the pending SIGSTOP.  If the process exited, just
2705      return.  */
2706   if (WIFSTOPPED (wstat))
2707     {
2708       if (debug_threads)
2709         fprintf (stderr, "LWP %ld stopped with signal %d\n",
2710                  lwpid_of (lwp), WSTOPSIG (wstat));
2711
2712       if (WSTOPSIG (wstat) != SIGSTOP)
2713         {
2714           if (debug_threads)
2715             fprintf (stderr, "LWP %ld stopped with non-sigstop status %06x\n",
2716                      lwpid_of (lwp), wstat);
2717
2718           lwp->status_pending_p = 1;
2719           lwp->status_pending = wstat;
2720         }
2721     }
2722   else
2723     {
2724       if (debug_threads)
2725         fprintf (stderr, "Process %d exited while stopping LWPs\n", pid);
2726
2727       lwp = find_lwp_pid (pid_to_ptid (pid));
2728       if (lwp)
2729         {
2730           /* Leave this status pending for the next time we're able to
2731              report it.  In the mean time, we'll report this lwp as
2732              dead to GDB, so GDB doesn't try to read registers and
2733              memory from it.  This can only happen if this was the
2734              last thread of the process; otherwise, PID is removed
2735              from the thread tables before linux_wait_for_event
2736              returns.  */
2737           mark_lwp_dead (lwp, wstat);
2738         }
2739     }
2740
2741   if (saved_inferior == NULL || linux_thread_alive (saved_tid))
2742     current_inferior = saved_inferior;
2743   else
2744     {
2745       if (debug_threads)
2746         fprintf (stderr, "Previously current thread died.\n");
2747
2748       if (non_stop)
2749         {
2750           /* We can't change the current inferior behind GDB's back,
2751              otherwise, a subsequent command may apply to the wrong
2752              process.  */
2753           current_inferior = NULL;
2754         }
2755       else
2756         {
2757           /* Set a valid thread as current.  */
2758           set_desired_inferior (0);
2759         }
2760     }
2761 }
2762
2763 /* Returns true if LWP ENTRY is stopped in a jump pad, and we can't
2764    move it out, because we need to report the stop event to GDB.  For
2765    example, if the user puts a breakpoint in the jump pad, it's
2766    because she wants to debug it.  */
2767
2768 static int
2769 stuck_in_jump_pad_callback (struct inferior_list_entry *entry, void *data)
2770 {
2771   struct lwp_info *lwp = (struct lwp_info *) entry;
2772   struct thread_info *thread = get_lwp_thread (lwp);
2773
2774   gdb_assert (lwp->suspended == 0);
2775   gdb_assert (lwp->stopped);
2776
2777   /* Allow debugging the jump pad, gdb_collect, etc..  */
2778   return (supports_fast_tracepoints ()
2779           && in_process_agent_loaded ()
2780           && (gdb_breakpoint_here (lwp->stop_pc)
2781               || lwp->stopped_by_watchpoint
2782               || thread->last_resume_kind == resume_step)
2783           && linux_fast_tracepoint_collecting (lwp, NULL));
2784 }
2785
2786 static void
2787 move_out_of_jump_pad_callback (struct inferior_list_entry *entry)
2788 {
2789   struct lwp_info *lwp = (struct lwp_info *) entry;
2790   struct thread_info *thread = get_lwp_thread (lwp);
2791   int *wstat;
2792
2793   gdb_assert (lwp->suspended == 0);
2794   gdb_assert (lwp->stopped);
2795
2796   wstat = lwp->status_pending_p ? &lwp->status_pending : NULL;
2797
2798   /* Allow debugging the jump pad, gdb_collect, etc.  */
2799   if (!gdb_breakpoint_here (lwp->stop_pc)
2800       && !lwp->stopped_by_watchpoint
2801       && thread->last_resume_kind != resume_step
2802       && maybe_move_out_of_jump_pad (lwp, wstat))
2803     {
2804       if (debug_threads)
2805         fprintf (stderr,
2806                  "LWP %ld needs stabilizing (in jump pad)\n",
2807                  lwpid_of (lwp));
2808
2809       if (wstat)
2810         {
2811           lwp->status_pending_p = 0;
2812           enqueue_one_deferred_signal (lwp, wstat);
2813
2814           if (debug_threads)
2815             fprintf (stderr,
2816                      "Signal %d for LWP %ld deferred "
2817                      "(in jump pad)\n",
2818                      WSTOPSIG (*wstat), lwpid_of (lwp));
2819         }
2820
2821       linux_resume_one_lwp (lwp, 0, 0, NULL);
2822     }
2823   else
2824     lwp->suspended++;
2825 }
2826
2827 static int
2828 lwp_running (struct inferior_list_entry *entry, void *data)
2829 {
2830   struct lwp_info *lwp = (struct lwp_info *) entry;
2831
2832   if (lwp->dead)
2833     return 0;
2834   if (lwp->stopped)
2835     return 0;
2836   return 1;
2837 }
2838
2839 /* Stop all lwps that aren't stopped yet, except EXCEPT, if not NULL.
2840    If SUSPEND, then also increase the suspend count of every LWP,
2841    except EXCEPT.  */
2842
2843 static void
2844 stop_all_lwps (int suspend, struct lwp_info *except)
2845 {
2846   stopping_threads = 1;
2847
2848   if (suspend)
2849     find_inferior (&all_lwps, suspend_and_send_sigstop_callback, except);
2850   else
2851     find_inferior (&all_lwps, send_sigstop_callback, except);
2852   for_each_inferior (&all_lwps, wait_for_sigstop);
2853   stopping_threads = 0;
2854 }
2855
2856 /* Resume execution of the inferior process.
2857    If STEP is nonzero, single-step it.
2858    If SIGNAL is nonzero, give it that signal.  */
2859
2860 static void
2861 linux_resume_one_lwp (struct lwp_info *lwp,
2862                       int step, int signal, siginfo_t *info)
2863 {
2864   struct thread_info *saved_inferior;
2865   int fast_tp_collecting;
2866
2867   if (lwp->stopped == 0)
2868     return;
2869
2870   fast_tp_collecting = lwp->collecting_fast_tracepoint;
2871
2872   gdb_assert (!stabilizing_threads || fast_tp_collecting);
2873
2874   /* Cancel actions that rely on GDB not changing the PC (e.g., the
2875      user used the "jump" command, or "set $pc = foo").  */
2876   if (lwp->stop_pc != get_pc (lwp))
2877     {
2878       /* Collecting 'while-stepping' actions doesn't make sense
2879          anymore.  */
2880       release_while_stepping_state_list (get_lwp_thread (lwp));
2881     }
2882
2883   /* If we have pending signals or status, and a new signal, enqueue the
2884      signal.  Also enqueue the signal if we are waiting to reinsert a
2885      breakpoint; it will be picked up again below.  */
2886   if (signal != 0
2887       && (lwp->status_pending_p
2888           || lwp->pending_signals != NULL
2889           || lwp->bp_reinsert != 0
2890           || fast_tp_collecting))
2891     {
2892       struct pending_signals *p_sig;
2893       p_sig = xmalloc (sizeof (*p_sig));
2894       p_sig->prev = lwp->pending_signals;
2895       p_sig->signal = signal;
2896       if (info == NULL)
2897         memset (&p_sig->info, 0, sizeof (siginfo_t));
2898       else
2899         memcpy (&p_sig->info, info, sizeof (siginfo_t));
2900       lwp->pending_signals = p_sig;
2901     }
2902
2903   if (lwp->status_pending_p)
2904     {
2905       if (debug_threads)
2906         fprintf (stderr, "Not resuming lwp %ld (%s, signal %d, stop %s);"
2907                  " has pending status\n",
2908                  lwpid_of (lwp), step ? "step" : "continue", signal,
2909                  lwp->stop_expected ? "expected" : "not expected");
2910       return;
2911     }
2912
2913   saved_inferior = current_inferior;
2914   current_inferior = get_lwp_thread (lwp);
2915
2916   if (debug_threads)
2917     fprintf (stderr, "Resuming lwp %ld (%s, signal %d, stop %s)\n",
2918              lwpid_of (lwp), step ? "step" : "continue", signal,
2919              lwp->stop_expected ? "expected" : "not expected");
2920
2921   /* This bit needs some thinking about.  If we get a signal that
2922      we must report while a single-step reinsert is still pending,
2923      we often end up resuming the thread.  It might be better to
2924      (ew) allow a stack of pending events; then we could be sure that
2925      the reinsert happened right away and not lose any signals.
2926
2927      Making this stack would also shrink the window in which breakpoints are
2928      uninserted (see comment in linux_wait_for_lwp) but not enough for
2929      complete correctness, so it won't solve that problem.  It may be
2930      worthwhile just to solve this one, however.  */
2931   if (lwp->bp_reinsert != 0)
2932     {
2933       if (debug_threads)
2934         fprintf (stderr, "  pending reinsert at 0x%s\n",
2935                  paddress (lwp->bp_reinsert));
2936
2937       if (lwp->bp_reinsert != 0 && can_hardware_single_step ())
2938         {
2939           if (fast_tp_collecting == 0)
2940             {
2941               if (step == 0)
2942                 fprintf (stderr, "BAD - reinserting but not stepping.\n");
2943               if (lwp->suspended)
2944                 fprintf (stderr, "BAD - reinserting and suspended(%d).\n",
2945                          lwp->suspended);
2946             }
2947
2948           step = 1;
2949         }
2950
2951       /* Postpone any pending signal.  It was enqueued above.  */
2952       signal = 0;
2953     }
2954
2955   if (fast_tp_collecting == 1)
2956     {
2957       if (debug_threads)
2958         fprintf (stderr, "\
2959 lwp %ld wants to get out of fast tracepoint jump pad (exit-jump-pad-bkpt)\n",
2960                  lwpid_of (lwp));
2961
2962       /* Postpone any pending signal.  It was enqueued above.  */
2963       signal = 0;
2964     }
2965   else if (fast_tp_collecting == 2)
2966     {
2967       if (debug_threads)
2968         fprintf (stderr, "\
2969 lwp %ld wants to get out of fast tracepoint jump pad single-stepping\n",
2970                  lwpid_of (lwp));
2971
2972       if (can_hardware_single_step ())
2973         step = 1;
2974       else
2975         fatal ("moving out of jump pad single-stepping"
2976                " not implemented on this target");
2977
2978       /* Postpone any pending signal.  It was enqueued above.  */
2979       signal = 0;
2980     }
2981
2982   /* If we have while-stepping actions in this thread set it stepping.
2983      If we have a signal to deliver, it may or may not be set to
2984      SIG_IGN, we don't know.  Assume so, and allow collecting
2985      while-stepping into a signal handler.  A possible smart thing to
2986      do would be to set an internal breakpoint at the signal return
2987      address, continue, and carry on catching this while-stepping
2988      action only when that breakpoint is hit.  A future
2989      enhancement.  */
2990   if (get_lwp_thread (lwp)->while_stepping != NULL
2991       && can_hardware_single_step ())
2992     {
2993       if (debug_threads)
2994         fprintf (stderr,
2995                  "lwp %ld has a while-stepping action -> forcing step.\n",
2996                  lwpid_of (lwp));
2997       step = 1;
2998     }
2999
3000   if (debug_threads && the_low_target.get_pc != NULL)
3001     {
3002       struct regcache *regcache = get_thread_regcache (current_inferior, 1);
3003       CORE_ADDR pc = (*the_low_target.get_pc) (regcache);
3004       fprintf (stderr, "  resuming from pc 0x%lx\n", (long) pc);
3005     }
3006
3007   /* If we have pending signals, consume one unless we are trying to
3008      reinsert a breakpoint or we're trying to finish a fast tracepoint
3009      collect.  */
3010   if (lwp->pending_signals != NULL
3011       && lwp->bp_reinsert == 0
3012       && fast_tp_collecting == 0)
3013     {
3014       struct pending_signals **p_sig;
3015
3016       p_sig = &lwp->pending_signals;
3017       while ((*p_sig)->prev != NULL)
3018         p_sig = &(*p_sig)->prev;
3019
3020       signal = (*p_sig)->signal;
3021       if ((*p_sig)->info.si_signo != 0)
3022         ptrace (PTRACE_SETSIGINFO, lwpid_of (lwp), 0, &(*p_sig)->info);
3023
3024       free (*p_sig);
3025       *p_sig = NULL;
3026     }
3027
3028   if (the_low_target.prepare_to_resume != NULL)
3029     the_low_target.prepare_to_resume (lwp);
3030
3031   regcache_invalidate_one ((struct inferior_list_entry *)
3032                            get_lwp_thread (lwp));
3033   errno = 0;
3034   lwp->stopped = 0;
3035   lwp->stopped_by_watchpoint = 0;
3036   lwp->stepping = step;
3037   ptrace (step ? PTRACE_SINGLESTEP : PTRACE_CONT, lwpid_of (lwp), 0,
3038           /* Coerce to a uintptr_t first to avoid potential gcc warning
3039              of coercing an 8 byte integer to a 4 byte pointer.  */
3040           (PTRACE_ARG4_TYPE) (uintptr_t) signal);
3041
3042   current_inferior = saved_inferior;
3043   if (errno)
3044     {
3045       /* ESRCH from ptrace either means that the thread was already
3046          running (an error) or that it is gone (a race condition).  If
3047          it's gone, we will get a notification the next time we wait,
3048          so we can ignore the error.  We could differentiate these
3049          two, but it's tricky without waiting; the thread still exists
3050          as a zombie, so sending it signal 0 would succeed.  So just
3051          ignore ESRCH.  */
3052       if (errno == ESRCH)
3053         return;
3054
3055       perror_with_name ("ptrace");
3056     }
3057 }
3058
3059 struct thread_resume_array
3060 {
3061   struct thread_resume *resume;
3062   size_t n;
3063 };
3064
3065 /* This function is called once per thread.  We look up the thread
3066    in RESUME_PTR, and mark the thread with a pointer to the appropriate
3067    resume request.
3068
3069    This algorithm is O(threads * resume elements), but resume elements
3070    is small (and will remain small at least until GDB supports thread
3071    suspension).  */
3072 static int
3073 linux_set_resume_request (struct inferior_list_entry *entry, void *arg)
3074 {
3075   struct lwp_info *lwp;
3076   struct thread_info *thread;
3077   int ndx;
3078   struct thread_resume_array *r;
3079
3080   thread = (struct thread_info *) entry;
3081   lwp = get_thread_lwp (thread);
3082   r = arg;
3083
3084   for (ndx = 0; ndx < r->n; ndx++)
3085     {
3086       ptid_t ptid = r->resume[ndx].thread;
3087       if (ptid_equal (ptid, minus_one_ptid)
3088           || ptid_equal (ptid, entry->id)
3089           || (ptid_is_pid (ptid)
3090               && (ptid_get_pid (ptid) == pid_of (lwp)))
3091           || (ptid_get_lwp (ptid) == -1
3092               && (ptid_get_pid (ptid) == pid_of (lwp))))
3093         {
3094           if (r->resume[ndx].kind == resume_stop
3095               && thread->last_resume_kind == resume_stop)
3096             {
3097               if (debug_threads)
3098                 fprintf (stderr, "already %s LWP %ld at GDB's request\n",
3099                          thread->last_status.kind == TARGET_WAITKIND_STOPPED
3100                          ? "stopped"
3101                          : "stopping",
3102                          lwpid_of (lwp));
3103
3104               continue;
3105             }
3106
3107           lwp->resume = &r->resume[ndx];
3108           thread->last_resume_kind = lwp->resume->kind;
3109
3110           /* If we had a deferred signal to report, dequeue one now.
3111              This can happen if LWP gets more than one signal while
3112              trying to get out of a jump pad.  */
3113           if (lwp->stopped
3114               && !lwp->status_pending_p
3115               && dequeue_one_deferred_signal (lwp, &lwp->status_pending))
3116             {
3117               lwp->status_pending_p = 1;
3118
3119               if (debug_threads)
3120                 fprintf (stderr,
3121                          "Dequeueing deferred signal %d for LWP %ld, "
3122                          "leaving status pending.\n",
3123                          WSTOPSIG (lwp->status_pending), lwpid_of (lwp));
3124             }
3125
3126           return 0;
3127         }
3128     }
3129
3130   /* No resume action for this thread.  */
3131   lwp->resume = NULL;
3132
3133   return 0;
3134 }
3135
3136
3137 /* Set *FLAG_P if this lwp has an interesting status pending.  */
3138 static int
3139 resume_status_pending_p (struct inferior_list_entry *entry, void *flag_p)
3140 {
3141   struct lwp_info *lwp = (struct lwp_info *) entry;
3142
3143   /* LWPs which will not be resumed are not interesting, because
3144      we might not wait for them next time through linux_wait.  */
3145   if (lwp->resume == NULL)
3146     return 0;
3147
3148   if (lwp->status_pending_p)
3149     * (int *) flag_p = 1;
3150
3151   return 0;
3152 }
3153
3154 /* Return 1 if this lwp that GDB wants running is stopped at an
3155    internal breakpoint that we need to step over.  It assumes that any
3156    required STOP_PC adjustment has already been propagated to the
3157    inferior's regcache.  */
3158
3159 static int
3160 need_step_over_p (struct inferior_list_entry *entry, void *dummy)
3161 {
3162   struct lwp_info *lwp = (struct lwp_info *) entry;
3163   struct thread_info *thread;
3164   struct thread_info *saved_inferior;
3165   CORE_ADDR pc;
3166
3167   /* LWPs which will not be resumed are not interesting, because we
3168      might not wait for them next time through linux_wait.  */
3169
3170   if (!lwp->stopped)
3171     {
3172       if (debug_threads)
3173         fprintf (stderr,
3174                  "Need step over [LWP %ld]? Ignoring, not stopped\n",
3175                  lwpid_of (lwp));
3176       return 0;
3177     }
3178
3179   thread = get_lwp_thread (lwp);
3180
3181   if (thread->last_resume_kind == resume_stop)
3182     {
3183       if (debug_threads)
3184         fprintf (stderr,
3185                  "Need step over [LWP %ld]? Ignoring, should remain stopped\n",
3186                  lwpid_of (lwp));
3187       return 0;
3188     }
3189
3190   gdb_assert (lwp->suspended >= 0);
3191
3192   if (lwp->suspended)
3193     {
3194       if (debug_threads)
3195         fprintf (stderr,
3196                  "Need step over [LWP %ld]? Ignoring, suspended\n",
3197                  lwpid_of (lwp));
3198       return 0;
3199     }
3200
3201   if (!lwp->need_step_over)
3202     {
3203       if (debug_threads)
3204         fprintf (stderr,
3205                  "Need step over [LWP %ld]? No\n", lwpid_of (lwp));
3206     }
3207
3208   if (lwp->status_pending_p)
3209     {
3210       if (debug_threads)
3211         fprintf (stderr,
3212                  "Need step over [LWP %ld]? Ignoring, has pending status.\n",
3213                  lwpid_of (lwp));
3214       return 0;
3215     }
3216
3217   /* Note: PC, not STOP_PC.  Either GDB has adjusted the PC already,
3218      or we have.  */
3219   pc = get_pc (lwp);
3220
3221   /* If the PC has changed since we stopped, then don't do anything,
3222      and let the breakpoint/tracepoint be hit.  This happens if, for
3223      instance, GDB handled the decr_pc_after_break subtraction itself,
3224      GDB is OOL stepping this thread, or the user has issued a "jump"
3225      command, or poked thread's registers herself.  */
3226   if (pc != lwp->stop_pc)
3227     {
3228       if (debug_threads)
3229         fprintf (stderr,
3230                  "Need step over [LWP %ld]? Cancelling, PC was changed.  "
3231                  "Old stop_pc was 0x%s, PC is now 0x%s\n",
3232                  lwpid_of (lwp), paddress (lwp->stop_pc), paddress (pc));
3233
3234       lwp->need_step_over = 0;
3235       return 0;
3236     }
3237
3238   saved_inferior = current_inferior;
3239   current_inferior = thread;
3240
3241   /* We can only step over breakpoints we know about.  */
3242   if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc))
3243     {
3244       /* Don't step over a breakpoint that GDB expects to hit
3245          though.  */
3246       if (gdb_breakpoint_here (pc))
3247         {
3248           if (debug_threads)
3249             fprintf (stderr,
3250                      "Need step over [LWP %ld]? yes, but found"
3251                      " GDB breakpoint at 0x%s; skipping step over\n",
3252                      lwpid_of (lwp), paddress (pc));
3253
3254           current_inferior = saved_inferior;
3255           return 0;
3256         }
3257       else
3258         {
3259           if (debug_threads)
3260             fprintf (stderr,
3261                      "Need step over [LWP %ld]? yes, "
3262                      "found breakpoint at 0x%s\n",
3263                      lwpid_of (lwp), paddress (pc));
3264
3265           /* We've found an lwp that needs stepping over --- return 1 so
3266              that find_inferior stops looking.  */
3267           current_inferior = saved_inferior;
3268
3269           /* If the step over is cancelled, this is set again.  */
3270           lwp->need_step_over = 0;
3271           return 1;
3272         }
3273     }
3274
3275   current_inferior = saved_inferior;
3276
3277   if (debug_threads)
3278     fprintf (stderr,
3279              "Need step over [LWP %ld]? No, no breakpoint found at 0x%s\n",
3280              lwpid_of (lwp), paddress (pc));
3281
3282   return 0;
3283 }
3284
3285 /* Start a step-over operation on LWP.  When LWP stopped at a
3286    breakpoint, to make progress, we need to remove the breakpoint out
3287    of the way.  If we let other threads run while we do that, they may
3288    pass by the breakpoint location and miss hitting it.  To avoid
3289    that, a step-over momentarily stops all threads while LWP is
3290    single-stepped while the breakpoint is temporarily uninserted from
3291    the inferior.  When the single-step finishes, we reinsert the
3292    breakpoint, and let all threads that are supposed to be running,
3293    run again.
3294
3295    On targets that don't support hardware single-step, we don't
3296    currently support full software single-stepping.  Instead, we only
3297    support stepping over the thread event breakpoint, by asking the
3298    low target where to place a reinsert breakpoint.  Since this
3299    routine assumes the breakpoint being stepped over is a thread event
3300    breakpoint, it usually assumes the return address of the current
3301    function is a good enough place to set the reinsert breakpoint.  */
3302
3303 static int
3304 start_step_over (struct lwp_info *lwp)
3305 {
3306   struct thread_info *saved_inferior;
3307   CORE_ADDR pc;
3308   int step;
3309
3310   if (debug_threads)
3311     fprintf (stderr,
3312              "Starting step-over on LWP %ld.  Stopping all threads\n",
3313              lwpid_of (lwp));
3314
3315   stop_all_lwps (1, lwp);
3316   gdb_assert (lwp->suspended == 0);
3317
3318   if (debug_threads)
3319     fprintf (stderr, "Done stopping all threads for step-over.\n");
3320
3321   /* Note, we should always reach here with an already adjusted PC,
3322      either by GDB (if we're resuming due to GDB's request), or by our
3323      caller, if we just finished handling an internal breakpoint GDB
3324      shouldn't care about.  */
3325   pc = get_pc (lwp);
3326
3327   saved_inferior = current_inferior;
3328   current_inferior = get_lwp_thread (lwp);
3329
3330   lwp->bp_reinsert = pc;
3331   uninsert_breakpoints_at (pc);
3332   uninsert_fast_tracepoint_jumps_at (pc);
3333
3334   if (can_hardware_single_step ())
3335     {
3336       step = 1;
3337     }
3338   else
3339     {
3340       CORE_ADDR raddr = (*the_low_target.breakpoint_reinsert_addr) ();
3341       set_reinsert_breakpoint (raddr);
3342       step = 0;
3343     }
3344
3345   current_inferior = saved_inferior;
3346
3347   linux_resume_one_lwp (lwp, step, 0, NULL);
3348
3349   /* Require next event from this LWP.  */
3350   step_over_bkpt = lwp->head.id;
3351   return 1;
3352 }
3353
3354 /* Finish a step-over.  Reinsert the breakpoint we had uninserted in
3355    start_step_over, if still there, and delete any reinsert
3356    breakpoints we've set, on non hardware single-step targets.  */
3357
3358 static int
3359 finish_step_over (struct lwp_info *lwp)
3360 {
3361   if (lwp->bp_reinsert != 0)
3362     {
3363       if (debug_threads)
3364         fprintf (stderr, "Finished step over.\n");
3365
3366       /* Reinsert any breakpoint at LWP->BP_REINSERT.  Note that there
3367          may be no breakpoint to reinsert there by now.  */
3368       reinsert_breakpoints_at (lwp->bp_reinsert);
3369       reinsert_fast_tracepoint_jumps_at (lwp->bp_reinsert);
3370
3371       lwp->bp_reinsert = 0;
3372
3373       /* Delete any software-single-step reinsert breakpoints.  No
3374          longer needed.  We don't have to worry about other threads
3375          hitting this trap, and later not being able to explain it,
3376          because we were stepping over a breakpoint, and we hold all
3377          threads but LWP stopped while doing that.  */
3378       if (!can_hardware_single_step ())
3379         delete_reinsert_breakpoints ();
3380
3381       step_over_bkpt = null_ptid;
3382       return 1;
3383     }
3384   else
3385     return 0;
3386 }
3387
3388 /* This function is called once per thread.  We check the thread's resume
3389    request, which will tell us whether to resume, step, or leave the thread
3390    stopped; and what signal, if any, it should be sent.
3391
3392    For threads which we aren't explicitly told otherwise, we preserve
3393    the stepping flag; this is used for stepping over gdbserver-placed
3394    breakpoints.
3395
3396    If pending_flags was set in any thread, we queue any needed
3397    signals, since we won't actually resume.  We already have a pending
3398    event to report, so we don't need to preserve any step requests;
3399    they should be re-issued if necessary.  */
3400
3401 static int
3402 linux_resume_one_thread (struct inferior_list_entry *entry, void *arg)
3403 {
3404   struct lwp_info *lwp;
3405   struct thread_info *thread;
3406   int step;
3407   int leave_all_stopped = * (int *) arg;
3408   int leave_pending;
3409
3410   thread = (struct thread_info *) entry;
3411   lwp = get_thread_lwp (thread);
3412
3413   if (lwp->resume == NULL)
3414     return 0;
3415
3416   if (lwp->resume->kind == resume_stop)
3417     {
3418       if (debug_threads)
3419         fprintf (stderr, "resume_stop request for LWP %ld\n", lwpid_of (lwp));
3420
3421       if (!lwp->stopped)
3422         {
3423           if (debug_threads)
3424             fprintf (stderr, "stopping LWP %ld\n", lwpid_of (lwp));
3425
3426           /* Stop the thread, and wait for the event asynchronously,
3427              through the event loop.  */
3428           send_sigstop (lwp);
3429         }
3430       else
3431         {
3432           if (debug_threads)
3433             fprintf (stderr, "already stopped LWP %ld\n",
3434                      lwpid_of (lwp));
3435
3436           /* The LWP may have been stopped in an internal event that
3437              was not meant to be notified back to GDB (e.g., gdbserver
3438              breakpoint), so we should be reporting a stop event in
3439              this case too.  */
3440
3441           /* If the thread already has a pending SIGSTOP, this is a
3442              no-op.  Otherwise, something later will presumably resume
3443              the thread and this will cause it to cancel any pending
3444              operation, due to last_resume_kind == resume_stop.  If
3445              the thread already has a pending status to report, we
3446              will still report it the next time we wait - see
3447              status_pending_p_callback.  */
3448
3449           /* If we already have a pending signal to report, then
3450              there's no need to queue a SIGSTOP, as this means we're
3451              midway through moving the LWP out of the jumppad, and we
3452              will report the pending signal as soon as that is
3453              finished.  */
3454           if (lwp->pending_signals_to_report == NULL)
3455             send_sigstop (lwp);
3456         }
3457
3458       /* For stop requests, we're done.  */
3459       lwp->resume = NULL;
3460       thread->last_status.kind = TARGET_WAITKIND_IGNORE;
3461       return 0;
3462     }
3463
3464   /* If this thread which is about to be resumed has a pending status,
3465      then don't resume any threads - we can just report the pending
3466      status.  Make sure to queue any signals that would otherwise be
3467      sent.  In all-stop mode, we do this decision based on if *any*
3468      thread has a pending status.  If there's a thread that needs the
3469      step-over-breakpoint dance, then don't resume any other thread
3470      but that particular one.  */
3471   leave_pending = (lwp->status_pending_p || leave_all_stopped);
3472
3473   if (!leave_pending)
3474     {
3475       if (debug_threads)
3476         fprintf (stderr, "resuming LWP %ld\n", lwpid_of (lwp));
3477
3478       step = (lwp->resume->kind == resume_step);
3479       linux_resume_one_lwp (lwp, step, lwp->resume->sig, NULL);
3480     }
3481   else
3482     {
3483       if (debug_threads)
3484         fprintf (stderr, "leaving LWP %ld stopped\n", lwpid_of (lwp));
3485
3486       /* If we have a new signal, enqueue the signal.  */
3487       if (lwp->resume->sig != 0)
3488         {
3489           struct pending_signals *p_sig;
3490           p_sig = xmalloc (sizeof (*p_sig));
3491           p_sig->prev = lwp->pending_signals;
3492           p_sig->signal = lwp->resume->sig;
3493           memset (&p_sig->info, 0, sizeof (siginfo_t));
3494
3495           /* If this is the same signal we were previously stopped by,
3496              make sure to queue its siginfo.  We can ignore the return
3497              value of ptrace; if it fails, we'll skip
3498              PTRACE_SETSIGINFO.  */
3499           if (WIFSTOPPED (lwp->last_status)
3500               && WSTOPSIG (lwp->last_status) == lwp->resume->sig)
3501             ptrace (PTRACE_GETSIGINFO, lwpid_of (lwp), 0, &p_sig->info);
3502
3503           lwp->pending_signals = p_sig;
3504         }
3505     }
3506
3507   thread->last_status.kind = TARGET_WAITKIND_IGNORE;
3508   lwp->resume = NULL;
3509   return 0;
3510 }
3511
3512 static void
3513 linux_resume (struct thread_resume *resume_info, size_t n)
3514 {
3515   struct thread_resume_array array = { resume_info, n };
3516   struct lwp_info *need_step_over = NULL;
3517   int any_pending;
3518   int leave_all_stopped;
3519
3520   find_inferior (&all_threads, linux_set_resume_request, &array);
3521
3522   /* If there is a thread which would otherwise be resumed, which has
3523      a pending status, then don't resume any threads - we can just
3524      report the pending status.  Make sure to queue any signals that
3525      would otherwise be sent.  In non-stop mode, we'll apply this
3526      logic to each thread individually.  We consume all pending events
3527      before considering to start a step-over (in all-stop).  */
3528   any_pending = 0;
3529   if (!non_stop)
3530     find_inferior (&all_lwps, resume_status_pending_p, &any_pending);
3531
3532   /* If there is a thread which would otherwise be resumed, which is
3533      stopped at a breakpoint that needs stepping over, then don't
3534      resume any threads - have it step over the breakpoint with all
3535      other threads stopped, then resume all threads again.  Make sure
3536      to queue any signals that would otherwise be delivered or
3537      queued.  */
3538   if (!any_pending && supports_breakpoints ())
3539     need_step_over
3540       = (struct lwp_info *) find_inferior (&all_lwps,
3541                                            need_step_over_p, NULL);
3542
3543   leave_all_stopped = (need_step_over != NULL || any_pending);
3544
3545   if (debug_threads)
3546     {
3547       if (need_step_over != NULL)
3548         fprintf (stderr, "Not resuming all, need step over\n");
3549       else if (any_pending)
3550         fprintf (stderr,
3551                  "Not resuming, all-stop and found "
3552                  "an LWP with pending status\n");
3553       else
3554         fprintf (stderr, "Resuming, no pending status or step over needed\n");
3555     }
3556
3557   /* Even if we're leaving threads stopped, queue all signals we'd
3558      otherwise deliver.  */
3559   find_inferior (&all_threads, linux_resume_one_thread, &leave_all_stopped);
3560
3561   if (need_step_over)
3562     start_step_over (need_step_over);
3563 }
3564
3565 /* This function is called once per thread.  We check the thread's
3566    last resume request, which will tell us whether to resume, step, or
3567    leave the thread stopped.  Any signal the client requested to be
3568    delivered has already been enqueued at this point.
3569
3570    If any thread that GDB wants running is stopped at an internal
3571    breakpoint that needs stepping over, we start a step-over operation
3572    on that particular thread, and leave all others stopped.  */
3573
3574 static int
3575 proceed_one_lwp (struct inferior_list_entry *entry, void *except)
3576 {
3577   struct lwp_info *lwp = (struct lwp_info *) entry;
3578   struct thread_info *thread;
3579   int step;
3580
3581   if (lwp == except)
3582     return 0;
3583
3584   if (debug_threads)
3585     fprintf (stderr,
3586              "proceed_one_lwp: lwp %ld\n", lwpid_of (lwp));
3587
3588   if (!lwp->stopped)
3589     {
3590       if (debug_threads)
3591         fprintf (stderr, "   LWP %ld already running\n", lwpid_of (lwp));
3592       return 0;
3593     }
3594
3595   thread = get_lwp_thread (lwp);
3596
3597   if (thread->last_resume_kind == resume_stop
3598       && thread->last_status.kind != TARGET_WAITKIND_IGNORE)
3599     {
3600       if (debug_threads)
3601         fprintf (stderr, "   client wants LWP to remain %ld stopped\n",
3602                  lwpid_of (lwp));
3603       return 0;
3604     }
3605
3606   if (lwp->status_pending_p)
3607     {
3608       if (debug_threads)
3609         fprintf (stderr, "   LWP %ld has pending status, leaving stopped\n",
3610                  lwpid_of (lwp));
3611       return 0;
3612     }
3613
3614   gdb_assert (lwp->suspended >= 0);
3615
3616   if (lwp->suspended)
3617     {
3618       if (debug_threads)
3619         fprintf (stderr, "   LWP %ld is suspended\n", lwpid_of (lwp));
3620       return 0;
3621     }
3622
3623   if (thread->last_resume_kind == resume_stop
3624       && lwp->pending_signals_to_report == NULL
3625       && lwp->collecting_fast_tracepoint == 0)
3626     {
3627       /* We haven't reported this LWP as stopped yet (otherwise, the
3628          last_status.kind check above would catch it, and we wouldn't
3629          reach here.  This LWP may have been momentarily paused by a
3630          stop_all_lwps call while handling for example, another LWP's
3631          step-over.  In that case, the pending expected SIGSTOP signal
3632          that was queued at vCont;t handling time will have already
3633          been consumed by wait_for_sigstop, and so we need to requeue
3634          another one here.  Note that if the LWP already has a SIGSTOP
3635          pending, this is a no-op.  */
3636
3637       if (debug_threads)
3638         fprintf (stderr,
3639                  "Client wants LWP %ld to stop. "
3640                  "Making sure it has a SIGSTOP pending\n",
3641                  lwpid_of (lwp));
3642
3643       send_sigstop (lwp);
3644     }
3645
3646   step = thread->last_resume_kind == resume_step;
3647   linux_resume_one_lwp (lwp, step, 0, NULL);
3648   return 0;
3649 }
3650
3651 static int
3652 unsuspend_and_proceed_one_lwp (struct inferior_list_entry *entry, void *except)
3653 {
3654   struct lwp_info *lwp = (struct lwp_info *) entry;
3655
3656   if (lwp == except)
3657     return 0;
3658
3659   lwp->suspended--;
3660   gdb_assert (lwp->suspended >= 0);
3661
3662   return proceed_one_lwp (entry, except);
3663 }
3664
3665 /* When we finish a step-over, set threads running again.  If there's
3666    another thread that may need a step-over, now's the time to start
3667    it.  Eventually, we'll move all threads past their breakpoints.  */
3668
3669 static void
3670 proceed_all_lwps (void)
3671 {
3672   struct lwp_info *need_step_over;
3673
3674   /* If there is a thread which would otherwise be resumed, which is
3675      stopped at a breakpoint that needs stepping over, then don't
3676      resume any threads - have it step over the breakpoint with all
3677      other threads stopped, then resume all threads again.  */
3678
3679   if (supports_breakpoints ())
3680     {
3681       need_step_over
3682         = (struct lwp_info *) find_inferior (&all_lwps,
3683                                              need_step_over_p, NULL);
3684
3685       if (need_step_over != NULL)
3686         {
3687           if (debug_threads)
3688             fprintf (stderr, "proceed_all_lwps: found "
3689                      "thread %ld needing a step-over\n",
3690                      lwpid_of (need_step_over));
3691
3692           start_step_over (need_step_over);
3693           return;
3694         }
3695     }
3696
3697   if (debug_threads)
3698     fprintf (stderr, "Proceeding, no step-over needed\n");
3699
3700   find_inferior (&all_lwps, proceed_one_lwp, NULL);
3701 }
3702
3703 /* Stopped LWPs that the client wanted to be running, that don't have
3704    pending statuses, are set to run again, except for EXCEPT, if not
3705    NULL.  This undoes a stop_all_lwps call.  */
3706
3707 static void
3708 unstop_all_lwps (int unsuspend, struct lwp_info *except)
3709 {
3710   if (debug_threads)
3711     {
3712       if (except)
3713         fprintf (stderr,
3714                  "unstopping all lwps, except=(LWP %ld)\n", lwpid_of (except));
3715       else
3716         fprintf (stderr,
3717                  "unstopping all lwps\n");
3718     }
3719
3720   if (unsuspend)
3721     find_inferior (&all_lwps, unsuspend_and_proceed_one_lwp, except);
3722   else
3723     find_inferior (&all_lwps, proceed_one_lwp, except);
3724 }
3725
3726 #ifdef HAVE_LINUX_USRREGS
3727
3728 int
3729 register_addr (int regnum)
3730 {
3731   int addr;
3732
3733   if (regnum < 0 || regnum >= the_low_target.num_regs)
3734     error ("Invalid register number %d.", regnum);
3735
3736   addr = the_low_target.regmap[regnum];
3737
3738   return addr;
3739 }
3740
3741 /* Fetch one register.  */
3742 static void
3743 fetch_register (struct regcache *regcache, int regno)
3744 {
3745   CORE_ADDR regaddr;
3746   int i, size;
3747   char *buf;
3748   int pid;
3749
3750   if (regno >= the_low_target.num_regs)
3751     return;
3752   if ((*the_low_target.cannot_fetch_register) (regno))
3753     return;
3754
3755   regaddr = register_addr (regno);
3756   if (regaddr == -1)
3757     return;
3758
3759   size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
3760           & -sizeof (PTRACE_XFER_TYPE));
3761   buf = alloca (size);
3762
3763   pid = lwpid_of (get_thread_lwp (current_inferior));
3764   for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
3765     {
3766       errno = 0;
3767       *(PTRACE_XFER_TYPE *) (buf + i) =
3768         ptrace (PTRACE_PEEKUSER, pid,
3769                 /* Coerce to a uintptr_t first to avoid potential gcc warning
3770                    of coercing an 8 byte integer to a 4 byte pointer.  */
3771                 (PTRACE_ARG3_TYPE) (uintptr_t) regaddr, 0);
3772       regaddr += sizeof (PTRACE_XFER_TYPE);
3773       if (errno != 0)
3774         error ("reading register %d: %s", regno, strerror (errno));
3775     }
3776
3777   if (the_low_target.supply_ptrace_register)
3778     the_low_target.supply_ptrace_register (regcache, regno, buf);
3779   else
3780     supply_register (regcache, regno, buf);
3781 }
3782
3783 /* Store one register.  */
3784 static void
3785 store_register (struct regcache *regcache, int regno)
3786 {
3787   CORE_ADDR regaddr;
3788   int i, size;
3789   char *buf;
3790   int pid;
3791
3792   if (regno >= the_low_target.num_regs)
3793     return;
3794   if ((*the_low_target.cannot_store_register) (regno))
3795     return;
3796
3797   regaddr = register_addr (regno);
3798   if (regaddr == -1)
3799     return;
3800
3801   size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
3802           & -sizeof (PTRACE_XFER_TYPE));
3803   buf = alloca (size);
3804   memset (buf, 0, size);
3805
3806   if (the_low_target.collect_ptrace_register)
3807     the_low_target.collect_ptrace_register (regcache, regno, buf);
3808   else
3809     collect_register (regcache, regno, buf);
3810
3811   pid = lwpid_of (get_thread_lwp (current_inferior));
3812   for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
3813     {
3814       errno = 0;
3815       ptrace (PTRACE_POKEUSER, pid,
3816             /* Coerce to a uintptr_t first to avoid potential gcc warning
3817                about coercing an 8 byte integer to a 4 byte pointer.  */
3818               (PTRACE_ARG3_TYPE) (uintptr_t) regaddr,
3819               (PTRACE_ARG4_TYPE) *(PTRACE_XFER_TYPE *) (buf + i));
3820       if (errno != 0)
3821         {
3822           /* At this point, ESRCH should mean the process is
3823              already gone, in which case we simply ignore attempts
3824              to change its registers.  See also the related
3825              comment in linux_resume_one_lwp.  */
3826           if (errno == ESRCH)
3827             return;
3828
3829           if ((*the_low_target.cannot_store_register) (regno) == 0)
3830             error ("writing register %d: %s", regno, strerror (errno));
3831         }
3832       regaddr += sizeof (PTRACE_XFER_TYPE);
3833     }
3834 }
3835
3836 /* Fetch all registers, or just one, from the child process.  */
3837 static void
3838 usr_fetch_inferior_registers (struct regcache *regcache, int regno)
3839 {
3840   if (regno == -1)
3841     for (regno = 0; regno < the_low_target.num_regs; regno++)
3842       fetch_register (regcache, regno);
3843   else
3844     fetch_register (regcache, regno);
3845 }
3846
3847 /* Store our register values back into the inferior.
3848    If REGNO is -1, do this for all registers.
3849    Otherwise, REGNO specifies which register (so we can save time).  */
3850 static void
3851 usr_store_inferior_registers (struct regcache *regcache, int regno)
3852 {
3853   if (regno == -1)
3854     for (regno = 0; regno < the_low_target.num_regs; regno++)
3855       store_register (regcache, regno);
3856   else
3857     store_register (regcache, regno);
3858 }
3859 #endif /* HAVE_LINUX_USRREGS */
3860
3861
3862
3863 #ifdef HAVE_LINUX_REGSETS
3864
3865 static int
3866 regsets_fetch_inferior_registers (struct regcache *regcache)
3867 {
3868   struct regset_info *regset;
3869   int saw_general_regs = 0;
3870   int pid;
3871   struct iovec iov;
3872
3873   regset = target_regsets;
3874
3875   pid = lwpid_of (get_thread_lwp (current_inferior));
3876   while (regset->size >= 0)
3877     {
3878       void *buf, *data;
3879       int nt_type, res;
3880
3881       if (regset->size == 0 || disabled_regsets[regset - target_regsets])
3882         {
3883           regset ++;
3884           continue;
3885         }
3886
3887       buf = xmalloc (regset->size);
3888
3889       nt_type = regset->nt_type;
3890       if (nt_type)
3891         {
3892           iov.iov_base = buf;
3893           iov.iov_len = regset->size;
3894           data = (void *) &iov;
3895         }
3896       else
3897         data = buf;
3898
3899 #ifndef __sparc__
3900       res = ptrace (regset->get_request, pid, nt_type, data);
3901 #else
3902       res = ptrace (regset->get_request, pid, data, nt_type);
3903 #endif
3904       if (res < 0)
3905         {
3906           if (errno == EIO)
3907             {
3908               /* If we get EIO on a regset, do not try it again for
3909                  this process.  */
3910               disabled_regsets[regset - target_regsets] = 1;
3911               free (buf);
3912               continue;
3913             }
3914           else
3915             {
3916               char s[256];
3917               sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d",
3918                        pid);
3919               perror (s);
3920             }
3921         }
3922       else if (regset->type == GENERAL_REGS)
3923         saw_general_regs = 1;
3924       regset->store_function (regcache, buf);
3925       regset ++;
3926       free (buf);
3927     }
3928   if (saw_general_regs)
3929     return 0;
3930   else
3931     return 1;
3932 }
3933
3934 static int
3935 regsets_store_inferior_registers (struct regcache *regcache)
3936 {
3937   struct regset_info *regset;
3938   int saw_general_regs = 0;
3939   int pid;
3940   struct iovec iov;
3941
3942   regset = target_regsets;
3943
3944   pid = lwpid_of (get_thread_lwp (current_inferior));
3945   while (regset->size >= 0)
3946     {
3947       void *buf, *data;
3948       int nt_type, res;
3949
3950       if (regset->size == 0 || disabled_regsets[regset - target_regsets])
3951         {
3952           regset ++;
3953           continue;
3954         }
3955
3956       buf = xmalloc (regset->size);
3957
3958       /* First fill the buffer with the current register set contents,
3959          in case there are any items in the kernel's regset that are
3960          not in gdbserver's regcache.  */
3961
3962       nt_type = regset->nt_type;
3963       if (nt_type)
3964         {
3965           iov.iov_base = buf;
3966           iov.iov_len = regset->size;
3967           data = (void *) &iov;
3968         }
3969       else
3970         data = buf;
3971
3972 #ifndef __sparc__
3973       res = ptrace (regset->get_request, pid, nt_type, data);
3974 #else
3975       res = ptrace (regset->get_request, pid, &iov, data);
3976 #endif
3977
3978       if (res == 0)
3979         {
3980           /* Then overlay our cached registers on that.  */
3981           regset->fill_function (regcache, buf);
3982
3983           /* Only now do we write the register set.  */
3984 #ifndef __sparc__
3985           res = ptrace (regset->set_request, pid, nt_type, data);
3986 #else
3987           res = ptrace (regset->set_request, pid, data, nt_type);
3988 #endif
3989         }
3990
3991       if (res < 0)
3992         {
3993           if (errno == EIO)
3994             {
3995               /* If we get EIO on a regset, do not try it again for
3996                  this process.  */
3997               disabled_regsets[regset - target_regsets] = 1;
3998               free (buf);
3999               continue;
4000             }
4001           else if (errno == ESRCH)
4002             {
4003               /* At this point, ESRCH should mean the process is
4004                  already gone, in which case we simply ignore attempts
4005                  to change its registers.  See also the related
4006                  comment in linux_resume_one_lwp.  */
4007               free (buf);
4008               return 0;
4009             }
4010           else
4011             {
4012               perror ("Warning: ptrace(regsets_store_inferior_registers)");
4013             }
4014         }
4015       else if (regset->type == GENERAL_REGS)
4016         saw_general_regs = 1;
4017       regset ++;
4018       free (buf);
4019     }
4020   if (saw_general_regs)
4021     return 0;
4022   else
4023     return 1;
4024   return 0;
4025 }
4026
4027 #endif /* HAVE_LINUX_REGSETS */
4028
4029
4030 void
4031 linux_fetch_registers (struct regcache *regcache, int regno)
4032 {
4033 #ifdef HAVE_LINUX_REGSETS
4034   if (regsets_fetch_inferior_registers (regcache) == 0)
4035     return;
4036 #endif
4037 #ifdef HAVE_LINUX_USRREGS
4038   usr_fetch_inferior_registers (regcache, regno);
4039 #endif
4040 }
4041
4042 void
4043 linux_store_registers (struct regcache *regcache, int regno)
4044 {
4045 #ifdef HAVE_LINUX_REGSETS
4046   if (regsets_store_inferior_registers (regcache) == 0)
4047     return;
4048 #endif
4049 #ifdef HAVE_LINUX_USRREGS
4050   usr_store_inferior_registers (regcache, regno);
4051 #endif
4052 }
4053
4054
4055 /* Copy LEN bytes from inferior's memory starting at MEMADDR
4056    to debugger memory starting at MYADDR.  */
4057
4058 static int
4059 linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
4060 {
4061   register int i;
4062   /* Round starting address down to longword boundary.  */
4063   register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
4064   /* Round ending address up; get number of longwords that makes.  */
4065   register int count
4066     = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
4067       / sizeof (PTRACE_XFER_TYPE);
4068   /* Allocate buffer of that many longwords.  */
4069   register PTRACE_XFER_TYPE *buffer
4070     = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
4071   int fd;
4072   char filename[64];
4073   int pid = lwpid_of (get_thread_lwp (current_inferior));
4074
4075   /* Try using /proc.  Don't bother for one word.  */
4076   if (len >= 3 * sizeof (long))
4077     {
4078       /* We could keep this file open and cache it - possibly one per
4079          thread.  That requires some juggling, but is even faster.  */
4080       sprintf (filename, "/proc/%d/mem", pid);
4081       fd = open (filename, O_RDONLY | O_LARGEFILE);
4082       if (fd == -1)
4083         goto no_proc;
4084
4085       /* If pread64 is available, use it.  It's faster if the kernel
4086          supports it (only one syscall), and it's 64-bit safe even on
4087          32-bit platforms (for instance, SPARC debugging a SPARC64
4088          application).  */
4089 #ifdef HAVE_PREAD64
4090       if (pread64 (fd, myaddr, len, memaddr) != len)
4091 #else
4092       if (lseek (fd, memaddr, SEEK_SET) == -1 || read (fd, myaddr, len) != len)
4093 #endif
4094         {
4095           close (fd);
4096           goto no_proc;
4097         }
4098
4099       close (fd);
4100       return 0;
4101     }
4102
4103  no_proc:
4104   /* Read all the longwords */
4105   for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
4106     {
4107       errno = 0;
4108       /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
4109          about coercing an 8 byte integer to a 4 byte pointer.  */
4110       buffer[i] = ptrace (PTRACE_PEEKTEXT, pid,
4111                           (PTRACE_ARG3_TYPE) (uintptr_t) addr, 0);
4112       if (errno)
4113         return errno;
4114     }
4115
4116   /* Copy appropriate bytes out of the buffer.  */
4117   memcpy (myaddr,
4118           (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
4119           len);
4120
4121   return 0;
4122 }
4123
4124 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
4125    memory at MEMADDR.  On failure (cannot write to the inferior)
4126    returns the value of errno.  */
4127
4128 static int
4129 linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
4130 {
4131   register int i;
4132   /* Round starting address down to longword boundary.  */
4133   register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
4134   /* Round ending address up; get number of longwords that makes.  */
4135   register int count
4136     = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
4137     / sizeof (PTRACE_XFER_TYPE);
4138
4139   /* Allocate buffer of that many longwords.  */
4140   register PTRACE_XFER_TYPE *buffer = (PTRACE_XFER_TYPE *)
4141     alloca (count * sizeof (PTRACE_XFER_TYPE));
4142
4143   int pid = lwpid_of (get_thread_lwp (current_inferior));
4144
4145   if (debug_threads)
4146     {
4147       /* Dump up to four bytes.  */
4148       unsigned int val = * (unsigned int *) myaddr;
4149       if (len == 1)
4150         val = val & 0xff;
4151       else if (len == 2)
4152         val = val & 0xffff;
4153       else if (len == 3)
4154         val = val & 0xffffff;
4155       fprintf (stderr, "Writing %0*x to 0x%08lx\n", 2 * ((len < 4) ? len : 4),
4156                val, (long)memaddr);
4157     }
4158
4159   /* Fill start and end extra bytes of buffer with existing memory data.  */
4160
4161   errno = 0;
4162   /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
4163      about coercing an 8 byte integer to a 4 byte pointer.  */
4164   buffer[0] = ptrace (PTRACE_PEEKTEXT, pid,
4165                       (PTRACE_ARG3_TYPE) (uintptr_t) addr, 0);
4166   if (errno)
4167     return errno;
4168
4169   if (count > 1)
4170     {
4171       errno = 0;
4172       buffer[count - 1]
4173         = ptrace (PTRACE_PEEKTEXT, pid,
4174                   /* Coerce to a uintptr_t first to avoid potential gcc warning
4175                      about coercing an 8 byte integer to a 4 byte pointer.  */
4176                   (PTRACE_ARG3_TYPE) (uintptr_t) (addr + (count - 1)
4177                                                   * sizeof (PTRACE_XFER_TYPE)),
4178                   0);
4179       if (errno)
4180         return errno;
4181     }
4182
4183   /* Copy data to be written over corresponding part of buffer.  */
4184
4185   memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
4186           myaddr, len);
4187
4188   /* Write the entire buffer.  */
4189
4190   for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
4191     {
4192       errno = 0;
4193       ptrace (PTRACE_POKETEXT, pid,
4194               /* Coerce to a uintptr_t first to avoid potential gcc warning
4195                  about coercing an 8 byte integer to a 4 byte pointer.  */
4196               (PTRACE_ARG3_TYPE) (uintptr_t) addr,
4197               (PTRACE_ARG4_TYPE) buffer[i]);
4198       if (errno)
4199         return errno;
4200     }
4201
4202   return 0;
4203 }
4204
4205 /* Non-zero if the kernel supports PTRACE_O_TRACEFORK.  */
4206 static int linux_supports_tracefork_flag;
4207
4208 static void
4209 linux_enable_event_reporting (int pid)
4210 {
4211   if (!linux_supports_tracefork_flag)
4212     return;
4213
4214   ptrace (PTRACE_SETOPTIONS, pid, 0, (PTRACE_ARG4_TYPE) PTRACE_O_TRACECLONE);
4215 }
4216
4217 /* Helper functions for linux_test_for_tracefork, called via clone ().  */
4218
4219 static int
4220 linux_tracefork_grandchild (void *arg)
4221 {
4222   _exit (0);
4223 }
4224
4225 #define STACK_SIZE 4096
4226
4227 static int
4228 linux_tracefork_child (void *arg)
4229 {
4230   ptrace (PTRACE_TRACEME, 0, 0, 0);
4231   kill (getpid (), SIGSTOP);
4232
4233 #if !(defined(__UCLIBC__) && defined(HAS_NOMMU))
4234
4235   if (fork () == 0)
4236     linux_tracefork_grandchild (NULL);
4237
4238 #else /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
4239
4240 #ifdef __ia64__
4241   __clone2 (linux_tracefork_grandchild, arg, STACK_SIZE,
4242             CLONE_VM | SIGCHLD, NULL);
4243 #else
4244   clone (linux_tracefork_grandchild, (char *) arg + STACK_SIZE,
4245          CLONE_VM | SIGCHLD, NULL);
4246 #endif
4247
4248 #endif /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
4249
4250   _exit (0);
4251 }
4252
4253 /* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.  Make
4254    sure that we can enable the option, and that it had the desired
4255    effect.  */
4256
4257 static void
4258 linux_test_for_tracefork (void)
4259 {
4260   int child_pid, ret, status;
4261   long second_pid;
4262 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
4263   char *stack = xmalloc (STACK_SIZE * 4);
4264 #endif /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
4265
4266   linux_supports_tracefork_flag = 0;
4267
4268 #if !(defined(__UCLIBC__) && defined(HAS_NOMMU))
4269
4270   child_pid = fork ();
4271   if (child_pid == 0)
4272     linux_tracefork_child (NULL);
4273
4274 #else /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
4275
4276   /* Use CLONE_VM instead of fork, to support uClinux (no MMU).  */
4277 #ifdef __ia64__
4278   child_pid = __clone2 (linux_tracefork_child, stack, STACK_SIZE,
4279                         CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2);
4280 #else /* !__ia64__ */
4281   child_pid = clone (linux_tracefork_child, stack + STACK_SIZE,
4282                      CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2);
4283 #endif /* !__ia64__ */
4284
4285 #endif /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
4286
4287   if (child_pid == -1)
4288     perror_with_name ("clone");
4289
4290   ret = my_waitpid (child_pid, &status, 0);
4291   if (ret == -1)
4292     perror_with_name ("waitpid");
4293   else if (ret != child_pid)
4294     error ("linux_test_for_tracefork: waitpid: unexpected result %d.", ret);
4295   if (! WIFSTOPPED (status))
4296     error ("linux_test_for_tracefork: waitpid: unexpected status %d.", status);
4297
4298   ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0,
4299                 (PTRACE_ARG4_TYPE) PTRACE_O_TRACEFORK);
4300   if (ret != 0)
4301     {
4302       ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
4303       if (ret != 0)
4304         {
4305           warning ("linux_test_for_tracefork: failed to kill child");
4306           return;
4307         }
4308
4309       ret = my_waitpid (child_pid, &status, 0);
4310       if (ret != child_pid)
4311         warning ("linux_test_for_tracefork: failed to wait for killed child");
4312       else if (!WIFSIGNALED (status))
4313         warning ("linux_test_for_tracefork: unexpected wait status 0x%x from "
4314                  "killed child", status);
4315
4316       return;
4317     }
4318
4319   ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
4320   if (ret != 0)
4321     warning ("linux_test_for_tracefork: failed to resume child");
4322
4323   ret = my_waitpid (child_pid, &status, 0);
4324
4325   if (ret == child_pid && WIFSTOPPED (status)
4326       && status >> 16 == PTRACE_EVENT_FORK)
4327     {
4328       second_pid = 0;
4329       ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
4330       if (ret == 0 && second_pid != 0)
4331         {
4332           int second_status;
4333
4334           linux_supports_tracefork_flag = 1;
4335           my_waitpid (second_pid, &second_status, 0);
4336           ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
4337           if (ret != 0)
4338             warning ("linux_test_for_tracefork: failed to kill second child");
4339           my_waitpid (second_pid, &status, 0);
4340         }
4341     }
4342   else
4343     warning ("linux_test_for_tracefork: unexpected result from waitpid "
4344              "(%d, status 0x%x)", ret, status);
4345
4346   do
4347     {
4348       ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
4349       if (ret != 0)
4350         warning ("linux_test_for_tracefork: failed to kill child");
4351       my_waitpid (child_pid, &status, 0);
4352     }
4353   while (WIFSTOPPED (status));
4354
4355 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
4356   free (stack);
4357 #endif /* defined(__UCLIBC__) && defined(HAS_NOMMU) */
4358 }
4359
4360
4361 static void
4362 linux_look_up_symbols (void)
4363 {
4364 #ifdef USE_THREAD_DB
4365   struct process_info *proc = current_process ();
4366
4367   if (proc->private->thread_db != NULL)
4368     return;
4369
4370   /* If the kernel supports tracing forks then it also supports tracing
4371      clones, and then we don't need to use the magic thread event breakpoint
4372      to learn about threads.  */
4373   thread_db_init (!linux_supports_tracefork_flag);
4374 #endif
4375 }
4376
4377 static void
4378 linux_request_interrupt (void)
4379 {
4380   extern unsigned long signal_pid;
4381
4382   if (!ptid_equal (cont_thread, null_ptid)
4383       && !ptid_equal (cont_thread, minus_one_ptid))
4384     {
4385       struct lwp_info *lwp;
4386       int lwpid;
4387
4388       lwp = get_thread_lwp (current_inferior);
4389       lwpid = lwpid_of (lwp);
4390       kill_lwp (lwpid, SIGINT);
4391     }
4392   else
4393     kill_lwp (signal_pid, SIGINT);
4394 }
4395
4396 /* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
4397    to debugger memory starting at MYADDR.  */
4398
4399 static int
4400 linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
4401 {
4402   char filename[PATH_MAX];
4403   int fd, n;
4404   int pid = lwpid_of (get_thread_lwp (current_inferior));
4405
4406   xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
4407
4408   fd = open (filename, O_RDONLY);
4409   if (fd < 0)
4410     return -1;
4411
4412   if (offset != (CORE_ADDR) 0
4413       && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
4414     n = -1;
4415   else
4416     n = read (fd, myaddr, len);
4417
4418   close (fd);
4419
4420   return n;
4421 }
4422
4423 /* These breakpoint and watchpoint related wrapper functions simply
4424    pass on the function call if the target has registered a
4425    corresponding function.  */
4426
4427 static int
4428 linux_insert_point (char type, CORE_ADDR addr, int len)
4429 {
4430   if (the_low_target.insert_point != NULL)
4431     return the_low_target.insert_point (type, addr, len);
4432   else
4433     /* Unsupported (see target.h).  */
4434     return 1;
4435 }
4436
4437 static int
4438 linux_remove_point (char type, CORE_ADDR addr, int len)
4439 {
4440   if (the_low_target.remove_point != NULL)
4441     return the_low_target.remove_point (type, addr, len);
4442   else
4443     /* Unsupported (see target.h).  */
4444     return 1;
4445 }
4446
4447 static int
4448 linux_stopped_by_watchpoint (void)
4449 {
4450   struct lwp_info *lwp = get_thread_lwp (current_inferior);
4451
4452   return lwp->stopped_by_watchpoint;
4453 }
4454
4455 static CORE_ADDR
4456 linux_stopped_data_address (void)
4457 {
4458   struct lwp_info *lwp = get_thread_lwp (current_inferior);
4459
4460   return lwp->stopped_data_address;
4461 }
4462
4463 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
4464 #if defined(__mcoldfire__)
4465 /* These should really be defined in the kernel's ptrace.h header.  */
4466 #define PT_TEXT_ADDR 49*4
4467 #define PT_DATA_ADDR 50*4
4468 #define PT_TEXT_END_ADDR  51*4
4469 #elif defined(BFIN)
4470 #define PT_TEXT_ADDR 220
4471 #define PT_TEXT_END_ADDR 224
4472 #define PT_DATA_ADDR 228
4473 #elif defined(__TMS320C6X__)
4474 #define PT_TEXT_ADDR     (0x10000*4)
4475 #define PT_DATA_ADDR     (0x10004*4)
4476 #define PT_TEXT_END_ADDR (0x10008*4)
4477 #endif
4478
4479 /* Under uClinux, programs are loaded at non-zero offsets, which we need
4480    to tell gdb about.  */
4481
4482 static int
4483 linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
4484 {
4485 #if defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) && defined(PT_TEXT_END_ADDR)
4486   unsigned long text, text_end, data;
4487   int pid = lwpid_of (get_thread_lwp (current_inferior));
4488
4489   errno = 0;
4490
4491   text = ptrace (PTRACE_PEEKUSER, pid, (long)PT_TEXT_ADDR, 0);
4492   text_end = ptrace (PTRACE_PEEKUSER, pid, (long)PT_TEXT_END_ADDR, 0);
4493   data = ptrace (PTRACE_PEEKUSER, pid, (long)PT_DATA_ADDR, 0);
4494
4495   if (errno == 0)
4496     {
4497       /* Both text and data offsets produced at compile-time (and so
4498          used by gdb) are relative to the beginning of the program,
4499          with the data segment immediately following the text segment.
4500          However, the actual runtime layout in memory may put the data
4501          somewhere else, so when we send gdb a data base-address, we
4502          use the real data base address and subtract the compile-time
4503          data base-address from it (which is just the length of the
4504          text segment).  BSS immediately follows data in both
4505          cases.  */
4506       *text_p = text;
4507       *data_p = data - (text_end - text);
4508
4509       return 1;
4510     }
4511 #endif
4512  return 0;
4513 }
4514 #endif
4515
4516 static int
4517 linux_qxfer_osdata (const char *annex,
4518                     unsigned char *readbuf, unsigned const char *writebuf,
4519                     CORE_ADDR offset, int len)
4520 {
4521   return linux_common_xfer_osdata (annex, readbuf, offset, len);
4522 }
4523
4524 /* Convert a native/host siginfo object, into/from the siginfo in the
4525    layout of the inferiors' architecture.  */
4526
4527 static void
4528 siginfo_fixup (struct siginfo *siginfo, void *inf_siginfo, int direction)
4529 {
4530   int done = 0;
4531
4532   if (the_low_target.siginfo_fixup != NULL)
4533     done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
4534
4535   /* If there was no callback, or the callback didn't do anything,
4536      then just do a straight memcpy.  */
4537   if (!done)
4538     {
4539       if (direction == 1)
4540         memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
4541       else
4542         memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
4543     }
4544 }
4545
4546 static int
4547 linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
4548                     unsigned const char *writebuf, CORE_ADDR offset, int len)
4549 {
4550   int pid;
4551   struct siginfo siginfo;
4552   char inf_siginfo[sizeof (struct siginfo)];
4553
4554   if (current_inferior == NULL)
4555     return -1;
4556
4557   pid = lwpid_of (get_thread_lwp (current_inferior));
4558
4559   if (debug_threads)
4560     fprintf (stderr, "%s siginfo for lwp %d.\n",
4561              readbuf != NULL ? "Reading" : "Writing",
4562              pid);
4563
4564   if (offset >= sizeof (siginfo))
4565     return -1;
4566
4567   if (ptrace (PTRACE_GETSIGINFO, pid, 0, &siginfo) != 0)
4568     return -1;
4569
4570   /* When GDBSERVER is built as a 64-bit application, ptrace writes into
4571      SIGINFO an object with 64-bit layout.  Since debugging a 32-bit
4572      inferior with a 64-bit GDBSERVER should look the same as debugging it
4573      with a 32-bit GDBSERVER, we need to convert it.  */
4574   siginfo_fixup (&siginfo, inf_siginfo, 0);
4575
4576   if (offset + len > sizeof (siginfo))
4577     len = sizeof (siginfo) - offset;
4578
4579   if (readbuf != NULL)
4580     memcpy (readbuf, inf_siginfo + offset, len);
4581   else
4582     {
4583       memcpy (inf_siginfo + offset, writebuf, len);
4584
4585       /* Convert back to ptrace layout before flushing it out.  */
4586       siginfo_fixup (&siginfo, inf_siginfo, 1);
4587
4588       if (ptrace (PTRACE_SETSIGINFO, pid, 0, &siginfo) != 0)
4589         return -1;
4590     }
4591
4592   return len;
4593 }
4594
4595 /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
4596    so we notice when children change state; as the handler for the
4597    sigsuspend in my_waitpid.  */
4598
4599 static void
4600 sigchld_handler (int signo)
4601 {
4602   int old_errno = errno;
4603
4604   if (debug_threads)
4605     {
4606       do
4607         {
4608           /* fprintf is not async-signal-safe, so call write
4609              directly.  */
4610           if (write (2, "sigchld_handler\n",
4611                      sizeof ("sigchld_handler\n") - 1) < 0)
4612             break; /* just ignore */
4613         } while (0);
4614     }
4615
4616   if (target_is_async_p ())
4617     async_file_mark (); /* trigger a linux_wait */
4618
4619   errno = old_errno;
4620 }
4621
4622 static int
4623 linux_supports_non_stop (void)
4624 {
4625   return 1;
4626 }
4627
4628 static int
4629 linux_async (int enable)
4630 {
4631   int previous = (linux_event_pipe[0] != -1);
4632
4633   if (debug_threads)
4634     fprintf (stderr, "linux_async (%d), previous=%d\n",
4635              enable, previous);
4636
4637   if (previous != enable)
4638     {
4639       sigset_t mask;
4640       sigemptyset (&mask);
4641       sigaddset (&mask, SIGCHLD);
4642
4643       sigprocmask (SIG_BLOCK, &mask, NULL);
4644
4645       if (enable)
4646         {
4647           if (pipe (linux_event_pipe) == -1)
4648             fatal ("creating event pipe failed.");
4649
4650           fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
4651           fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
4652
4653           /* Register the event loop handler.  */
4654           add_file_handler (linux_event_pipe[0],
4655                             handle_target_event, NULL);
4656
4657           /* Always trigger a linux_wait.  */
4658           async_file_mark ();
4659         }
4660       else
4661         {
4662           delete_file_handler (linux_event_pipe[0]);
4663
4664           close (linux_event_pipe[0]);
4665           close (linux_event_pipe[1]);
4666           linux_event_pipe[0] = -1;
4667           linux_event_pipe[1] = -1;
4668         }
4669
4670       sigprocmask (SIG_UNBLOCK, &mask, NULL);
4671     }
4672
4673   return previous;
4674 }
4675
4676 static int
4677 linux_start_non_stop (int nonstop)
4678 {
4679   /* Register or unregister from event-loop accordingly.  */
4680   linux_async (nonstop);
4681   return 0;
4682 }
4683
4684 static int
4685 linux_supports_multi_process (void)
4686 {
4687   return 1;
4688 }
4689
4690 static int
4691 linux_supports_disable_randomization (void)
4692 {
4693 #ifdef HAVE_PERSONALITY
4694   return 1;
4695 #else
4696   return 0;
4697 #endif
4698 }
4699
4700 /* Enumerate spufs IDs for process PID.  */
4701 static int
4702 spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
4703 {
4704   int pos = 0;
4705   int written = 0;
4706   char path[128];
4707   DIR *dir;
4708   struct dirent *entry;
4709
4710   sprintf (path, "/proc/%ld/fd", pid);
4711   dir = opendir (path);
4712   if (!dir)
4713     return -1;
4714
4715   rewinddir (dir);
4716   while ((entry = readdir (dir)) != NULL)
4717     {
4718       struct stat st;
4719       struct statfs stfs;
4720       int fd;
4721
4722       fd = atoi (entry->d_name);
4723       if (!fd)
4724         continue;
4725
4726       sprintf (path, "/proc/%ld/fd/%d", pid, fd);
4727       if (stat (path, &st) != 0)
4728         continue;
4729       if (!S_ISDIR (st.st_mode))
4730         continue;
4731
4732       if (statfs (path, &stfs) != 0)
4733         continue;
4734       if (stfs.f_type != SPUFS_MAGIC)
4735         continue;
4736
4737       if (pos >= offset && pos + 4 <= offset + len)
4738         {
4739           *(unsigned int *)(buf + pos - offset) = fd;
4740           written += 4;
4741         }
4742       pos += 4;
4743     }
4744
4745   closedir (dir);
4746   return written;
4747 }
4748
4749 /* Implements the to_xfer_partial interface for the TARGET_OBJECT_SPU
4750    object type, using the /proc file system.  */
4751 static int
4752 linux_qxfer_spu (const char *annex, unsigned char *readbuf,
4753                  unsigned const char *writebuf,
4754                  CORE_ADDR offset, int len)
4755 {
4756   long pid = lwpid_of (get_thread_lwp (current_inferior));
4757   char buf[128];
4758   int fd = 0;
4759   int ret = 0;
4760
4761   if (!writebuf && !readbuf)
4762     return -1;
4763
4764   if (!*annex)
4765     {
4766       if (!readbuf)
4767         return -1;
4768       else
4769         return spu_enumerate_spu_ids (pid, readbuf, offset, len);
4770     }
4771
4772   sprintf (buf, "/proc/%ld/fd/%s", pid, annex);
4773   fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
4774   if (fd <= 0)
4775     return -1;
4776
4777   if (offset != 0
4778       && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
4779     {
4780       close (fd);
4781       return 0;
4782     }
4783
4784   if (writebuf)
4785     ret = write (fd, writebuf, (size_t) len);
4786   else
4787     ret = read (fd, readbuf, (size_t) len);
4788
4789   close (fd);
4790   return ret;
4791 }
4792
4793 #if defined PT_GETDSBT || defined PTRACE_GETFDPIC
4794 struct target_loadseg
4795 {
4796   /* Core address to which the segment is mapped.  */
4797   Elf32_Addr addr;
4798   /* VMA recorded in the program header.  */
4799   Elf32_Addr p_vaddr;
4800   /* Size of this segment in memory.  */
4801   Elf32_Word p_memsz;
4802 };
4803
4804 # if defined PT_GETDSBT
4805 struct target_loadmap
4806 {
4807   /* Protocol version number, must be zero.  */
4808   Elf32_Word version;
4809   /* Pointer to the DSBT table, its size, and the DSBT index.  */
4810   unsigned *dsbt_table;
4811   unsigned dsbt_size, dsbt_index;
4812   /* Number of segments in this map.  */
4813   Elf32_Word nsegs;
4814   /* The actual memory map.  */
4815   struct target_loadseg segs[/*nsegs*/];
4816 };
4817 #  define LINUX_LOADMAP         PT_GETDSBT
4818 #  define LINUX_LOADMAP_EXEC    PTRACE_GETDSBT_EXEC
4819 #  define LINUX_LOADMAP_INTERP  PTRACE_GETDSBT_INTERP
4820 # else
4821 struct target_loadmap
4822 {
4823   /* Protocol version number, must be zero.  */
4824   Elf32_Half version;
4825   /* Number of segments in this map.  */
4826   Elf32_Half nsegs;
4827   /* The actual memory map.  */
4828   struct target_loadseg segs[/*nsegs*/];
4829 };
4830 #  define LINUX_LOADMAP         PTRACE_GETFDPIC
4831 #  define LINUX_LOADMAP_EXEC    PTRACE_GETFDPIC_EXEC
4832 #  define LINUX_LOADMAP_INTERP  PTRACE_GETFDPIC_INTERP
4833 # endif
4834
4835 static int
4836 linux_read_loadmap (const char *annex, CORE_ADDR offset,
4837                     unsigned char *myaddr, unsigned int len)
4838 {
4839   int pid = lwpid_of (get_thread_lwp (current_inferior));
4840   int addr = -1;
4841   struct target_loadmap *data = NULL;
4842   unsigned int actual_length, copy_length;
4843
4844   if (strcmp (annex, "exec") == 0)
4845     addr = (int) LINUX_LOADMAP_EXEC;
4846   else if (strcmp (annex, "interp") == 0)
4847     addr = (int) LINUX_LOADMAP_INTERP;
4848   else
4849     return -1;
4850
4851   if (ptrace (LINUX_LOADMAP, pid, addr, &data) != 0)
4852     return -1;
4853
4854   if (data == NULL)
4855     return -1;
4856
4857   actual_length = sizeof (struct target_loadmap)
4858     + sizeof (struct target_loadseg) * data->nsegs;
4859
4860   if (offset < 0 || offset > actual_length)
4861     return -1;
4862
4863   copy_length = actual_length - offset < len ? actual_length - offset : len;
4864   memcpy (myaddr, (char *) data + offset, copy_length);
4865   return copy_length;
4866 }
4867 #else
4868 # define linux_read_loadmap NULL
4869 #endif /* defined PT_GETDSBT || defined PTRACE_GETFDPIC */
4870
4871 static void
4872 linux_process_qsupported (const char *query)
4873 {
4874   if (the_low_target.process_qsupported != NULL)
4875     the_low_target.process_qsupported (query);
4876 }
4877
4878 static int
4879 linux_supports_tracepoints (void)
4880 {
4881   if (*the_low_target.supports_tracepoints == NULL)
4882     return 0;
4883
4884   return (*the_low_target.supports_tracepoints) ();
4885 }
4886
4887 static CORE_ADDR
4888 linux_read_pc (struct regcache *regcache)
4889 {
4890   if (the_low_target.get_pc == NULL)
4891     return 0;
4892
4893   return (*the_low_target.get_pc) (regcache);
4894 }
4895
4896 static void
4897 linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
4898 {
4899   gdb_assert (the_low_target.set_pc != NULL);
4900
4901   (*the_low_target.set_pc) (regcache, pc);
4902 }
4903
4904 static int
4905 linux_thread_stopped (struct thread_info *thread)
4906 {
4907   return get_thread_lwp (thread)->stopped;
4908 }
4909
4910 /* This exposes stop-all-threads functionality to other modules.  */
4911
4912 static void
4913 linux_pause_all (int freeze)
4914 {
4915   stop_all_lwps (freeze, NULL);
4916 }
4917
4918 /* This exposes unstop-all-threads functionality to other gdbserver
4919    modules.  */
4920
4921 static void
4922 linux_unpause_all (int unfreeze)
4923 {
4924   unstop_all_lwps (unfreeze, NULL);
4925 }
4926
4927 static int
4928 linux_prepare_to_access_memory (void)
4929 {
4930   /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
4931      running LWP.  */
4932   if (non_stop)
4933     linux_pause_all (1);
4934   return 0;
4935 }
4936
4937 static void
4938 linux_done_accessing_memory (void)
4939 {
4940   /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
4941      running LWP.  */
4942   if (non_stop)
4943     linux_unpause_all (1);
4944 }
4945
4946 static int
4947 linux_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
4948                                         CORE_ADDR collector,
4949                                         CORE_ADDR lockaddr,
4950                                         ULONGEST orig_size,
4951                                         CORE_ADDR *jump_entry,
4952                                         CORE_ADDR *trampoline,
4953                                         ULONGEST *trampoline_size,
4954                                         unsigned char *jjump_pad_insn,
4955                                         ULONGEST *jjump_pad_insn_size,
4956                                         CORE_ADDR *adjusted_insn_addr,
4957                                         CORE_ADDR *adjusted_insn_addr_end,
4958                                         char *err)
4959 {
4960   return (*the_low_target.install_fast_tracepoint_jump_pad)
4961     (tpoint, tpaddr, collector, lockaddr, orig_size,
4962      jump_entry, trampoline, trampoline_size,
4963      jjump_pad_insn, jjump_pad_insn_size,
4964      adjusted_insn_addr, adjusted_insn_addr_end,
4965      err);
4966 }
4967
4968 static struct emit_ops *
4969 linux_emit_ops (void)
4970 {
4971   if (the_low_target.emit_ops != NULL)
4972     return (*the_low_target.emit_ops) ();
4973   else
4974     return NULL;
4975 }
4976
4977 static int
4978 linux_get_min_fast_tracepoint_insn_len (void)
4979 {
4980   return (*the_low_target.get_min_fast_tracepoint_insn_len) ();
4981 }
4982
4983 /* Extract &phdr and num_phdr in the inferior.  Return 0 on success.  */
4984
4985 static int
4986 get_phdr_phnum_from_proc_auxv (const int pid, const int is_elf64,
4987                                CORE_ADDR *phdr_memaddr, int *num_phdr)
4988 {
4989   char filename[PATH_MAX];
4990   int fd;
4991   const int auxv_size = is_elf64
4992     ? sizeof (Elf64_auxv_t) : sizeof (Elf32_auxv_t);
4993   char buf[sizeof (Elf64_auxv_t)];  /* The larger of the two.  */
4994
4995   xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
4996
4997   fd = open (filename, O_RDONLY);
4998   if (fd < 0)
4999     return 1;
5000
5001   *phdr_memaddr = 0;
5002   *num_phdr = 0;
5003   while (read (fd, buf, auxv_size) == auxv_size
5004          && (*phdr_memaddr == 0 || *num_phdr == 0))
5005     {
5006       if (is_elf64)
5007         {
5008           Elf64_auxv_t *const aux = (Elf64_auxv_t *) buf;
5009
5010           switch (aux->a_type)
5011             {
5012             case AT_PHDR:
5013               *phdr_memaddr = aux->a_un.a_val;
5014               break;
5015             case AT_PHNUM:
5016               *num_phdr = aux->a_un.a_val;
5017               break;
5018             }
5019         }
5020       else
5021         {
5022           Elf32_auxv_t *const aux = (Elf32_auxv_t *) buf;
5023
5024           switch (aux->a_type)
5025             {
5026             case AT_PHDR:
5027               *phdr_memaddr = aux->a_un.a_val;
5028               break;
5029             case AT_PHNUM:
5030               *num_phdr = aux->a_un.a_val;
5031               break;
5032             }
5033         }
5034     }
5035
5036   close (fd);
5037
5038   if (*phdr_memaddr == 0 || *num_phdr == 0)
5039     {
5040       warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: "
5041                "phdr_memaddr = %ld, phdr_num = %d",
5042                (long) *phdr_memaddr, *num_phdr);
5043       return 2;
5044     }
5045
5046   return 0;
5047 }
5048
5049 /* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present.  */
5050
5051 static CORE_ADDR
5052 get_dynamic (const int pid, const int is_elf64)
5053 {
5054   CORE_ADDR phdr_memaddr, relocation;
5055   int num_phdr, i;
5056   unsigned char *phdr_buf;
5057   const int phdr_size = is_elf64 ? sizeof (Elf64_Phdr) : sizeof (Elf32_Phdr);
5058
5059   if (get_phdr_phnum_from_proc_auxv (pid, is_elf64, &phdr_memaddr, &num_phdr))
5060     return 0;
5061
5062   gdb_assert (num_phdr < 100);  /* Basic sanity check.  */
5063   phdr_buf = alloca (num_phdr * phdr_size);
5064
5065   if (linux_read_memory (phdr_memaddr, phdr_buf, num_phdr * phdr_size))
5066     return 0;
5067
5068   /* Compute relocation: it is expected to be 0 for "regular" executables,
5069      non-zero for PIE ones.  */
5070   relocation = -1;
5071   for (i = 0; relocation == -1 && i < num_phdr; i++)
5072     if (is_elf64)
5073       {
5074         Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
5075
5076         if (p->p_type == PT_PHDR)
5077           relocation = phdr_memaddr - p->p_vaddr;
5078       }
5079     else
5080       {
5081         Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
5082
5083         if (p->p_type == PT_PHDR)
5084           relocation = phdr_memaddr - p->p_vaddr;
5085       }
5086
5087   if (relocation == -1)
5088     {
5089       warning ("Unexpected missing PT_PHDR");
5090       return 0;
5091     }
5092
5093   for (i = 0; i < num_phdr; i++)
5094     {
5095       if (is_elf64)
5096         {
5097           Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
5098
5099           if (p->p_type == PT_DYNAMIC)
5100             return p->p_vaddr + relocation;
5101         }
5102       else
5103         {
5104           Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
5105
5106           if (p->p_type == PT_DYNAMIC)
5107             return p->p_vaddr + relocation;
5108         }
5109     }
5110
5111   return 0;
5112 }
5113
5114 /* Return &_r_debug in the inferior, or -1 if not present.  Return value
5115    can be 0 if the inferior does not yet have the library list initialized.  */
5116
5117 static CORE_ADDR
5118 get_r_debug (const int pid, const int is_elf64)
5119 {
5120   CORE_ADDR dynamic_memaddr;
5121   const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn);
5122   unsigned char buf[sizeof (Elf64_Dyn)];  /* The larger of the two.  */
5123
5124   dynamic_memaddr = get_dynamic (pid, is_elf64);
5125   if (dynamic_memaddr == 0)
5126     return (CORE_ADDR) -1;
5127
5128   while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0)
5129     {
5130       if (is_elf64)
5131         {
5132           Elf64_Dyn *const dyn = (Elf64_Dyn *) buf;
5133
5134           if (dyn->d_tag == DT_DEBUG)
5135             return dyn->d_un.d_val;
5136
5137           if (dyn->d_tag == DT_NULL)
5138             break;
5139         }
5140       else
5141         {
5142           Elf32_Dyn *const dyn = (Elf32_Dyn *) buf;
5143
5144           if (dyn->d_tag == DT_DEBUG)
5145             return dyn->d_un.d_val;
5146
5147           if (dyn->d_tag == DT_NULL)
5148             break;
5149         }
5150
5151       dynamic_memaddr += dyn_size;
5152     }
5153
5154   return (CORE_ADDR) -1;
5155 }
5156
5157 /* Read one pointer from MEMADDR in the inferior.  */
5158
5159 static int
5160 read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size)
5161 {
5162   *ptr = 0;
5163   return linux_read_memory (memaddr, (unsigned char *) ptr, ptr_size);
5164 }
5165
5166 struct link_map_offsets
5167   {
5168     /* Offset and size of r_debug.r_version.  */
5169     int r_version_offset;
5170
5171     /* Offset and size of r_debug.r_map.  */
5172     int r_map_offset;
5173
5174     /* Offset to l_addr field in struct link_map.  */
5175     int l_addr_offset;
5176
5177     /* Offset to l_name field in struct link_map.  */
5178     int l_name_offset;
5179
5180     /* Offset to l_ld field in struct link_map.  */
5181     int l_ld_offset;
5182
5183     /* Offset to l_next field in struct link_map.  */
5184     int l_next_offset;
5185
5186     /* Offset to l_prev field in struct link_map.  */
5187     int l_prev_offset;
5188   };
5189
5190 /* Construct qXfer:libraries:read reply.  */
5191
5192 static int
5193 linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
5194                             unsigned const char *writebuf,
5195                             CORE_ADDR offset, int len)
5196 {
5197   char *document;
5198   unsigned document_len;
5199   struct process_info_private *const priv = current_process ()->private;
5200   char filename[PATH_MAX];
5201   int pid, is_elf64;
5202
5203   static const struct link_map_offsets lmo_32bit_offsets =
5204     {
5205       0,     /* r_version offset. */
5206       4,     /* r_debug.r_map offset.  */
5207       0,     /* l_addr offset in link_map.  */
5208       4,     /* l_name offset in link_map.  */
5209       8,     /* l_ld offset in link_map.  */
5210       12,    /* l_next offset in link_map.  */
5211       16     /* l_prev offset in link_map.  */
5212     };
5213
5214   static const struct link_map_offsets lmo_64bit_offsets =
5215     {
5216       0,     /* r_version offset. */
5217       8,     /* r_debug.r_map offset.  */
5218       0,     /* l_addr offset in link_map.  */
5219       8,     /* l_name offset in link_map.  */
5220       16,    /* l_ld offset in link_map.  */
5221       24,    /* l_next offset in link_map.  */
5222       32     /* l_prev offset in link_map.  */
5223     };
5224   const struct link_map_offsets *lmo;
5225
5226   if (writebuf != NULL)
5227     return -2;
5228   if (readbuf == NULL)
5229     return -1;
5230
5231   pid = lwpid_of (get_thread_lwp (current_inferior));
5232   xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid);
5233   is_elf64 = elf_64_file_p (filename);
5234   lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets;
5235
5236   if (priv->r_debug == 0)
5237     priv->r_debug = get_r_debug (pid, is_elf64);
5238
5239   if (priv->r_debug == (CORE_ADDR) -1 || priv->r_debug == 0)
5240     {
5241       document = xstrdup ("<library-list-svr4 version=\"1.0\"/>\n");
5242     }
5243   else
5244     {
5245       int allocated = 1024;
5246       char *p;
5247       const int ptr_size = is_elf64 ? 8 : 4;
5248       CORE_ADDR lm_addr, lm_prev, l_name, l_addr, l_ld, l_next, l_prev;
5249       int r_version, header_done = 0;
5250
5251       document = xmalloc (allocated);
5252       strcpy (document, "<library-list-svr4 version=\"1.0\"");
5253       p = document + strlen (document);
5254
5255       r_version = 0;
5256       if (linux_read_memory (priv->r_debug + lmo->r_version_offset,
5257                              (unsigned char *) &r_version,
5258                              sizeof (r_version)) != 0
5259           || r_version != 1)
5260         {
5261           warning ("unexpected r_debug version %d", r_version);
5262           goto done;
5263         }
5264
5265       if (read_one_ptr (priv->r_debug + lmo->r_map_offset,
5266                         &lm_addr, ptr_size) != 0)
5267         {
5268           warning ("unable to read r_map from 0x%lx",
5269                    (long) priv->r_debug + lmo->r_map_offset);
5270           goto done;
5271         }
5272
5273       lm_prev = 0;
5274       while (read_one_ptr (lm_addr + lmo->l_name_offset,
5275                            &l_name, ptr_size) == 0
5276              && read_one_ptr (lm_addr + lmo->l_addr_offset,
5277                               &l_addr, ptr_size) == 0
5278              && read_one_ptr (lm_addr + lmo->l_ld_offset,
5279                               &l_ld, ptr_size) == 0
5280              && read_one_ptr (lm_addr + lmo->l_prev_offset,
5281                               &l_prev, ptr_size) == 0
5282              && read_one_ptr (lm_addr + lmo->l_next_offset,
5283                               &l_next, ptr_size) == 0)
5284         {
5285           unsigned char libname[PATH_MAX];
5286
5287           if (lm_prev != l_prev)
5288             {
5289               warning ("Corrupted shared library list: 0x%lx != 0x%lx",
5290                        (long) lm_prev, (long) l_prev);
5291               break;
5292             }
5293
5294           /* Not checking for error because reading may stop before
5295              we've got PATH_MAX worth of characters.  */
5296           libname[0] = '\0';
5297           linux_read_memory (l_name, libname, sizeof (libname) - 1);
5298           libname[sizeof (libname) - 1] = '\0';
5299           if (libname[0] != '\0')
5300             {
5301               /* 6x the size for xml_escape_text below.  */
5302               size_t len = 6 * strlen ((char *) libname);
5303               char *name;
5304
5305               if (!header_done)
5306                 {
5307                   /* Terminate `<library-list-svr4'.  */
5308                   *p++ = '>';
5309                   header_done = 1;
5310                 }
5311
5312               while (allocated < p - document + len + 200)
5313                 {
5314                   /* Expand to guarantee sufficient storage.  */
5315                   uintptr_t document_len = p - document;
5316
5317                   document = xrealloc (document, 2 * allocated);
5318                   allocated *= 2;
5319                   p = document + document_len;
5320                 }
5321
5322               name = xml_escape_text ((char *) libname);
5323               p += sprintf (p, "<library name=\"%s\" lm=\"0x%lx\" "
5324                                "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
5325                             name, (unsigned long) lm_addr,
5326                             (unsigned long) l_addr, (unsigned long) l_ld);
5327               free (name);
5328             }
5329           else if (lm_prev == 0)
5330             {
5331               sprintf (p, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
5332               p = p + strlen (p);
5333             }
5334
5335           if (l_next == 0)
5336             break;
5337
5338           lm_prev = lm_addr;
5339           lm_addr = l_next;
5340         }
5341     done:
5342       strcpy (p, "</library-list-svr4>");
5343     }
5344
5345   document_len = strlen (document);
5346   if (offset < document_len)
5347     document_len -= offset;
5348   else
5349     document_len = 0;
5350   if (len > document_len)
5351     len = document_len;
5352
5353   memcpy (readbuf, document + offset, len);
5354   xfree (document);
5355
5356   return len;
5357 }
5358
5359 static struct target_ops linux_target_ops = {
5360   linux_create_inferior,
5361   linux_attach,
5362   linux_kill,
5363   linux_detach,
5364   linux_mourn,
5365   linux_join,
5366   linux_thread_alive,
5367   linux_resume,
5368   linux_wait,
5369   linux_fetch_registers,
5370   linux_store_registers,
5371   linux_prepare_to_access_memory,
5372   linux_done_accessing_memory,
5373   linux_read_memory,
5374   linux_write_memory,
5375   linux_look_up_symbols,
5376   linux_request_interrupt,
5377   linux_read_auxv,
5378   linux_insert_point,
5379   linux_remove_point,
5380   linux_stopped_by_watchpoint,
5381   linux_stopped_data_address,
5382 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
5383   linux_read_offsets,
5384 #else
5385   NULL,
5386 #endif
5387 #ifdef USE_THREAD_DB
5388   thread_db_get_tls_address,
5389 #else
5390   NULL,
5391 #endif
5392   linux_qxfer_spu,
5393   hostio_last_error_from_errno,
5394   linux_qxfer_osdata,
5395   linux_xfer_siginfo,
5396   linux_supports_non_stop,
5397   linux_async,
5398   linux_start_non_stop,
5399   linux_supports_multi_process,
5400 #ifdef USE_THREAD_DB
5401   thread_db_handle_monitor_command,
5402 #else
5403   NULL,
5404 #endif
5405   linux_common_core_of_thread,
5406   linux_read_loadmap,
5407   linux_process_qsupported,
5408   linux_supports_tracepoints,
5409   linux_read_pc,
5410   linux_write_pc,
5411   linux_thread_stopped,
5412   NULL,
5413   linux_pause_all,
5414   linux_unpause_all,
5415   linux_cancel_breakpoints,
5416   linux_stabilize_threads,
5417   linux_install_fast_tracepoint_jump_pad,
5418   linux_emit_ops,
5419   linux_supports_disable_randomization,
5420   linux_get_min_fast_tracepoint_insn_len,
5421   linux_qxfer_libraries_svr4,
5422 };
5423
5424 static void
5425 linux_init_signals ()
5426 {
5427   /* FIXME drow/2002-06-09: As above, we should check with LinuxThreads
5428      to find what the cancel signal actually is.  */
5429 #ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does.  */
5430   signal (__SIGRTMIN+1, SIG_IGN);
5431 #endif
5432 }
5433
5434 void
5435 initialize_low (void)
5436 {
5437   struct sigaction sigchld_action;
5438   memset (&sigchld_action, 0, sizeof (sigchld_action));
5439   set_target_ops (&linux_target_ops);
5440   set_breakpoint_data (the_low_target.breakpoint,
5441                        the_low_target.breakpoint_len);
5442   linux_init_signals ();
5443   linux_test_for_tracefork ();
5444 #ifdef HAVE_LINUX_REGSETS
5445   for (num_regsets = 0; target_regsets[num_regsets].size >= 0; num_regsets++)
5446     ;
5447   disabled_regsets = xmalloc (num_regsets);
5448 #endif
5449
5450   sigchld_action.sa_handler = sigchld_handler;
5451   sigemptyset (&sigchld_action.sa_mask);
5452   sigchld_action.sa_flags = SA_RESTART;
5453   sigaction (SIGCHLD, &sigchld_action, NULL);
5454 }