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