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