a88f4d1f02e8192477898c72082ee034a4d20571
[external/binutils.git] / gdb / gdbserver / linux-low.c
1 /* Low level interface to ptrace, for the remote server for GDB.
2    Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3    2006, 2007, 2008, 2009 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "server.h"
21 #include "linux-low.h"
22 #include "ansidecl.h" /* For ATTRIBUTE_PACKED, must be bug in external.h.  */
23 #include "elf/common.h"
24 #include "elf/external.h"
25
26 #include <sys/wait.h>
27 #include <stdio.h>
28 #include <sys/param.h>
29 #include <sys/ptrace.h>
30 #include <signal.h>
31 #include <sys/ioctl.h>
32 #include <fcntl.h>
33 #include <string.h>
34 #include <stdlib.h>
35 #include <unistd.h>
36 #include <errno.h>
37 #include <sys/syscall.h>
38 #include <sched.h>
39 #include <ctype.h>
40 #include <pwd.h>
41 #include <sys/types.h>
42 #include <dirent.h>
43 #include <sys/stat.h>
44 #include <sys/vfs.h>
45
46 #ifndef SPUFS_MAGIC
47 #define SPUFS_MAGIC 0x23c9b64e
48 #endif
49
50 #ifndef PTRACE_GETSIGINFO
51 # define PTRACE_GETSIGINFO 0x4202
52 # define PTRACE_SETSIGINFO 0x4203
53 #endif
54
55 #ifndef O_LARGEFILE
56 #define O_LARGEFILE 0
57 #endif
58
59 /* If the system headers did not provide the constants, hard-code the normal
60    values.  */
61 #ifndef PTRACE_EVENT_FORK
62
63 #define PTRACE_SETOPTIONS       0x4200
64 #define PTRACE_GETEVENTMSG      0x4201
65
66 /* options set using PTRACE_SETOPTIONS */
67 #define PTRACE_O_TRACESYSGOOD   0x00000001
68 #define PTRACE_O_TRACEFORK      0x00000002
69 #define PTRACE_O_TRACEVFORK     0x00000004
70 #define PTRACE_O_TRACECLONE     0x00000008
71 #define PTRACE_O_TRACEEXEC      0x00000010
72 #define PTRACE_O_TRACEVFORKDONE 0x00000020
73 #define PTRACE_O_TRACEEXIT      0x00000040
74
75 /* Wait extended result codes for the above trace options.  */
76 #define PTRACE_EVENT_FORK       1
77 #define PTRACE_EVENT_VFORK      2
78 #define PTRACE_EVENT_CLONE      3
79 #define PTRACE_EVENT_EXEC       4
80 #define PTRACE_EVENT_VFORK_DONE 5
81 #define PTRACE_EVENT_EXIT       6
82
83 #endif /* PTRACE_EVENT_FORK */
84
85 /* We can't always assume that this flag is available, but all systems
86    with the ptrace event handlers also have __WALL, so it's safe to use
87    in some contexts.  */
88 #ifndef __WALL
89 #define __WALL          0x40000000 /* Wait for any child.  */
90 #endif
91
92 #ifdef __UCLIBC__
93 #if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
94 #define HAS_NOMMU
95 #endif
96 #endif
97
98 /* ``all_threads'' is keyed by the LWP ID, which we use as the GDB protocol
99    representation of the thread ID.
100
101    ``all_lwps'' is keyed by the process ID - which on Linux is (presently)
102    the same as the LWP ID.
103
104    ``all_processes'' is keyed by the "overall process ID", which
105    GNU/Linux calls tgid, "thread group ID".  */
106
107 struct inferior_list all_lwps;
108
109 /* A list of all unknown processes which receive stop signals.  Some other
110    process will presumably claim each of these as forked children
111    momentarily.  */
112
113 struct inferior_list stopped_pids;
114
115 /* FIXME this is a bit of a hack, and could be removed.  */
116 int stopping_threads;
117
118 /* FIXME make into a target method?  */
119 int using_threads = 1;
120
121 /* This flag is true iff we've just created or attached to our first
122    inferior but it has not stopped yet.  As soon as it does, we need
123    to call the low target's arch_setup callback.  Doing this only on
124    the first inferior avoids reinializing the architecture on every
125    inferior, and avoids messing with the register caches of the
126    already running inferiors.  NOTE: this assumes all inferiors under
127    control of gdbserver have the same architecture.  */
128 static int new_inferior;
129
130 static void linux_resume_one_lwp (struct lwp_info *lwp,
131                                   int step, int signal, siginfo_t *info);
132 static void linux_resume (struct thread_resume *resume_info, size_t n);
133 static void stop_all_lwps (void);
134 static int linux_wait_for_event (ptid_t ptid, int *wstat, int options);
135 static int check_removed_breakpoint (struct lwp_info *event_child);
136 static void *add_lwp (ptid_t ptid);
137 static int my_waitpid (int pid, int *status, int flags);
138 static int linux_stopped_by_watchpoint (void);
139 static void mark_lwp_dead (struct lwp_info *lwp, int wstat);
140
141 struct pending_signals
142 {
143   int signal;
144   siginfo_t info;
145   struct pending_signals *prev;
146 };
147
148 #define PTRACE_ARG3_TYPE long
149 #define PTRACE_XFER_TYPE long
150
151 #ifdef HAVE_LINUX_REGSETS
152 static char *disabled_regsets;
153 static int num_regsets;
154 #endif
155
156 /* The read/write ends of the pipe registered as waitable file in the
157    event loop.  */
158 static int linux_event_pipe[2] = { -1, -1 };
159
160 /* True if we're currently in async mode.  */
161 #define target_is_async_p() (linux_event_pipe[0] != -1)
162
163 static void send_sigstop (struct inferior_list_entry *entry);
164 static void wait_for_sigstop (struct inferior_list_entry *entry);
165
166 /* Accepts an integer PID; Returns a string representing a file that
167    can be opened to get info for the child process.
168    Space for the result is malloc'd, caller must free.  */
169
170 char *
171 linux_child_pid_to_exec_file (int pid)
172 {
173   char *name1, *name2;
174
175   name1 = xmalloc (MAXPATHLEN);
176   name2 = xmalloc (MAXPATHLEN);
177   memset (name2, 0, MAXPATHLEN);
178
179   sprintf (name1, "/proc/%d/exe", pid);
180   if (readlink (name1, name2, MAXPATHLEN) > 0)
181     {
182       free (name1);
183       return name2;
184     }
185   else
186     {
187       free (name2);
188       return name1;
189     }
190 }
191
192 /* Return non-zero if HEADER is a 64-bit ELF file.  */
193
194 static int
195 elf_64_header_p (const Elf64_External_Ehdr *header)
196 {
197   return (header->e_ident[EI_MAG0] == ELFMAG0
198           && header->e_ident[EI_MAG1] == ELFMAG1
199           && header->e_ident[EI_MAG2] == ELFMAG2
200           && header->e_ident[EI_MAG3] == ELFMAG3
201           && header->e_ident[EI_CLASS] == ELFCLASS64);
202 }
203
204 /* Return non-zero if FILE is a 64-bit ELF file,
205    zero if the file is not a 64-bit ELF file,
206    and -1 if the file is not accessible or doesn't exist.  */
207
208 int
209 elf_64_file_p (const char *file)
210 {
211   Elf64_External_Ehdr header;
212   int fd;
213
214   fd = open (file, O_RDONLY);
215   if (fd < 0)
216     return -1;
217
218   if (read (fd, &header, sizeof (header)) != sizeof (header))
219     {
220       close (fd);
221       return 0;
222     }
223   close (fd);
224
225   return elf_64_header_p (&header);
226 }
227
228 static void
229 delete_lwp (struct lwp_info *lwp)
230 {
231   remove_thread (get_lwp_thread (lwp));
232   remove_inferior (&all_lwps, &lwp->head);
233   free (lwp->arch_private);
234   free (lwp);
235 }
236
237 /* Add a process to the common process list, and set its private
238    data.  */
239
240 static struct process_info *
241 linux_add_process (int pid, int attached)
242 {
243   struct process_info *proc;
244
245   /* Is this the first process?  If so, then set the arch.  */
246   if (all_processes.head == NULL)
247     new_inferior = 1;
248
249   proc = add_process (pid, attached);
250   proc->private = xcalloc (1, sizeof (*proc->private));
251
252   if (the_low_target.new_process != NULL)
253     proc->private->arch_private = the_low_target.new_process ();
254
255   return proc;
256 }
257
258 /* Remove a process from the common process list,
259    also freeing all private data.  */
260
261 static void
262 linux_remove_process (struct process_info *process)
263 {
264   free (process->private->arch_private);
265   free (process->private);
266   remove_process (process);
267 }
268
269 /* Handle a GNU/Linux extended wait response.  If we see a clone
270    event, we need to add the new LWP to our list (and not report the
271    trap to higher layers).  */
272
273 static void
274 handle_extended_wait (struct lwp_info *event_child, int wstat)
275 {
276   int event = wstat >> 16;
277   struct lwp_info *new_lwp;
278
279   if (event == PTRACE_EVENT_CLONE)
280     {
281       ptid_t ptid;
282       unsigned long new_pid;
283       int ret, status = W_STOPCODE (SIGSTOP);
284
285       ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_child), 0, &new_pid);
286
287       /* If we haven't already seen the new PID stop, wait for it now.  */
288       if (! pull_pid_from_list (&stopped_pids, new_pid))
289         {
290           /* The new child has a pending SIGSTOP.  We can't affect it until it
291              hits the SIGSTOP, but we're already attached.  */
292
293           ret = my_waitpid (new_pid, &status, __WALL);
294
295           if (ret == -1)
296             perror_with_name ("waiting for new child");
297           else if (ret != new_pid)
298             warning ("wait returned unexpected PID %d", ret);
299           else if (!WIFSTOPPED (status))
300             warning ("wait returned unexpected status 0x%x", status);
301         }
302
303       ptrace (PTRACE_SETOPTIONS, new_pid, 0, PTRACE_O_TRACECLONE);
304
305       ptid = ptid_build (pid_of (event_child), new_pid, 0);
306       new_lwp = (struct lwp_info *) add_lwp (ptid);
307       add_thread (ptid, new_lwp);
308
309       /* Either we're going to immediately resume the new thread
310          or leave it stopped.  linux_resume_one_lwp is a nop if it
311          thinks the thread is currently running, so set this first
312          before calling linux_resume_one_lwp.  */
313       new_lwp->stopped = 1;
314
315       /* Normally we will get the pending SIGSTOP.  But in some cases
316          we might get another signal delivered to the group first.
317          If we do get another signal, be sure not to lose it.  */
318       if (WSTOPSIG (status) == SIGSTOP)
319         {
320           if (! stopping_threads)
321             linux_resume_one_lwp (new_lwp, 0, 0, NULL);
322         }
323       else
324         {
325           new_lwp->stop_expected = 1;
326           if (stopping_threads)
327             {
328               new_lwp->status_pending_p = 1;
329               new_lwp->status_pending = status;
330             }
331           else
332             /* Pass the signal on.  This is what GDB does - except
333                shouldn't we really report it instead?  */
334             linux_resume_one_lwp (new_lwp, 0, WSTOPSIG (status), NULL);
335         }
336
337       /* Always resume the current thread.  If we are stopping
338          threads, it will have a pending SIGSTOP; we may as well
339          collect it now.  */
340       linux_resume_one_lwp (event_child, event_child->stepping, 0, NULL);
341     }
342 }
343
344 /* This function should only be called if the process got a SIGTRAP.
345    The SIGTRAP could mean several things.
346
347    On i386, where decr_pc_after_break is non-zero:
348    If we were single-stepping this process using PTRACE_SINGLESTEP,
349    we will get only the one SIGTRAP (even if the instruction we
350    stepped over was a breakpoint).  The value of $eip will be the
351    next instruction.
352    If we continue the process using PTRACE_CONT, we will get a
353    SIGTRAP when we hit a breakpoint.  The value of $eip will be
354    the instruction after the breakpoint (i.e. needs to be
355    decremented).  If we report the SIGTRAP to GDB, we must also
356    report the undecremented PC.  If we cancel the SIGTRAP, we
357    must resume at the decremented PC.
358
359    (Presumably, not yet tested) On a non-decr_pc_after_break machine
360    with hardware or kernel single-step:
361    If we single-step over a breakpoint instruction, our PC will
362    point at the following instruction.  If we continue and hit a
363    breakpoint instruction, our PC will point at the breakpoint
364    instruction.  */
365
366 static CORE_ADDR
367 get_stop_pc (void)
368 {
369   CORE_ADDR stop_pc = (*the_low_target.get_pc) ();
370
371   if (! get_thread_lwp (current_inferior)->stepping)
372     stop_pc -= the_low_target.decr_pc_after_break;
373
374   if (debug_threads)
375     fprintf (stderr, "stop pc is 0x%lx\n", (long) stop_pc);
376
377   return stop_pc;
378 }
379
380 static void *
381 add_lwp (ptid_t ptid)
382 {
383   struct lwp_info *lwp;
384
385   lwp = (struct lwp_info *) xmalloc (sizeof (*lwp));
386   memset (lwp, 0, sizeof (*lwp));
387
388   lwp->head.id = ptid;
389
390   if (the_low_target.new_thread != NULL)
391     lwp->arch_private = the_low_target.new_thread ();
392
393   add_inferior_to_list (&all_lwps, &lwp->head);
394
395   return lwp;
396 }
397
398 /* Start an inferior process and returns its pid.
399    ALLARGS is a vector of program-name and args. */
400
401 static int
402 linux_create_inferior (char *program, char **allargs)
403 {
404   struct lwp_info *new_lwp;
405   int pid;
406   ptid_t ptid;
407
408 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
409   pid = vfork ();
410 #else
411   pid = fork ();
412 #endif
413   if (pid < 0)
414     perror_with_name ("fork");
415
416   if (pid == 0)
417     {
418       ptrace (PTRACE_TRACEME, 0, 0, 0);
419
420       signal (__SIGRTMIN + 1, SIG_DFL);
421
422       setpgid (0, 0);
423
424       execv (program, allargs);
425       if (errno == ENOENT)
426         execvp (program, allargs);
427
428       fprintf (stderr, "Cannot exec %s: %s.\n", program,
429                strerror (errno));
430       fflush (stderr);
431       _exit (0177);
432     }
433
434   linux_add_process (pid, 0);
435
436   ptid = ptid_build (pid, pid, 0);
437   new_lwp = add_lwp (ptid);
438   add_thread (ptid, new_lwp);
439   new_lwp->must_set_ptrace_flags = 1;
440
441   return pid;
442 }
443
444 /* Attach to an inferior process.  */
445
446 static void
447 linux_attach_lwp_1 (unsigned long lwpid, int initial)
448 {
449   ptid_t ptid;
450   struct lwp_info *new_lwp;
451
452   if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) != 0)
453     {
454       if (!initial)
455         {
456           /* If we fail to attach to an LWP, just warn.  */
457           fprintf (stderr, "Cannot attach to lwp %ld: %s (%d)\n", lwpid,
458                    strerror (errno), errno);
459           fflush (stderr);
460           return;
461         }
462       else
463         /* If we fail to attach to a process, report an error.  */
464         error ("Cannot attach to lwp %ld: %s (%d)\n", lwpid,
465                strerror (errno), errno);
466     }
467
468   if (initial)
469     /* NOTE/FIXME: This lwp might have not been the tgid.  */
470     ptid = ptid_build (lwpid, lwpid, 0);
471   else
472     {
473       /* Note that extracting the pid from the current inferior is
474          safe, since we're always called in the context of the same
475          process as this new thread.  */
476       int pid = pid_of (get_thread_lwp (current_inferior));
477       ptid = ptid_build (pid, lwpid, 0);
478     }
479
480   new_lwp = (struct lwp_info *) add_lwp (ptid);
481   add_thread (ptid, new_lwp);
482
483   /* We need to wait for SIGSTOP before being able to make the next
484      ptrace call on this LWP.  */
485   new_lwp->must_set_ptrace_flags = 1;
486
487   /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
488      brings it to a halt.
489
490      There are several cases to consider here:
491
492      1) gdbserver has already attached to the process and is being notified
493         of a new thread that is being created.
494         In this case we should ignore that SIGSTOP and resume the process.
495         This is handled below by setting stop_expected = 1.
496
497      2) This is the first thread (the process thread), and we're attaching
498         to it via attach_inferior.
499         In this case we want the process thread to stop.
500         This is handled by having linux_attach clear stop_expected after
501         we return.
502         ??? If the process already has several threads we leave the other
503         threads running.
504
505      3) GDB is connecting to gdbserver and is requesting an enumeration of all
506         existing threads.
507         In this case we want the thread to stop.
508         FIXME: This case is currently not properly handled.
509         We should wait for the SIGSTOP but don't.  Things work apparently
510         because enough time passes between when we ptrace (ATTACH) and when
511         gdb makes the next ptrace call on the thread.
512
513      On the other hand, if we are currently trying to stop all threads, we
514      should treat the new thread as if we had sent it a SIGSTOP.  This works
515      because we are guaranteed that the add_lwp call above added us to the
516      end of the list, and so the new thread has not yet reached
517      wait_for_sigstop (but will).  */
518   if (! stopping_threads)
519     new_lwp->stop_expected = 1;
520 }
521
522 void
523 linux_attach_lwp (unsigned long lwpid)
524 {
525   linux_attach_lwp_1 (lwpid, 0);
526 }
527
528 int
529 linux_attach (unsigned long pid)
530 {
531   struct lwp_info *lwp;
532
533   linux_attach_lwp_1 (pid, 1);
534
535   linux_add_process (pid, 1);
536
537   if (!non_stop)
538     {
539       /* Don't ignore the initial SIGSTOP if we just attached to this
540          process.  It will be collected by wait shortly.  */
541       lwp = (struct lwp_info *) find_inferior_id (&all_lwps,
542                                                   ptid_build (pid, pid, 0));
543       lwp->stop_expected = 0;
544     }
545
546   return 0;
547 }
548
549 struct counter
550 {
551   int pid;
552   int count;
553 };
554
555 static int
556 second_thread_of_pid_p (struct inferior_list_entry *entry, void *args)
557 {
558   struct counter *counter = args;
559
560   if (ptid_get_pid (entry->id) == counter->pid)
561     {
562       if (++counter->count > 1)
563         return 1;
564     }
565
566   return 0;
567 }
568
569 static int
570 last_thread_of_process_p (struct thread_info *thread)
571 {
572   ptid_t ptid = ((struct inferior_list_entry *)thread)->id;
573   int pid = ptid_get_pid (ptid);
574   struct counter counter = { pid , 0 };
575
576   return (find_inferior (&all_threads,
577                          second_thread_of_pid_p, &counter) == NULL);
578 }
579
580 /* Kill the inferior lwp.  */
581
582 static int
583 linux_kill_one_lwp (struct inferior_list_entry *entry, void *args)
584 {
585   struct thread_info *thread = (struct thread_info *) entry;
586   struct lwp_info *lwp = get_thread_lwp (thread);
587   int wstat;
588   int pid = * (int *) args;
589
590   if (ptid_get_pid (entry->id) != pid)
591     return 0;
592
593   /* We avoid killing the first thread here, because of a Linux kernel (at
594      least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
595      the children get a chance to be reaped, it will remain a zombie
596      forever.  */
597
598   if (lwpid_of (lwp) == pid)
599     {
600       if (debug_threads)
601         fprintf (stderr, "lkop: is last of process %s\n",
602                  target_pid_to_str (entry->id));
603       return 0;
604     }
605
606   /* If we're killing a running inferior, make sure it is stopped
607      first, as PTRACE_KILL will not work otherwise.  */
608   if (!lwp->stopped)
609     send_sigstop (&lwp->head);
610
611   do
612     {
613       ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0);
614
615       /* Make sure it died.  The loop is most likely unnecessary.  */
616       pid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
617     } while (pid > 0 && WIFSTOPPED (wstat));
618
619   return 0;
620 }
621
622 static int
623 linux_kill (int pid)
624 {
625   struct process_info *process;
626   struct lwp_info *lwp;
627   struct thread_info *thread;
628   int wstat;
629   int lwpid;
630
631   process = find_process_pid (pid);
632   if (process == NULL)
633     return -1;
634
635   find_inferior (&all_threads, linux_kill_one_lwp, &pid);
636
637   /* See the comment in linux_kill_one_lwp.  We did not kill the first
638      thread in the list, so do so now.  */
639   lwp = find_lwp_pid (pid_to_ptid (pid));
640   thread = get_lwp_thread (lwp);
641
642   if (debug_threads)
643     fprintf (stderr, "lk_1: killing lwp %ld, for pid: %d\n",
644              lwpid_of (lwp), pid);
645
646   /* If we're killing a running inferior, make sure it is stopped
647      first, as PTRACE_KILL will not work otherwise.  */
648   if (!lwp->stopped)
649     send_sigstop (&lwp->head);
650
651   do
652     {
653       ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0);
654
655       /* Make sure it died.  The loop is most likely unnecessary.  */
656       lwpid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
657     } while (lwpid > 0 && WIFSTOPPED (wstat));
658
659   delete_lwp (lwp);
660   linux_remove_process (process);
661   return 0;
662 }
663
664 static int
665 linux_detach_one_lwp (struct inferior_list_entry *entry, void *args)
666 {
667   struct thread_info *thread = (struct thread_info *) entry;
668   struct lwp_info *lwp = get_thread_lwp (thread);
669   int pid = * (int *) args;
670
671   if (ptid_get_pid (entry->id) != pid)
672     return 0;
673
674   /* If we're detaching from a running inferior, make sure it is
675      stopped first, as PTRACE_DETACH will not work otherwise.  */
676   if (!lwp->stopped)
677     {
678       int lwpid = lwpid_of (lwp);
679
680       stopping_threads = 1;
681       send_sigstop (&lwp->head);
682
683       /* If this detects a new thread through a clone event, the new
684          thread is appended to the end of the lwp list, so we'll
685          eventually detach from it.  */
686       wait_for_sigstop (&lwp->head);
687       stopping_threads = 0;
688
689       /* If LWP exits while we're trying to stop it, there's nothing
690          left to do.  */
691       lwp = find_lwp_pid (pid_to_ptid (lwpid));
692       if (lwp == NULL)
693         return 0;
694     }
695
696   /* Make sure the process isn't stopped at a breakpoint that's
697      no longer there.  */
698   check_removed_breakpoint (lwp);
699
700   /* If this process is stopped but is expecting a SIGSTOP, then make
701      sure we take care of that now.  This isn't absolutely guaranteed
702      to collect the SIGSTOP, but is fairly likely to.  */
703   if (lwp->stop_expected)
704     {
705       int wstat;
706       /* Clear stop_expected, so that the SIGSTOP will be reported.  */
707       lwp->stop_expected = 0;
708       if (lwp->stopped)
709         linux_resume_one_lwp (lwp, 0, 0, NULL);
710       linux_wait_for_event (lwp->head.id, &wstat, __WALL);
711     }
712
713   /* Flush any pending changes to the process's registers.  */
714   regcache_invalidate_one ((struct inferior_list_entry *)
715                            get_lwp_thread (lwp));
716
717   /* Finally, let it resume.  */
718   ptrace (PTRACE_DETACH, lwpid_of (lwp), 0, 0);
719
720   delete_lwp (lwp);
721   return 0;
722 }
723
724 static int
725 any_thread_of (struct inferior_list_entry *entry, void *args)
726 {
727   int *pid_p = args;
728
729   if (ptid_get_pid (entry->id) == *pid_p)
730     return 1;
731
732   return 0;
733 }
734
735 static int
736 linux_detach (int pid)
737 {
738   struct process_info *process;
739
740   process = find_process_pid (pid);
741   if (process == NULL)
742     return -1;
743
744   current_inferior =
745     (struct thread_info *) find_inferior (&all_threads, any_thread_of, &pid);
746
747   delete_all_breakpoints ();
748   find_inferior (&all_threads, linux_detach_one_lwp, &pid);
749   linux_remove_process (process);
750   return 0;
751 }
752
753 static void
754 linux_join (int pid)
755 {
756   int status, ret;
757   struct process_info *process;
758
759   process = find_process_pid (pid);
760   if (process == NULL)
761     return;
762
763   do {
764     ret = my_waitpid (pid, &status, 0);
765     if (WIFEXITED (status) || WIFSIGNALED (status))
766       break;
767   } while (ret != -1 || errno != ECHILD);
768 }
769
770 /* Return nonzero if the given thread is still alive.  */
771 static int
772 linux_thread_alive (ptid_t ptid)
773 {
774   struct lwp_info *lwp = find_lwp_pid (ptid);
775
776   /* We assume we always know if a thread exits.  If a whole process
777      exited but we still haven't been able to report it to GDB, we'll
778      hold on to the last lwp of the dead process.  */
779   if (lwp != NULL)
780     return !lwp->dead;
781   else
782     return 0;
783 }
784
785 /* Return nonzero if this process stopped at a breakpoint which
786    no longer appears to be inserted.  Also adjust the PC
787    appropriately to resume where the breakpoint used to be.  */
788 static int
789 check_removed_breakpoint (struct lwp_info *event_child)
790 {
791   CORE_ADDR stop_pc;
792   struct thread_info *saved_inferior;
793
794   if (event_child->pending_is_breakpoint == 0)
795     return 0;
796
797   if (debug_threads)
798     fprintf (stderr, "Checking for breakpoint in lwp %ld.\n",
799              lwpid_of (event_child));
800
801   saved_inferior = current_inferior;
802   current_inferior = get_lwp_thread (event_child);
803
804   stop_pc = get_stop_pc ();
805
806   /* If the PC has changed since we stopped, then we shouldn't do
807      anything.  This happens if, for instance, GDB handled the
808      decr_pc_after_break subtraction itself.  */
809   if (stop_pc != event_child->pending_stop_pc)
810     {
811       if (debug_threads)
812         fprintf (stderr, "Ignoring, PC was changed.  Old PC was 0x%08llx\n",
813                  event_child->pending_stop_pc);
814
815       event_child->pending_is_breakpoint = 0;
816       current_inferior = saved_inferior;
817       return 0;
818     }
819
820   /* If the breakpoint is still there, we will report hitting it.  */
821   if ((*the_low_target.breakpoint_at) (stop_pc))
822     {
823       if (debug_threads)
824         fprintf (stderr, "Ignoring, breakpoint is still present.\n");
825       current_inferior = saved_inferior;
826       return 0;
827     }
828
829   if (debug_threads)
830     fprintf (stderr, "Removed breakpoint.\n");
831
832   /* For decr_pc_after_break targets, here is where we perform the
833      decrement.  We go immediately from this function to resuming,
834      and can not safely call get_stop_pc () again.  */
835   if (the_low_target.set_pc != NULL)
836     {
837       if (debug_threads)
838         fprintf (stderr, "Set pc to 0x%lx\n", (long) stop_pc);
839       (*the_low_target.set_pc) (stop_pc);
840     }
841
842   /* We consumed the pending SIGTRAP.  */
843   event_child->pending_is_breakpoint = 0;
844   event_child->status_pending_p = 0;
845   event_child->status_pending = 0;
846
847   current_inferior = saved_inferior;
848   return 1;
849 }
850
851 /* Return 1 if this lwp has an interesting status pending.  This
852    function may silently resume an inferior lwp.  */
853 static int
854 status_pending_p (struct inferior_list_entry *entry, void *arg)
855 {
856   struct lwp_info *lwp = (struct lwp_info *) entry;
857   ptid_t ptid = * (ptid_t *) arg;
858
859   /* Check if we're only interested in events from a specific process
860      or its lwps.  */
861   if (!ptid_equal (minus_one_ptid, ptid)
862       && ptid_get_pid (ptid) != ptid_get_pid (lwp->head.id))
863     return 0;
864
865   if (lwp->status_pending_p && !lwp->suspended)
866     if (check_removed_breakpoint (lwp))
867       {
868         /* This thread was stopped at a breakpoint, and the breakpoint
869            is now gone.  We were told to continue (or step...) all threads,
870            so GDB isn't trying to single-step past this breakpoint.
871            So instead of reporting the old SIGTRAP, pretend we got to
872            the breakpoint just after it was removed instead of just
873            before; resume the process.  */
874         linux_resume_one_lwp (lwp, 0, 0, NULL);
875         return 0;
876       }
877
878   return (lwp->status_pending_p && !lwp->suspended);
879 }
880
881 static int
882 same_lwp (struct inferior_list_entry *entry, void *data)
883 {
884   ptid_t ptid = *(ptid_t *) data;
885   int lwp;
886
887   if (ptid_get_lwp (ptid) != 0)
888     lwp = ptid_get_lwp (ptid);
889   else
890     lwp = ptid_get_pid (ptid);
891
892   if (ptid_get_lwp (entry->id) == lwp)
893     return 1;
894
895   return 0;
896 }
897
898 struct lwp_info *
899 find_lwp_pid (ptid_t ptid)
900 {
901   return (struct lwp_info*) find_inferior (&all_lwps, same_lwp, &ptid);
902 }
903
904 static struct lwp_info *
905 linux_wait_for_lwp (ptid_t ptid, int *wstatp, int options)
906 {
907   int ret;
908   int to_wait_for = -1;
909   struct lwp_info *child = NULL;
910
911   if (debug_threads)
912     fprintf (stderr, "linux_wait_for_lwp: %s\n", target_pid_to_str (ptid));
913
914   if (ptid_equal (ptid, minus_one_ptid))
915     to_wait_for = -1;                   /* any child */
916   else
917     to_wait_for = ptid_get_lwp (ptid);  /* this lwp only */
918
919   options |= __WALL;
920
921 retry:
922
923   ret = my_waitpid (to_wait_for, wstatp, options);
924   if (ret == 0 || (ret == -1 && errno == ECHILD && (options & WNOHANG)))
925     return NULL;
926   else if (ret == -1)
927     perror_with_name ("waitpid");
928
929   if (debug_threads
930       && (!WIFSTOPPED (*wstatp)
931           || (WSTOPSIG (*wstatp) != 32
932               && WSTOPSIG (*wstatp) != 33)))
933     fprintf (stderr, "Got an event from %d (%x)\n", ret, *wstatp);
934
935   child = find_lwp_pid (pid_to_ptid (ret));
936
937   /* If we didn't find a process, one of two things presumably happened:
938      - A process we started and then detached from has exited.  Ignore it.
939      - A process we are controlling has forked and the new child's stop
940      was reported to us by the kernel.  Save its PID.  */
941   if (child == NULL && WIFSTOPPED (*wstatp))
942     {
943       add_pid_to_list (&stopped_pids, ret);
944       goto retry;
945     }
946   else if (child == NULL)
947     goto retry;
948
949   child->stopped = 1;
950   child->pending_is_breakpoint = 0;
951
952   child->last_status = *wstatp;
953
954   /* Architecture-specific setup after inferior is running.
955      This needs to happen after we have attached to the inferior
956      and it is stopped for the first time, but before we access
957      any inferior registers.  */
958   if (new_inferior)
959     {
960       the_low_target.arch_setup ();
961 #ifdef HAVE_LINUX_REGSETS
962       memset (disabled_regsets, 0, num_regsets);
963 #endif
964       new_inferior = 0;
965     }
966
967   if (debug_threads
968       && WIFSTOPPED (*wstatp)
969       && the_low_target.get_pc != NULL)
970     {
971       struct thread_info *saved_inferior = current_inferior;
972       CORE_ADDR pc;
973
974       current_inferior = (struct thread_info *)
975         find_inferior_id (&all_threads, child->head.id);
976       pc = (*the_low_target.get_pc) ();
977       fprintf (stderr, "linux_wait_for_lwp: pc is 0x%lx\n", (long) pc);
978       current_inferior = saved_inferior;
979     }
980
981   return child;
982 }
983
984 /* Wait for an event from child PID.  If PID is -1, wait for any
985    child.  Store the stop status through the status pointer WSTAT.
986    OPTIONS is passed to the waitpid call.  Return 0 if no child stop
987    event was found and OPTIONS contains WNOHANG.  Return the PID of
988    the stopped child otherwise.  */
989
990 static int
991 linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
992 {
993   CORE_ADDR stop_pc;
994   struct lwp_info *event_child = NULL;
995   int bp_status;
996   struct lwp_info *requested_child = NULL;
997
998   /* Check for a lwp with a pending status.  */
999   /* It is possible that the user changed the pending task's registers since
1000      it stopped.  We correctly handle the change of PC if we hit a breakpoint
1001      (in check_removed_breakpoint); signals should be reported anyway.  */
1002
1003   if (ptid_equal (ptid, minus_one_ptid)
1004       || ptid_equal (pid_to_ptid (ptid_get_pid (ptid)), ptid))
1005     {
1006       event_child = (struct lwp_info *)
1007         find_inferior (&all_lwps, status_pending_p, &ptid);
1008       if (debug_threads && event_child)
1009         fprintf (stderr, "Got a pending child %ld\n", lwpid_of (event_child));
1010     }
1011   else
1012     {
1013       requested_child = find_lwp_pid (ptid);
1014       if (requested_child->status_pending_p
1015           && !check_removed_breakpoint (requested_child))
1016         event_child = requested_child;
1017     }
1018
1019   if (event_child != NULL)
1020     {
1021       if (debug_threads)
1022         fprintf (stderr, "Got an event from pending child %ld (%04x)\n",
1023                  lwpid_of (event_child), event_child->status_pending);
1024       *wstat = event_child->status_pending;
1025       event_child->status_pending_p = 0;
1026       event_child->status_pending = 0;
1027       current_inferior = get_lwp_thread (event_child);
1028       return lwpid_of (event_child);
1029     }
1030
1031   /* We only enter this loop if no process has a pending wait status.  Thus
1032      any action taken in response to a wait status inside this loop is
1033      responding as soon as we detect the status, not after any pending
1034      events.  */
1035   while (1)
1036     {
1037       event_child = linux_wait_for_lwp (ptid, wstat, options);
1038
1039       if ((options & WNOHANG) && event_child == NULL)
1040         return 0;
1041
1042       if (event_child == NULL)
1043         error ("event from unknown child");
1044
1045       current_inferior = get_lwp_thread (event_child);
1046
1047       /* Check for thread exit.  */
1048       if (! WIFSTOPPED (*wstat))
1049         {
1050           if (debug_threads)
1051             fprintf (stderr, "LWP %ld exiting\n", lwpid_of (event_child));
1052
1053           /* If the last thread is exiting, just return.  */
1054           if (last_thread_of_process_p (current_inferior))
1055             {
1056               if (debug_threads)
1057                 fprintf (stderr, "LWP %ld is last lwp of process\n",
1058                          lwpid_of (event_child));
1059               return lwpid_of (event_child);
1060             }
1061
1062           delete_lwp (event_child);
1063
1064           if (!non_stop)
1065             {
1066               current_inferior = (struct thread_info *) all_threads.head;
1067               if (debug_threads)
1068                 fprintf (stderr, "Current inferior is now %ld\n",
1069                          lwpid_of (get_thread_lwp (current_inferior)));
1070             }
1071           else
1072             {
1073               current_inferior = NULL;
1074               if (debug_threads)
1075                 fprintf (stderr, "Current inferior is now <NULL>\n");
1076             }
1077
1078           /* If we were waiting for this particular child to do something...
1079              well, it did something.  */
1080           if (requested_child != NULL)
1081             return lwpid_of (event_child);
1082
1083           /* Wait for a more interesting event.  */
1084           continue;
1085         }
1086
1087       if (event_child->must_set_ptrace_flags)
1088         {
1089           ptrace (PTRACE_SETOPTIONS, lwpid_of (event_child),
1090                   0, PTRACE_O_TRACECLONE);
1091           event_child->must_set_ptrace_flags = 0;
1092         }
1093
1094       if (WIFSTOPPED (*wstat)
1095           && WSTOPSIG (*wstat) == SIGSTOP
1096           && event_child->stop_expected)
1097         {
1098           if (debug_threads)
1099             fprintf (stderr, "Expected stop.\n");
1100           event_child->stop_expected = 0;
1101           linux_resume_one_lwp (event_child, event_child->stepping, 0, NULL);
1102           continue;
1103         }
1104
1105       if (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) == SIGTRAP
1106           && *wstat >> 16 != 0)
1107         {
1108           handle_extended_wait (event_child, *wstat);
1109           continue;
1110         }
1111
1112       /* If GDB is not interested in this signal, don't stop other
1113          threads, and don't report it to GDB.  Just resume the
1114          inferior right away.  We do this for threading-related
1115          signals as well as any that GDB specifically requested we
1116          ignore.  But never ignore SIGSTOP if we sent it ourselves,
1117          and do not ignore signals when stepping - they may require
1118          special handling to skip the signal handler.  */
1119       /* FIXME drow/2002-06-09: Get signal numbers from the inferior's
1120          thread library?  */
1121       if (WIFSTOPPED (*wstat)
1122           && !event_child->stepping
1123           && (
1124 #ifdef USE_THREAD_DB
1125               (current_process ()->private->thread_db_active
1126                && (WSTOPSIG (*wstat) == __SIGRTMIN
1127                    || WSTOPSIG (*wstat) == __SIGRTMIN + 1))
1128               ||
1129 #endif
1130               (pass_signals[target_signal_from_host (WSTOPSIG (*wstat))]
1131                && (WSTOPSIG (*wstat) != SIGSTOP || !stopping_threads))))
1132         {
1133           siginfo_t info, *info_p;
1134
1135           if (debug_threads)
1136             fprintf (stderr, "Ignored signal %d for LWP %ld.\n",
1137                      WSTOPSIG (*wstat), lwpid_of (event_child));
1138
1139           if (ptrace (PTRACE_GETSIGINFO, lwpid_of (event_child), 0, &info) == 0)
1140             info_p = &info;
1141           else
1142             info_p = NULL;
1143           linux_resume_one_lwp (event_child,
1144                                 event_child->stepping,
1145                                 WSTOPSIG (*wstat), info_p);
1146           continue;
1147         }
1148
1149       /* If this event was not handled above, and is not a SIGTRAP, report
1150          it.  */
1151       if (!WIFSTOPPED (*wstat) || WSTOPSIG (*wstat) != SIGTRAP)
1152         return lwpid_of (event_child);
1153
1154       /* If this target does not support breakpoints, we simply report the
1155          SIGTRAP; it's of no concern to us.  */
1156       if (the_low_target.get_pc == NULL)
1157         return lwpid_of (event_child);
1158
1159       stop_pc = get_stop_pc ();
1160
1161       /* bp_reinsert will only be set if we were single-stepping.
1162          Notice that we will resume the process after hitting
1163          a gdbserver breakpoint; single-stepping to/over one
1164          is not supported (yet).  */
1165       if (event_child->bp_reinsert != 0)
1166         {
1167           if (debug_threads)
1168             fprintf (stderr, "Reinserted breakpoint.\n");
1169           reinsert_breakpoint (event_child->bp_reinsert);
1170           event_child->bp_reinsert = 0;
1171
1172           /* Clear the single-stepping flag and SIGTRAP as we resume.  */
1173           linux_resume_one_lwp (event_child, 0, 0, NULL);
1174           continue;
1175         }
1176
1177       bp_status = check_breakpoints (stop_pc);
1178
1179       if (bp_status != 0)
1180         {
1181           if (debug_threads)
1182             fprintf (stderr, "Hit a gdbserver breakpoint.\n");
1183
1184           /* We hit one of our own breakpoints.  We mark it as a pending
1185              breakpoint, so that check_removed_breakpoint () will do the PC
1186              adjustment for us at the appropriate time.  */
1187           event_child->pending_is_breakpoint = 1;
1188           event_child->pending_stop_pc = stop_pc;
1189
1190           /* We may need to put the breakpoint back.  We continue in the event
1191              loop instead of simply replacing the breakpoint right away,
1192              in order to not lose signals sent to the thread that hit the
1193              breakpoint.  Unfortunately this increases the window where another
1194              thread could sneak past the removed breakpoint.  For the current
1195              use of server-side breakpoints (thread creation) this is
1196              acceptable; but it needs to be considered before this breakpoint
1197              mechanism can be used in more general ways.  For some breakpoints
1198              it may be necessary to stop all other threads, but that should
1199              be avoided where possible.
1200
1201              If breakpoint_reinsert_addr is NULL, that means that we can
1202              use PTRACE_SINGLESTEP on this platform.  Uninsert the breakpoint,
1203              mark it for reinsertion, and single-step.
1204
1205              Otherwise, call the target function to figure out where we need
1206              our temporary breakpoint, create it, and continue executing this
1207              process.  */
1208
1209           /* NOTE: we're lifting breakpoints in non-stop mode.  This
1210              is currently only used for thread event breakpoints, so
1211              it isn't that bad as long as we have PTRACE_EVENT_CLONE
1212              events.  */
1213           if (bp_status == 2)
1214             /* No need to reinsert.  */
1215             linux_resume_one_lwp (event_child, 0, 0, NULL);
1216           else if (the_low_target.breakpoint_reinsert_addr == NULL)
1217             {
1218               event_child->bp_reinsert = stop_pc;
1219               uninsert_breakpoint (stop_pc);
1220               linux_resume_one_lwp (event_child, 1, 0, NULL);
1221             }
1222           else
1223             {
1224               reinsert_breakpoint_by_bp
1225                 (stop_pc, (*the_low_target.breakpoint_reinsert_addr) ());
1226               linux_resume_one_lwp (event_child, 0, 0, NULL);
1227             }
1228
1229           continue;
1230         }
1231
1232       if (debug_threads)
1233         fprintf (stderr, "Hit a non-gdbserver breakpoint.\n");
1234
1235       /* If we were single-stepping, we definitely want to report the
1236          SIGTRAP.  Although the single-step operation has completed,
1237          do not clear clear the stepping flag yet; we need to check it
1238          in wait_for_sigstop.  */
1239       if (event_child->stepping)
1240         return lwpid_of (event_child);
1241
1242       /* A SIGTRAP that we can't explain.  It may have been a breakpoint.
1243          Check if it is a breakpoint, and if so mark the process information
1244          accordingly.  This will handle both the necessary fiddling with the
1245          PC on decr_pc_after_break targets and suppressing extra threads
1246          hitting a breakpoint if two hit it at once and then GDB removes it
1247          after the first is reported.  Arguably it would be better to report
1248          multiple threads hitting breakpoints simultaneously, but the current
1249          remote protocol does not allow this.  */
1250       if ((*the_low_target.breakpoint_at) (stop_pc))
1251         {
1252           event_child->pending_is_breakpoint = 1;
1253           event_child->pending_stop_pc = stop_pc;
1254         }
1255
1256       return lwpid_of (event_child);
1257     }
1258
1259   /* NOTREACHED */
1260   return 0;
1261 }
1262
1263 static int
1264 linux_wait_for_event (ptid_t ptid, int *wstat, int options)
1265 {
1266   ptid_t wait_ptid;
1267
1268   if (ptid_is_pid (ptid))
1269     {
1270       /* A request to wait for a specific tgid.  This is not possible
1271          with waitpid, so instead, we wait for any child, and leave
1272          children we're not interested in right now with a pending
1273          status to report later.  */
1274       wait_ptid = minus_one_ptid;
1275     }
1276   else
1277     wait_ptid = ptid;
1278
1279   while (1)
1280     {
1281       int event_pid;
1282
1283       event_pid = linux_wait_for_event_1 (wait_ptid, wstat, options);
1284
1285       if (event_pid > 0
1286           && ptid_is_pid (ptid) && ptid_get_pid (ptid) != event_pid)
1287         {
1288           struct lwp_info *event_child = find_lwp_pid (pid_to_ptid (event_pid));
1289
1290           if (! WIFSTOPPED (*wstat))
1291             mark_lwp_dead (event_child, *wstat);
1292           else
1293             {
1294               event_child->status_pending_p = 1;
1295               event_child->status_pending = *wstat;
1296             }
1297         }
1298       else
1299         return event_pid;
1300     }
1301 }
1302
1303 /* Wait for process, returns status.  */
1304
1305 static ptid_t
1306 linux_wait_1 (ptid_t ptid,
1307               struct target_waitstatus *ourstatus, int target_options)
1308 {
1309   int w;
1310   struct thread_info *thread = NULL;
1311   struct lwp_info *lwp = NULL;
1312   int options;
1313   int pid;
1314
1315   /* Translate generic target options into linux options.  */
1316   options = __WALL;
1317   if (target_options & TARGET_WNOHANG)
1318     options |= WNOHANG;
1319
1320 retry:
1321   ourstatus->kind = TARGET_WAITKIND_IGNORE;
1322
1323   /* If we were only supposed to resume one thread, only wait for
1324      that thread - if it's still alive.  If it died, however - which
1325      can happen if we're coming from the thread death case below -
1326      then we need to make sure we restart the other threads.  We could
1327      pick a thread at random or restart all; restarting all is less
1328      arbitrary.  */
1329   if (!non_stop
1330       && !ptid_equal (cont_thread, null_ptid)
1331       && !ptid_equal (cont_thread, minus_one_ptid))
1332     {
1333       thread = (struct thread_info *) find_inferior_id (&all_threads,
1334                                                         cont_thread);
1335
1336       /* No stepping, no signal - unless one is pending already, of course.  */
1337       if (thread == NULL)
1338         {
1339           struct thread_resume resume_info;
1340           resume_info.thread = minus_one_ptid;
1341           resume_info.kind = resume_continue;
1342           resume_info.sig = 0;
1343           linux_resume (&resume_info, 1);
1344         }
1345       else
1346         ptid = cont_thread;
1347     }
1348
1349   pid = linux_wait_for_event (ptid, &w, options);
1350   if (pid == 0) /* only if TARGET_WNOHANG */
1351     return null_ptid;
1352
1353   lwp = get_thread_lwp (current_inferior);
1354
1355   /* If we are waiting for a particular child, and it exited,
1356      linux_wait_for_event will return its exit status.  Similarly if
1357      the last child exited.  If this is not the last child, however,
1358      do not report it as exited until there is a 'thread exited' response
1359      available in the remote protocol.  Instead, just wait for another event.
1360      This should be safe, because if the thread crashed we will already
1361      have reported the termination signal to GDB; that should stop any
1362      in-progress stepping operations, etc.
1363
1364      Report the exit status of the last thread to exit.  This matches
1365      LinuxThreads' behavior.  */
1366
1367   if (last_thread_of_process_p (current_inferior))
1368     {
1369       if (WIFEXITED (w) || WIFSIGNALED (w))
1370         {
1371           int pid = pid_of (lwp);
1372           struct process_info *process = find_process_pid (pid);
1373
1374           delete_lwp (lwp);
1375           linux_remove_process (process);
1376
1377           current_inferior = NULL;
1378
1379           if (WIFEXITED (w))
1380             {
1381               ourstatus->kind = TARGET_WAITKIND_EXITED;
1382               ourstatus->value.integer = WEXITSTATUS (w);
1383
1384               if (debug_threads)
1385                 fprintf (stderr, "\nChild exited with retcode = %x \n", WEXITSTATUS (w));
1386             }
1387           else
1388             {
1389               ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1390               ourstatus->value.sig = target_signal_from_host (WTERMSIG (w));
1391
1392               if (debug_threads)
1393                 fprintf (stderr, "\nChild terminated with signal = %x \n", WTERMSIG (w));
1394
1395             }
1396
1397           return pid_to_ptid (pid);
1398         }
1399     }
1400   else
1401     {
1402       if (!WIFSTOPPED (w))
1403         goto retry;
1404     }
1405
1406   /* In all-stop, stop all threads.  Be careful to only do this if
1407      we're about to report an event to GDB.  */
1408   if (!non_stop)
1409     stop_all_lwps ();
1410
1411   ourstatus->kind = TARGET_WAITKIND_STOPPED;
1412
1413   if (lwp->suspended && WSTOPSIG (w) == SIGSTOP)
1414     {
1415       /* A thread that has been requested to stop by GDB with vCont;t,
1416          and it stopped cleanly, so report as SIG0.  The use of
1417          SIGSTOP is an implementation detail.  */
1418       ourstatus->value.sig = TARGET_SIGNAL_0;
1419     }
1420   else if (lwp->suspended && WSTOPSIG (w) != SIGSTOP)
1421     {
1422       /* A thread that has been requested to stop by GDB with vCont;t,
1423          but, it stopped for other reasons.  Set stop_expected so the
1424          pending SIGSTOP is ignored and the LWP is resumed.  */
1425       lwp->stop_expected = 1;
1426       ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
1427     }
1428   else
1429     {
1430       ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
1431     }
1432
1433   if (debug_threads)
1434     fprintf (stderr, "linux_wait ret = %s, %d, %d\n",
1435              target_pid_to_str (lwp->head.id),
1436              ourstatus->kind,
1437              ourstatus->value.sig);
1438
1439   return lwp->head.id;
1440 }
1441
1442 /* Get rid of any pending event in the pipe.  */
1443 static void
1444 async_file_flush (void)
1445 {
1446   int ret;
1447   char buf;
1448
1449   do
1450     ret = read (linux_event_pipe[0], &buf, 1);
1451   while (ret >= 0 || (ret == -1 && errno == EINTR));
1452 }
1453
1454 /* Put something in the pipe, so the event loop wakes up.  */
1455 static void
1456 async_file_mark (void)
1457 {
1458   int ret;
1459
1460   async_file_flush ();
1461
1462   do
1463     ret = write (linux_event_pipe[1], "+", 1);
1464   while (ret == 0 || (ret == -1 && errno == EINTR));
1465
1466   /* Ignore EAGAIN.  If the pipe is full, the event loop will already
1467      be awakened anyway.  */
1468 }
1469
1470 static ptid_t
1471 linux_wait (ptid_t ptid,
1472             struct target_waitstatus *ourstatus, int target_options)
1473 {
1474   ptid_t event_ptid;
1475
1476   if (debug_threads)
1477     fprintf (stderr, "linux_wait: [%s]\n", target_pid_to_str (ptid));
1478
1479   /* Flush the async file first.  */
1480   if (target_is_async_p ())
1481     async_file_flush ();
1482
1483   event_ptid = linux_wait_1 (ptid, ourstatus, target_options);
1484
1485   /* If at least one stop was reported, there may be more.  A single
1486      SIGCHLD can signal more than one child stop.  */
1487   if (target_is_async_p ()
1488       && (target_options & TARGET_WNOHANG) != 0
1489       && !ptid_equal (event_ptid, null_ptid))
1490     async_file_mark ();
1491
1492   return event_ptid;
1493 }
1494
1495 /* Send a signal to an LWP.  For LinuxThreads, kill is enough; however, if
1496    thread groups are in use, we need to use tkill.  */
1497
1498 static int
1499 kill_lwp (unsigned long lwpid, int signo)
1500 {
1501   static int tkill_failed;
1502
1503   errno = 0;
1504
1505 #ifdef SYS_tkill
1506   if (!tkill_failed)
1507     {
1508       int ret = syscall (SYS_tkill, lwpid, signo);
1509       if (errno != ENOSYS)
1510         return ret;
1511       errno = 0;
1512       tkill_failed = 1;
1513     }
1514 #endif
1515
1516   return kill (lwpid, signo);
1517 }
1518
1519 static void
1520 send_sigstop (struct inferior_list_entry *entry)
1521 {
1522   struct lwp_info *lwp = (struct lwp_info *) entry;
1523   int pid;
1524
1525   if (lwp->stopped)
1526     return;
1527
1528   pid = lwpid_of (lwp);
1529
1530   /* If we already have a pending stop signal for this process, don't
1531      send another.  */
1532   if (lwp->stop_expected)
1533     {
1534       if (debug_threads)
1535         fprintf (stderr, "Have pending sigstop for lwp %d\n", pid);
1536
1537       /* We clear the stop_expected flag so that wait_for_sigstop
1538          will receive the SIGSTOP event (instead of silently resuming and
1539          waiting again).  It'll be reset below.  */
1540       lwp->stop_expected = 0;
1541       return;
1542     }
1543
1544   if (debug_threads)
1545     fprintf (stderr, "Sending sigstop to lwp %d\n", pid);
1546
1547   kill_lwp (pid, SIGSTOP);
1548 }
1549
1550 static void
1551 mark_lwp_dead (struct lwp_info *lwp, int wstat)
1552 {
1553   /* It's dead, really.  */
1554   lwp->dead = 1;
1555
1556   /* Store the exit status for later.  */
1557   lwp->status_pending_p = 1;
1558   lwp->status_pending = wstat;
1559
1560   /* So that check_removed_breakpoint doesn't try to figure out if
1561      this is stopped at a breakpoint.  */
1562   lwp->pending_is_breakpoint = 0;
1563
1564   /* Prevent trying to stop it.  */
1565   lwp->stopped = 1;
1566
1567   /* No further stops are expected from a dead lwp.  */
1568   lwp->stop_expected = 0;
1569 }
1570
1571 static void
1572 wait_for_sigstop (struct inferior_list_entry *entry)
1573 {
1574   struct lwp_info *lwp = (struct lwp_info *) entry;
1575   struct thread_info *saved_inferior;
1576   int wstat;
1577   ptid_t saved_tid;
1578   ptid_t ptid;
1579
1580   if (lwp->stopped)
1581     return;
1582
1583   saved_inferior = current_inferior;
1584   if (saved_inferior != NULL)
1585     saved_tid = ((struct inferior_list_entry *) saved_inferior)->id;
1586   else
1587     saved_tid = null_ptid; /* avoid bogus unused warning */
1588
1589   ptid = lwp->head.id;
1590
1591   linux_wait_for_event (ptid, &wstat, __WALL);
1592
1593   /* If we stopped with a non-SIGSTOP signal, save it for later
1594      and record the pending SIGSTOP.  If the process exited, just
1595      return.  */
1596   if (WIFSTOPPED (wstat)
1597       && WSTOPSIG (wstat) != SIGSTOP)
1598     {
1599       if (debug_threads)
1600         fprintf (stderr, "LWP %ld stopped with non-sigstop status %06x\n",
1601                  lwpid_of (lwp), wstat);
1602
1603       /* Do not leave a pending single-step finish to be reported to
1604          the client.  The client will give us a new action for this
1605          thread, possibly a continue request --- otherwise, the client
1606          would consider this pending SIGTRAP reported later a spurious
1607          signal.  */
1608       if (WSTOPSIG (wstat) == SIGTRAP
1609           && lwp->stepping
1610           && !linux_stopped_by_watchpoint ())
1611         {
1612           if (debug_threads)
1613             fprintf (stderr, "  single-step SIGTRAP ignored\n");
1614         }
1615       else
1616         {
1617           lwp->status_pending_p = 1;
1618           lwp->status_pending = wstat;
1619         }
1620       lwp->stop_expected = 1;
1621     }
1622   else if (!WIFSTOPPED (wstat))
1623     {
1624       if (debug_threads)
1625         fprintf (stderr, "Process %ld exited while stopping LWPs\n",
1626                  lwpid_of (lwp));
1627
1628       /* Leave this status pending for the next time we're able to
1629          report it.  In the mean time, we'll report this lwp as dead
1630          to GDB, so GDB doesn't try to read registers and memory from
1631          it.  */
1632       mark_lwp_dead (lwp, wstat);
1633     }
1634
1635   if (saved_inferior == NULL || linux_thread_alive (saved_tid))
1636     current_inferior = saved_inferior;
1637   else
1638     {
1639       if (debug_threads)
1640         fprintf (stderr, "Previously current thread died.\n");
1641
1642       if (non_stop)
1643         {
1644           /* We can't change the current inferior behind GDB's back,
1645              otherwise, a subsequent command may apply to the wrong
1646              process.  */
1647           current_inferior = NULL;
1648         }
1649       else
1650         {
1651           /* Set a valid thread as current.  */
1652           set_desired_inferior (0);
1653         }
1654     }
1655 }
1656
1657 static void
1658 stop_all_lwps (void)
1659 {
1660   stopping_threads = 1;
1661   for_each_inferior (&all_lwps, send_sigstop);
1662   for_each_inferior (&all_lwps, wait_for_sigstop);
1663   stopping_threads = 0;
1664 }
1665
1666 /* Resume execution of the inferior process.
1667    If STEP is nonzero, single-step it.
1668    If SIGNAL is nonzero, give it that signal.  */
1669
1670 static void
1671 linux_resume_one_lwp (struct lwp_info *lwp,
1672                       int step, int signal, siginfo_t *info)
1673 {
1674   struct thread_info *saved_inferior;
1675
1676   if (lwp->stopped == 0)
1677     return;
1678
1679   /* If we have pending signals or status, and a new signal, enqueue the
1680      signal.  Also enqueue the signal if we are waiting to reinsert a
1681      breakpoint; it will be picked up again below.  */
1682   if (signal != 0
1683       && (lwp->status_pending_p || lwp->pending_signals != NULL
1684           || lwp->bp_reinsert != 0))
1685     {
1686       struct pending_signals *p_sig;
1687       p_sig = xmalloc (sizeof (*p_sig));
1688       p_sig->prev = lwp->pending_signals;
1689       p_sig->signal = signal;
1690       if (info == NULL)
1691         memset (&p_sig->info, 0, sizeof (siginfo_t));
1692       else
1693         memcpy (&p_sig->info, info, sizeof (siginfo_t));
1694       lwp->pending_signals = p_sig;
1695     }
1696
1697   if (lwp->status_pending_p && !check_removed_breakpoint (lwp))
1698     return;
1699
1700   saved_inferior = current_inferior;
1701   current_inferior = get_lwp_thread (lwp);
1702
1703   if (debug_threads)
1704     fprintf (stderr, "Resuming lwp %ld (%s, signal %d, stop %s)\n",
1705              lwpid_of (lwp), step ? "step" : "continue", signal,
1706              lwp->stop_expected ? "expected" : "not expected");
1707
1708   /* This bit needs some thinking about.  If we get a signal that
1709      we must report while a single-step reinsert is still pending,
1710      we often end up resuming the thread.  It might be better to
1711      (ew) allow a stack of pending events; then we could be sure that
1712      the reinsert happened right away and not lose any signals.
1713
1714      Making this stack would also shrink the window in which breakpoints are
1715      uninserted (see comment in linux_wait_for_lwp) but not enough for
1716      complete correctness, so it won't solve that problem.  It may be
1717      worthwhile just to solve this one, however.  */
1718   if (lwp->bp_reinsert != 0)
1719     {
1720       if (debug_threads)
1721         fprintf (stderr, "  pending reinsert at %08lx", (long)lwp->bp_reinsert);
1722       if (step == 0)
1723         fprintf (stderr, "BAD - reinserting but not stepping.\n");
1724       step = 1;
1725
1726       /* Postpone any pending signal.  It was enqueued above.  */
1727       signal = 0;
1728     }
1729
1730   check_removed_breakpoint (lwp);
1731
1732   if (debug_threads && the_low_target.get_pc != NULL)
1733     {
1734       CORE_ADDR pc = (*the_low_target.get_pc) ();
1735       fprintf (stderr, "  resuming from pc 0x%lx\n", (long) pc);
1736     }
1737
1738   /* If we have pending signals, consume one unless we are trying to reinsert
1739      a breakpoint.  */
1740   if (lwp->pending_signals != NULL && lwp->bp_reinsert == 0)
1741     {
1742       struct pending_signals **p_sig;
1743
1744       p_sig = &lwp->pending_signals;
1745       while ((*p_sig)->prev != NULL)
1746         p_sig = &(*p_sig)->prev;
1747
1748       signal = (*p_sig)->signal;
1749       if ((*p_sig)->info.si_signo != 0)
1750         ptrace (PTRACE_SETSIGINFO, lwpid_of (lwp), 0, &(*p_sig)->info);
1751
1752       free (*p_sig);
1753       *p_sig = NULL;
1754     }
1755
1756   if (the_low_target.prepare_to_resume != NULL)
1757     the_low_target.prepare_to_resume (lwp);
1758
1759   regcache_invalidate_one ((struct inferior_list_entry *)
1760                            get_lwp_thread (lwp));
1761   errno = 0;
1762   lwp->stopped = 0;
1763   lwp->stepping = step;
1764   ptrace (step ? PTRACE_SINGLESTEP : PTRACE_CONT, lwpid_of (lwp), 0, signal);
1765
1766   current_inferior = saved_inferior;
1767   if (errno)
1768     {
1769       /* ESRCH from ptrace either means that the thread was already
1770          running (an error) or that it is gone (a race condition).  If
1771          it's gone, we will get a notification the next time we wait,
1772          so we can ignore the error.  We could differentiate these
1773          two, but it's tricky without waiting; the thread still exists
1774          as a zombie, so sending it signal 0 would succeed.  So just
1775          ignore ESRCH.  */
1776       if (errno == ESRCH)
1777         return;
1778
1779       perror_with_name ("ptrace");
1780     }
1781 }
1782
1783 struct thread_resume_array
1784 {
1785   struct thread_resume *resume;
1786   size_t n;
1787 };
1788
1789 /* This function is called once per thread.  We look up the thread
1790    in RESUME_PTR, and mark the thread with a pointer to the appropriate
1791    resume request.
1792
1793    This algorithm is O(threads * resume elements), but resume elements
1794    is small (and will remain small at least until GDB supports thread
1795    suspension).  */
1796 static int
1797 linux_set_resume_request (struct inferior_list_entry *entry, void *arg)
1798 {
1799   struct lwp_info *lwp;
1800   struct thread_info *thread;
1801   int ndx;
1802   struct thread_resume_array *r;
1803
1804   thread = (struct thread_info *) entry;
1805   lwp = get_thread_lwp (thread);
1806   r = arg;
1807
1808   for (ndx = 0; ndx < r->n; ndx++)
1809     {
1810       ptid_t ptid = r->resume[ndx].thread;
1811       if (ptid_equal (ptid, minus_one_ptid)
1812           || ptid_equal (ptid, entry->id)
1813           || (ptid_is_pid (ptid)
1814               && (ptid_get_pid (ptid) == pid_of (lwp)))
1815           || (ptid_get_lwp (ptid) == -1
1816               && (ptid_get_pid (ptid) == pid_of (lwp))))
1817         {
1818           lwp->resume = &r->resume[ndx];
1819           return 0;
1820         }
1821     }
1822
1823   /* No resume action for this thread.  */
1824   lwp->resume = NULL;
1825
1826   return 0;
1827 }
1828
1829
1830 /* Set *FLAG_P if this lwp has an interesting status pending.  */
1831 static int
1832 resume_status_pending_p (struct inferior_list_entry *entry, void *flag_p)
1833 {
1834   struct lwp_info *lwp = (struct lwp_info *) entry;
1835
1836   /* LWPs which will not be resumed are not interesting, because
1837      we might not wait for them next time through linux_wait.  */
1838   if (lwp->resume == NULL)
1839     return 0;
1840
1841   /* If this thread has a removed breakpoint, we won't have any
1842      events to report later, so check now.  check_removed_breakpoint
1843      may clear status_pending_p.  We avoid calling check_removed_breakpoint
1844      for any thread that we are not otherwise going to resume - this
1845      lets us preserve stopped status when two threads hit a breakpoint.
1846      GDB removes the breakpoint to single-step a particular thread
1847      past it, then re-inserts it and resumes all threads.  We want
1848      to report the second thread without resuming it in the interim.  */
1849   if (lwp->status_pending_p)
1850     check_removed_breakpoint (lwp);
1851
1852   if (lwp->status_pending_p)
1853     * (int *) flag_p = 1;
1854
1855   return 0;
1856 }
1857
1858 /* This function is called once per thread.  We check the thread's resume
1859    request, which will tell us whether to resume, step, or leave the thread
1860    stopped; and what signal, if any, it should be sent.
1861
1862    For threads which we aren't explicitly told otherwise, we preserve
1863    the stepping flag; this is used for stepping over gdbserver-placed
1864    breakpoints.
1865
1866    If pending_flags was set in any thread, we queue any needed
1867    signals, since we won't actually resume.  We already have a pending
1868    event to report, so we don't need to preserve any step requests;
1869    they should be re-issued if necessary.  */
1870
1871 static int
1872 linux_resume_one_thread (struct inferior_list_entry *entry, void *arg)
1873 {
1874   struct lwp_info *lwp;
1875   struct thread_info *thread;
1876   int step;
1877   int pending_flag = * (int *) arg;
1878
1879   thread = (struct thread_info *) entry;
1880   lwp = get_thread_lwp (thread);
1881
1882   if (lwp->resume == NULL)
1883     return 0;
1884
1885   if (lwp->resume->kind == resume_stop)
1886     {
1887       if (debug_threads)
1888         fprintf (stderr, "suspending LWP %ld\n", lwpid_of (lwp));
1889
1890       if (!lwp->stopped)
1891         {
1892           if (debug_threads)
1893             fprintf (stderr, "running -> suspending LWP %ld\n", lwpid_of (lwp));
1894
1895           lwp->suspended = 1;
1896           send_sigstop (&lwp->head);
1897         }
1898       else
1899         {
1900           if (debug_threads)
1901             {
1902               if (lwp->suspended)
1903                 fprintf (stderr, "already stopped/suspended LWP %ld\n",
1904                          lwpid_of (lwp));
1905               else
1906                 fprintf (stderr, "already stopped/not suspended LWP %ld\n",
1907                          lwpid_of (lwp));
1908             }
1909
1910           /* Make sure we leave the LWP suspended, so we don't try to
1911              resume it without GDB telling us to.  FIXME: The LWP may
1912              have been stopped in an internal event that was not meant
1913              to be notified back to GDB (e.g., gdbserver breakpoint),
1914              so we should be reporting a stop event in that case
1915              too.  */
1916           lwp->suspended = 1;
1917         }
1918
1919       /* For stop requests, we're done.  */
1920       lwp->resume = NULL;
1921       return 0;
1922     }
1923   else
1924     lwp->suspended = 0;
1925
1926   /* If this thread which is about to be resumed has a pending status,
1927      then don't resume any threads - we can just report the pending
1928      status.  Make sure to queue any signals that would otherwise be
1929      sent.  In all-stop mode, we do this decision based on if *any*
1930      thread has a pending status.  */
1931   if (non_stop)
1932     resume_status_pending_p (&lwp->head, &pending_flag);
1933
1934   if (!pending_flag)
1935     {
1936       if (debug_threads)
1937         fprintf (stderr, "resuming LWP %ld\n", lwpid_of (lwp));
1938
1939       if (ptid_equal (lwp->resume->thread, minus_one_ptid)
1940           && lwp->stepping
1941           && lwp->pending_is_breakpoint)
1942         step = 1;
1943       else
1944         step = (lwp->resume->kind == resume_step);
1945
1946       linux_resume_one_lwp (lwp, step, lwp->resume->sig, NULL);
1947     }
1948   else
1949     {
1950       if (debug_threads)
1951         fprintf (stderr, "leaving LWP %ld stopped\n", lwpid_of (lwp));
1952
1953       /* If we have a new signal, enqueue the signal.  */
1954       if (lwp->resume->sig != 0)
1955         {
1956           struct pending_signals *p_sig;
1957           p_sig = xmalloc (sizeof (*p_sig));
1958           p_sig->prev = lwp->pending_signals;
1959           p_sig->signal = lwp->resume->sig;
1960           memset (&p_sig->info, 0, sizeof (siginfo_t));
1961
1962           /* If this is the same signal we were previously stopped by,
1963              make sure to queue its siginfo.  We can ignore the return
1964              value of ptrace; if it fails, we'll skip
1965              PTRACE_SETSIGINFO.  */
1966           if (WIFSTOPPED (lwp->last_status)
1967               && WSTOPSIG (lwp->last_status) == lwp->resume->sig)
1968             ptrace (PTRACE_GETSIGINFO, lwpid_of (lwp), 0, &p_sig->info);
1969
1970           lwp->pending_signals = p_sig;
1971         }
1972     }
1973
1974   lwp->resume = NULL;
1975   return 0;
1976 }
1977
1978 static void
1979 linux_resume (struct thread_resume *resume_info, size_t n)
1980 {
1981   int pending_flag;
1982   struct thread_resume_array array = { resume_info, n };
1983
1984   find_inferior (&all_threads, linux_set_resume_request, &array);
1985
1986   /* If there is a thread which would otherwise be resumed, which
1987      has a pending status, then don't resume any threads - we can just
1988      report the pending status.  Make sure to queue any signals
1989      that would otherwise be sent.  In non-stop mode, we'll apply this
1990      logic to each thread individually.  */
1991   pending_flag = 0;
1992   if (!non_stop)
1993     find_inferior (&all_lwps, resume_status_pending_p, &pending_flag);
1994
1995   if (debug_threads)
1996     {
1997       if (pending_flag)
1998         fprintf (stderr, "Not resuming, pending status\n");
1999       else
2000         fprintf (stderr, "Resuming, no pending status\n");
2001     }
2002
2003   find_inferior (&all_threads, linux_resume_one_thread, &pending_flag);
2004 }
2005
2006 #ifdef HAVE_LINUX_USRREGS
2007
2008 int
2009 register_addr (int regnum)
2010 {
2011   int addr;
2012
2013   if (regnum < 0 || regnum >= the_low_target.num_regs)
2014     error ("Invalid register number %d.", regnum);
2015
2016   addr = the_low_target.regmap[regnum];
2017
2018   return addr;
2019 }
2020
2021 /* Fetch one register.  */
2022 static void
2023 fetch_register (int regno)
2024 {
2025   CORE_ADDR regaddr;
2026   int i, size;
2027   char *buf;
2028   int pid;
2029
2030   if (regno >= the_low_target.num_regs)
2031     return;
2032   if ((*the_low_target.cannot_fetch_register) (regno))
2033     return;
2034
2035   regaddr = register_addr (regno);
2036   if (regaddr == -1)
2037     return;
2038
2039   pid = lwpid_of (get_thread_lwp (current_inferior));
2040   size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
2041           & - sizeof (PTRACE_XFER_TYPE));
2042   buf = alloca (size);
2043   for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
2044     {
2045       errno = 0;
2046       *(PTRACE_XFER_TYPE *) (buf + i) =
2047         ptrace (PTRACE_PEEKUSER, pid, (PTRACE_ARG3_TYPE) regaddr, 0);
2048       regaddr += sizeof (PTRACE_XFER_TYPE);
2049       if (errno != 0)
2050         {
2051           /* Warning, not error, in case we are attached; sometimes the
2052              kernel doesn't let us at the registers.  */
2053           char *err = strerror (errno);
2054           char *msg = alloca (strlen (err) + 128);
2055           sprintf (msg, "reading register %d: %s", regno, err);
2056           error (msg);
2057           goto error_exit;
2058         }
2059     }
2060
2061   if (the_low_target.supply_ptrace_register)
2062     the_low_target.supply_ptrace_register (regno, buf);
2063   else
2064     supply_register (regno, buf);
2065
2066 error_exit:;
2067 }
2068
2069 /* Fetch all registers, or just one, from the child process.  */
2070 static void
2071 usr_fetch_inferior_registers (int regno)
2072 {
2073   if (regno == -1)
2074     for (regno = 0; regno < the_low_target.num_regs; regno++)
2075       fetch_register (regno);
2076   else
2077     fetch_register (regno);
2078 }
2079
2080 /* Store our register values back into the inferior.
2081    If REGNO is -1, do this for all registers.
2082    Otherwise, REGNO specifies which register (so we can save time).  */
2083 static void
2084 usr_store_inferior_registers (int regno)
2085 {
2086   CORE_ADDR regaddr;
2087   int i, size;
2088   char *buf;
2089   int pid;
2090
2091   if (regno >= 0)
2092     {
2093       if (regno >= the_low_target.num_regs)
2094         return;
2095
2096       if ((*the_low_target.cannot_store_register) (regno) == 1)
2097         return;
2098
2099       regaddr = register_addr (regno);
2100       if (regaddr == -1)
2101         return;
2102       errno = 0;
2103       size = (register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
2104              & - sizeof (PTRACE_XFER_TYPE);
2105       buf = alloca (size);
2106       memset (buf, 0, size);
2107
2108       if (the_low_target.collect_ptrace_register)
2109         the_low_target.collect_ptrace_register (regno, buf);
2110       else
2111         collect_register (regno, buf);
2112
2113       pid = lwpid_of (get_thread_lwp (current_inferior));
2114       for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
2115         {
2116           errno = 0;
2117           ptrace (PTRACE_POKEUSER, pid, (PTRACE_ARG3_TYPE) regaddr,
2118                   *(PTRACE_XFER_TYPE *) (buf + i));
2119           if (errno != 0)
2120             {
2121               /* At this point, ESRCH should mean the process is
2122                  already gone, in which case we simply ignore attempts
2123                  to change its registers.  See also the related
2124                  comment in linux_resume_one_lwp.  */
2125               if (errno == ESRCH)
2126                 return;
2127
2128               if ((*the_low_target.cannot_store_register) (regno) == 0)
2129                 {
2130                   char *err = strerror (errno);
2131                   char *msg = alloca (strlen (err) + 128);
2132                   sprintf (msg, "writing register %d: %s",
2133                            regno, err);
2134                   error (msg);
2135                   return;
2136                 }
2137             }
2138           regaddr += sizeof (PTRACE_XFER_TYPE);
2139         }
2140     }
2141   else
2142     for (regno = 0; regno < the_low_target.num_regs; regno++)
2143       usr_store_inferior_registers (regno);
2144 }
2145 #endif /* HAVE_LINUX_USRREGS */
2146
2147
2148
2149 #ifdef HAVE_LINUX_REGSETS
2150
2151 static int
2152 regsets_fetch_inferior_registers ()
2153 {
2154   struct regset_info *regset;
2155   int saw_general_regs = 0;
2156   int pid;
2157
2158   regset = target_regsets;
2159
2160   pid = lwpid_of (get_thread_lwp (current_inferior));
2161   while (regset->size >= 0)
2162     {
2163       void *buf;
2164       int res;
2165
2166       if (regset->size == 0 || disabled_regsets[regset - target_regsets])
2167         {
2168           regset ++;
2169           continue;
2170         }
2171
2172       buf = xmalloc (regset->size);
2173 #ifndef __sparc__
2174       res = ptrace (regset->get_request, pid, 0, buf);
2175 #else
2176       res = ptrace (regset->get_request, pid, buf, 0);
2177 #endif
2178       if (res < 0)
2179         {
2180           if (errno == EIO)
2181             {
2182               /* If we get EIO on a regset, do not try it again for
2183                  this process.  */
2184               disabled_regsets[regset - target_regsets] = 1;
2185               free (buf);
2186               continue;
2187             }
2188           else
2189             {
2190               char s[256];
2191               sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d",
2192                        pid);
2193               perror (s);
2194             }
2195         }
2196       else if (regset->type == GENERAL_REGS)
2197         saw_general_regs = 1;
2198       regset->store_function (buf);
2199       regset ++;
2200       free (buf);
2201     }
2202   if (saw_general_regs)
2203     return 0;
2204   else
2205     return 1;
2206 }
2207
2208 static int
2209 regsets_store_inferior_registers ()
2210 {
2211   struct regset_info *regset;
2212   int saw_general_regs = 0;
2213   int pid;
2214
2215   regset = target_regsets;
2216
2217   pid = lwpid_of (get_thread_lwp (current_inferior));
2218   while (regset->size >= 0)
2219     {
2220       void *buf;
2221       int res;
2222
2223       if (regset->size == 0 || disabled_regsets[regset - target_regsets])
2224         {
2225           regset ++;
2226           continue;
2227         }
2228
2229       buf = xmalloc (regset->size);
2230
2231       /* First fill the buffer with the current register set contents,
2232          in case there are any items in the kernel's regset that are
2233          not in gdbserver's regcache.  */
2234 #ifndef __sparc__
2235       res = ptrace (regset->get_request, pid, 0, buf);
2236 #else
2237       res = ptrace (regset->get_request, pid, buf, 0);
2238 #endif
2239
2240       if (res == 0)
2241         {
2242           /* Then overlay our cached registers on that.  */
2243           regset->fill_function (buf);
2244
2245           /* Only now do we write the register set.  */
2246 #ifndef __sparc__
2247           res = ptrace (regset->set_request, pid, 0, buf);
2248 #else
2249           res = ptrace (regset->set_request, pid, buf, 0);
2250 #endif
2251         }
2252
2253       if (res < 0)
2254         {
2255           if (errno == EIO)
2256             {
2257               /* If we get EIO on a regset, do not try it again for
2258                  this process.  */
2259               disabled_regsets[regset - target_regsets] = 1;
2260               free (buf);
2261               continue;
2262             }
2263           else if (errno == ESRCH)
2264             {
2265               /* At this point, ESRCH should mean the process is
2266                  already gone, in which case we simply ignore attempts
2267                  to change its registers.  See also the related
2268                  comment in linux_resume_one_lwp.  */
2269               free (buf);
2270               return 0;
2271             }
2272           else
2273             {
2274               perror ("Warning: ptrace(regsets_store_inferior_registers)");
2275             }
2276         }
2277       else if (regset->type == GENERAL_REGS)
2278         saw_general_regs = 1;
2279       regset ++;
2280       free (buf);
2281     }
2282   if (saw_general_regs)
2283     return 0;
2284   else
2285     return 1;
2286   return 0;
2287 }
2288
2289 #endif /* HAVE_LINUX_REGSETS */
2290
2291
2292 void
2293 linux_fetch_registers (int regno)
2294 {
2295 #ifdef HAVE_LINUX_REGSETS
2296   if (regsets_fetch_inferior_registers () == 0)
2297     return;
2298 #endif
2299 #ifdef HAVE_LINUX_USRREGS
2300   usr_fetch_inferior_registers (regno);
2301 #endif
2302 }
2303
2304 void
2305 linux_store_registers (int regno)
2306 {
2307 #ifdef HAVE_LINUX_REGSETS
2308   if (regsets_store_inferior_registers () == 0)
2309     return;
2310 #endif
2311 #ifdef HAVE_LINUX_USRREGS
2312   usr_store_inferior_registers (regno);
2313 #endif
2314 }
2315
2316
2317 /* Copy LEN bytes from inferior's memory starting at MEMADDR
2318    to debugger memory starting at MYADDR.  */
2319
2320 static int
2321 linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
2322 {
2323   register int i;
2324   /* Round starting address down to longword boundary.  */
2325   register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
2326   /* Round ending address up; get number of longwords that makes.  */
2327   register int count
2328     = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
2329       / sizeof (PTRACE_XFER_TYPE);
2330   /* Allocate buffer of that many longwords.  */
2331   register PTRACE_XFER_TYPE *buffer
2332     = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
2333   int fd;
2334   char filename[64];
2335   int pid = lwpid_of (get_thread_lwp (current_inferior));
2336
2337   /* Try using /proc.  Don't bother for one word.  */
2338   if (len >= 3 * sizeof (long))
2339     {
2340       /* We could keep this file open and cache it - possibly one per
2341          thread.  That requires some juggling, but is even faster.  */
2342       sprintf (filename, "/proc/%d/mem", pid);
2343       fd = open (filename, O_RDONLY | O_LARGEFILE);
2344       if (fd == -1)
2345         goto no_proc;
2346
2347       /* If pread64 is available, use it.  It's faster if the kernel
2348          supports it (only one syscall), and it's 64-bit safe even on
2349          32-bit platforms (for instance, SPARC debugging a SPARC64
2350          application).  */
2351 #ifdef HAVE_PREAD64
2352       if (pread64 (fd, myaddr, len, memaddr) != len)
2353 #else
2354       if (lseek (fd, memaddr, SEEK_SET) == -1 || read (fd, memaddr, len) != len)
2355 #endif
2356         {
2357           close (fd);
2358           goto no_proc;
2359         }
2360
2361       close (fd);
2362       return 0;
2363     }
2364
2365  no_proc:
2366   /* Read all the longwords */
2367   for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
2368     {
2369       errno = 0;
2370       buffer[i] = ptrace (PTRACE_PEEKTEXT, pid, (PTRACE_ARG3_TYPE) addr, 0);
2371       if (errno)
2372         return errno;
2373     }
2374
2375   /* Copy appropriate bytes out of the buffer.  */
2376   memcpy (myaddr,
2377           (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
2378           len);
2379
2380   return 0;
2381 }
2382
2383 /* Copy LEN bytes of data from debugger memory at MYADDR
2384    to inferior's memory at MEMADDR.
2385    On failure (cannot write the inferior)
2386    returns the value of errno.  */
2387
2388 static int
2389 linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
2390 {
2391   register int i;
2392   /* Round starting address down to longword boundary.  */
2393   register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
2394   /* Round ending address up; get number of longwords that makes.  */
2395   register int count
2396   = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) / sizeof (PTRACE_XFER_TYPE);
2397   /* Allocate buffer of that many longwords.  */
2398   register PTRACE_XFER_TYPE *buffer = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
2399   int pid = lwpid_of (get_thread_lwp (current_inferior));
2400
2401   if (debug_threads)
2402     {
2403       /* Dump up to four bytes.  */
2404       unsigned int val = * (unsigned int *) myaddr;
2405       if (len == 1)
2406         val = val & 0xff;
2407       else if (len == 2)
2408         val = val & 0xffff;
2409       else if (len == 3)
2410         val = val & 0xffffff;
2411       fprintf (stderr, "Writing %0*x to 0x%08lx\n", 2 * ((len < 4) ? len : 4),
2412                val, (long)memaddr);
2413     }
2414
2415   /* Fill start and end extra bytes of buffer with existing memory data.  */
2416
2417   buffer[0] = ptrace (PTRACE_PEEKTEXT, pid, (PTRACE_ARG3_TYPE) addr, 0);
2418
2419   if (count > 1)
2420     {
2421       buffer[count - 1]
2422         = ptrace (PTRACE_PEEKTEXT, pid,
2423                   (PTRACE_ARG3_TYPE) (addr + (count - 1)
2424                                       * sizeof (PTRACE_XFER_TYPE)),
2425                   0);
2426     }
2427
2428   /* Copy data to be written over corresponding part of buffer */
2429
2430   memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), myaddr, len);
2431
2432   /* Write the entire buffer.  */
2433
2434   for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
2435     {
2436       errno = 0;
2437       ptrace (PTRACE_POKETEXT, pid, (PTRACE_ARG3_TYPE) addr, buffer[i]);
2438       if (errno)
2439         return errno;
2440     }
2441
2442   return 0;
2443 }
2444
2445 static int linux_supports_tracefork_flag;
2446
2447 /* Helper functions for linux_test_for_tracefork, called via clone ().  */
2448
2449 static int
2450 linux_tracefork_grandchild (void *arg)
2451 {
2452   _exit (0);
2453 }
2454
2455 #define STACK_SIZE 4096
2456
2457 static int
2458 linux_tracefork_child (void *arg)
2459 {
2460   ptrace (PTRACE_TRACEME, 0, 0, 0);
2461   kill (getpid (), SIGSTOP);
2462 #ifdef __ia64__
2463   __clone2 (linux_tracefork_grandchild, arg, STACK_SIZE,
2464             CLONE_VM | SIGCHLD, NULL);
2465 #else
2466   clone (linux_tracefork_grandchild, arg + STACK_SIZE,
2467          CLONE_VM | SIGCHLD, NULL);
2468 #endif
2469   _exit (0);
2470 }
2471
2472 /* Wrapper function for waitpid which handles EINTR, and emulates
2473    __WALL for systems where that is not available.  */
2474
2475 static int
2476 my_waitpid (int pid, int *status, int flags)
2477 {
2478   int ret, out_errno;
2479
2480   if (debug_threads)
2481     fprintf (stderr, "my_waitpid (%d, 0x%x)\n", pid, flags);
2482
2483   if (flags & __WALL)
2484     {
2485       sigset_t block_mask, org_mask, wake_mask;
2486       int wnohang;
2487
2488       wnohang = (flags & WNOHANG) != 0;
2489       flags &= ~(__WALL | __WCLONE);
2490       flags |= WNOHANG;
2491
2492       /* Block all signals while here.  This avoids knowing about
2493          LinuxThread's signals.  */
2494       sigfillset (&block_mask);
2495       sigprocmask (SIG_BLOCK, &block_mask, &org_mask);
2496
2497       /* ... except during the sigsuspend below.  */
2498       sigemptyset (&wake_mask);
2499
2500       while (1)
2501         {
2502           /* Since all signals are blocked, there's no need to check
2503              for EINTR here.  */
2504           ret = waitpid (pid, status, flags);
2505           out_errno = errno;
2506
2507           if (ret == -1 && out_errno != ECHILD)
2508             break;
2509           else if (ret > 0)
2510             break;
2511
2512           if (flags & __WCLONE)
2513             {
2514               /* We've tried both flavors now.  If WNOHANG is set,
2515                  there's nothing else to do, just bail out.  */
2516               if (wnohang)
2517                 break;
2518
2519               if (debug_threads)
2520                 fprintf (stderr, "blocking\n");
2521
2522               /* Block waiting for signals.  */
2523               sigsuspend (&wake_mask);
2524             }
2525
2526           flags ^= __WCLONE;
2527         }
2528
2529       sigprocmask (SIG_SETMASK, &org_mask, NULL);
2530     }
2531   else
2532     {
2533       do
2534         ret = waitpid (pid, status, flags);
2535       while (ret == -1 && errno == EINTR);
2536       out_errno = errno;
2537     }
2538
2539   if (debug_threads)
2540     fprintf (stderr, "my_waitpid (%d, 0x%x): status(%x), %d\n",
2541              pid, flags, status ? *status : -1, ret);
2542
2543   errno = out_errno;
2544   return ret;
2545 }
2546
2547 /* Determine if PTRACE_O_TRACEFORK can be used to follow fork events.  Make
2548    sure that we can enable the option, and that it had the desired
2549    effect.  */
2550
2551 static void
2552 linux_test_for_tracefork (void)
2553 {
2554   int child_pid, ret, status;
2555   long second_pid;
2556   char *stack = xmalloc (STACK_SIZE * 4);
2557
2558   linux_supports_tracefork_flag = 0;
2559
2560   /* Use CLONE_VM instead of fork, to support uClinux (no MMU).  */
2561 #ifdef __ia64__
2562   child_pid = __clone2 (linux_tracefork_child, stack, STACK_SIZE,
2563                         CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2);
2564 #else
2565   child_pid = clone (linux_tracefork_child, stack + STACK_SIZE,
2566                      CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2);
2567 #endif
2568   if (child_pid == -1)
2569     perror_with_name ("clone");
2570
2571   ret = my_waitpid (child_pid, &status, 0);
2572   if (ret == -1)
2573     perror_with_name ("waitpid");
2574   else if (ret != child_pid)
2575     error ("linux_test_for_tracefork: waitpid: unexpected result %d.", ret);
2576   if (! WIFSTOPPED (status))
2577     error ("linux_test_for_tracefork: waitpid: unexpected status %d.", status);
2578
2579   ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
2580   if (ret != 0)
2581     {
2582       ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
2583       if (ret != 0)
2584         {
2585           warning ("linux_test_for_tracefork: failed to kill child");
2586           return;
2587         }
2588
2589       ret = my_waitpid (child_pid, &status, 0);
2590       if (ret != child_pid)
2591         warning ("linux_test_for_tracefork: failed to wait for killed child");
2592       else if (!WIFSIGNALED (status))
2593         warning ("linux_test_for_tracefork: unexpected wait status 0x%x from "
2594                  "killed child", status);
2595
2596       return;
2597     }
2598
2599   ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
2600   if (ret != 0)
2601     warning ("linux_test_for_tracefork: failed to resume child");
2602
2603   ret = my_waitpid (child_pid, &status, 0);
2604
2605   if (ret == child_pid && WIFSTOPPED (status)
2606       && status >> 16 == PTRACE_EVENT_FORK)
2607     {
2608       second_pid = 0;
2609       ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
2610       if (ret == 0 && second_pid != 0)
2611         {
2612           int second_status;
2613
2614           linux_supports_tracefork_flag = 1;
2615           my_waitpid (second_pid, &second_status, 0);
2616           ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
2617           if (ret != 0)
2618             warning ("linux_test_for_tracefork: failed to kill second child");
2619           my_waitpid (second_pid, &status, 0);
2620         }
2621     }
2622   else
2623     warning ("linux_test_for_tracefork: unexpected result from waitpid "
2624              "(%d, status 0x%x)", ret, status);
2625
2626   do
2627     {
2628       ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
2629       if (ret != 0)
2630         warning ("linux_test_for_tracefork: failed to kill child");
2631       my_waitpid (child_pid, &status, 0);
2632     }
2633   while (WIFSTOPPED (status));
2634
2635   free (stack);
2636 }
2637
2638
2639 static void
2640 linux_look_up_symbols (void)
2641 {
2642 #ifdef USE_THREAD_DB
2643   struct process_info *proc = current_process ();
2644
2645   if (proc->private->thread_db_active)
2646     return;
2647
2648   proc->private->thread_db_active
2649     = thread_db_init (!linux_supports_tracefork_flag);
2650 #endif
2651 }
2652
2653 static void
2654 linux_request_interrupt (void)
2655 {
2656   extern unsigned long signal_pid;
2657
2658   if (!ptid_equal (cont_thread, null_ptid)
2659       && !ptid_equal (cont_thread, minus_one_ptid))
2660     {
2661       struct lwp_info *lwp;
2662       int lwpid;
2663
2664       lwp = get_thread_lwp (current_inferior);
2665       lwpid = lwpid_of (lwp);
2666       kill_lwp (lwpid, SIGINT);
2667     }
2668   else
2669     kill_lwp (signal_pid, SIGINT);
2670 }
2671
2672 /* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
2673    to debugger memory starting at MYADDR.  */
2674
2675 static int
2676 linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
2677 {
2678   char filename[PATH_MAX];
2679   int fd, n;
2680   int pid = lwpid_of (get_thread_lwp (current_inferior));
2681
2682   snprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
2683
2684   fd = open (filename, O_RDONLY);
2685   if (fd < 0)
2686     return -1;
2687
2688   if (offset != (CORE_ADDR) 0
2689       && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
2690     n = -1;
2691   else
2692     n = read (fd, myaddr, len);
2693
2694   close (fd);
2695
2696   return n;
2697 }
2698
2699 /* These breakpoint and watchpoint related wrapper functions simply
2700    pass on the function call if the target has registered a
2701    corresponding function.  */
2702
2703 static int
2704 linux_insert_point (char type, CORE_ADDR addr, int len)
2705 {
2706   if (the_low_target.insert_point != NULL)
2707     return the_low_target.insert_point (type, addr, len);
2708   else
2709     /* Unsupported (see target.h).  */
2710     return 1;
2711 }
2712
2713 static int
2714 linux_remove_point (char type, CORE_ADDR addr, int len)
2715 {
2716   if (the_low_target.remove_point != NULL)
2717     return the_low_target.remove_point (type, addr, len);
2718   else
2719     /* Unsupported (see target.h).  */
2720     return 1;
2721 }
2722
2723 static int
2724 linux_stopped_by_watchpoint (void)
2725 {
2726   if (the_low_target.stopped_by_watchpoint != NULL)
2727     return the_low_target.stopped_by_watchpoint ();
2728   else
2729     return 0;
2730 }
2731
2732 static CORE_ADDR
2733 linux_stopped_data_address (void)
2734 {
2735   if (the_low_target.stopped_data_address != NULL)
2736     return the_low_target.stopped_data_address ();
2737   else
2738     return 0;
2739 }
2740
2741 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
2742 #if defined(__mcoldfire__)
2743 /* These should really be defined in the kernel's ptrace.h header.  */
2744 #define PT_TEXT_ADDR 49*4
2745 #define PT_DATA_ADDR 50*4
2746 #define PT_TEXT_END_ADDR  51*4
2747 #endif
2748
2749 /* Under uClinux, programs are loaded at non-zero offsets, which we need
2750    to tell gdb about.  */
2751
2752 static int
2753 linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
2754 {
2755 #if defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) && defined(PT_TEXT_END_ADDR)
2756   unsigned long text, text_end, data;
2757   int pid = lwpid_of (get_thread_lwp (current_inferior));
2758
2759   errno = 0;
2760
2761   text = ptrace (PTRACE_PEEKUSER, pid, (long)PT_TEXT_ADDR, 0);
2762   text_end = ptrace (PTRACE_PEEKUSER, pid, (long)PT_TEXT_END_ADDR, 0);
2763   data = ptrace (PTRACE_PEEKUSER, pid, (long)PT_DATA_ADDR, 0);
2764
2765   if (errno == 0)
2766     {
2767       /* Both text and data offsets produced at compile-time (and so
2768          used by gdb) are relative to the beginning of the program,
2769          with the data segment immediately following the text segment.
2770          However, the actual runtime layout in memory may put the data
2771          somewhere else, so when we send gdb a data base-address, we
2772          use the real data base address and subtract the compile-time
2773          data base-address from it (which is just the length of the
2774          text segment).  BSS immediately follows data in both
2775          cases.  */
2776       *text_p = text;
2777       *data_p = data - (text_end - text);
2778
2779       return 1;
2780     }
2781 #endif
2782  return 0;
2783 }
2784 #endif
2785
2786 static int
2787 linux_qxfer_osdata (const char *annex,
2788                     unsigned char *readbuf, unsigned const char *writebuf,
2789                     CORE_ADDR offset, int len)
2790 {
2791   /* We make the process list snapshot when the object starts to be
2792      read.  */
2793   static const char *buf;
2794   static long len_avail = -1;
2795   static struct buffer buffer;
2796
2797   DIR *dirp;
2798
2799   if (strcmp (annex, "processes") != 0)
2800     return 0;
2801
2802   if (!readbuf || writebuf)
2803     return 0;
2804
2805   if (offset == 0)
2806     {
2807       if (len_avail != -1 && len_avail != 0)
2808        buffer_free (&buffer);
2809       len_avail = 0;
2810       buf = NULL;
2811       buffer_init (&buffer);
2812       buffer_grow_str (&buffer, "<osdata type=\"processes\">");
2813
2814       dirp = opendir ("/proc");
2815       if (dirp)
2816        {
2817          struct dirent *dp;
2818          while ((dp = readdir (dirp)) != NULL)
2819            {
2820              struct stat statbuf;
2821              char procentry[sizeof ("/proc/4294967295")];
2822
2823              if (!isdigit (dp->d_name[0])
2824                  || strlen (dp->d_name) > sizeof ("4294967295") - 1)
2825                continue;
2826
2827              sprintf (procentry, "/proc/%s", dp->d_name);
2828              if (stat (procentry, &statbuf) == 0
2829                  && S_ISDIR (statbuf.st_mode))
2830                {
2831                  char pathname[128];
2832                  FILE *f;
2833                  char cmd[MAXPATHLEN + 1];
2834                  struct passwd *entry;
2835
2836                  sprintf (pathname, "/proc/%s/cmdline", dp->d_name);
2837                  entry = getpwuid (statbuf.st_uid);
2838
2839                  if ((f = fopen (pathname, "r")) != NULL)
2840                    {
2841                      size_t len = fread (cmd, 1, sizeof (cmd) - 1, f);
2842                      if (len > 0)
2843                        {
2844                          int i;
2845                          for (i = 0; i < len; i++)
2846                            if (cmd[i] == '\0')
2847                              cmd[i] = ' ';
2848                          cmd[len] = '\0';
2849
2850                          buffer_xml_printf (
2851                            &buffer,
2852                            "<item>"
2853                            "<column name=\"pid\">%s</column>"
2854                            "<column name=\"user\">%s</column>"
2855                            "<column name=\"command\">%s</column>"
2856                            "</item>",
2857                            dp->d_name,
2858                            entry ? entry->pw_name : "?",
2859                            cmd);
2860                        }
2861                      fclose (f);
2862                    }
2863                }
2864            }
2865
2866          closedir (dirp);
2867        }
2868       buffer_grow_str0 (&buffer, "</osdata>\n");
2869       buf = buffer_finish (&buffer);
2870       len_avail = strlen (buf);
2871     }
2872
2873   if (offset >= len_avail)
2874     {
2875       /* Done.  Get rid of the data.  */
2876       buffer_free (&buffer);
2877       buf = NULL;
2878       len_avail = 0;
2879       return 0;
2880     }
2881
2882   if (len > len_avail - offset)
2883     len = len_avail - offset;
2884   memcpy (readbuf, buf + offset, len);
2885
2886   return len;
2887 }
2888
2889 /* Convert a native/host siginfo object, into/from the siginfo in the
2890    layout of the inferiors' architecture.  */
2891
2892 static void
2893 siginfo_fixup (struct siginfo *siginfo, void *inf_siginfo, int direction)
2894 {
2895   int done = 0;
2896
2897   if (the_low_target.siginfo_fixup != NULL)
2898     done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
2899
2900   /* If there was no callback, or the callback didn't do anything,
2901      then just do a straight memcpy.  */
2902   if (!done)
2903     {
2904       if (direction == 1)
2905         memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
2906       else
2907         memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
2908     }
2909 }
2910
2911 static int
2912 linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
2913                     unsigned const char *writebuf, CORE_ADDR offset, int len)
2914 {
2915   int pid;
2916   struct siginfo siginfo;
2917   char inf_siginfo[sizeof (struct siginfo)];
2918
2919   if (current_inferior == NULL)
2920     return -1;
2921
2922   pid = lwpid_of (get_thread_lwp (current_inferior));
2923
2924   if (debug_threads)
2925     fprintf (stderr, "%s siginfo for lwp %d.\n",
2926              readbuf != NULL ? "Reading" : "Writing",
2927              pid);
2928
2929   if (offset > sizeof (siginfo))
2930     return -1;
2931
2932   if (ptrace (PTRACE_GETSIGINFO, pid, 0, &siginfo) != 0)
2933     return -1;
2934
2935   /* When GDBSERVER is built as a 64-bit application, ptrace writes into
2936      SIGINFO an object with 64-bit layout.  Since debugging a 32-bit
2937      inferior with a 64-bit GDBSERVER should look the same as debugging it
2938      with a 32-bit GDBSERVER, we need to convert it.  */
2939   siginfo_fixup (&siginfo, inf_siginfo, 0);
2940
2941   if (offset + len > sizeof (siginfo))
2942     len = sizeof (siginfo) - offset;
2943
2944   if (readbuf != NULL)
2945     memcpy (readbuf, inf_siginfo + offset, len);
2946   else
2947     {
2948       memcpy (inf_siginfo + offset, writebuf, len);
2949
2950       /* Convert back to ptrace layout before flushing it out.  */
2951       siginfo_fixup (&siginfo, inf_siginfo, 1);
2952
2953       if (ptrace (PTRACE_SETSIGINFO, pid, 0, &siginfo) != 0)
2954         return -1;
2955     }
2956
2957   return len;
2958 }
2959
2960 /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
2961    so we notice when children change state; as the handler for the
2962    sigsuspend in my_waitpid.  */
2963
2964 static void
2965 sigchld_handler (int signo)
2966 {
2967   int old_errno = errno;
2968
2969   if (debug_threads)
2970     /* fprintf is not async-signal-safe, so call write directly.  */
2971     write (2, "sigchld_handler\n", sizeof ("sigchld_handler\n") - 1);
2972
2973   if (target_is_async_p ())
2974     async_file_mark (); /* trigger a linux_wait */
2975
2976   errno = old_errno;
2977 }
2978
2979 static int
2980 linux_supports_non_stop (void)
2981 {
2982   return 1;
2983 }
2984
2985 static int
2986 linux_async (int enable)
2987 {
2988   int previous = (linux_event_pipe[0] != -1);
2989
2990   if (previous != enable)
2991     {
2992       sigset_t mask;
2993       sigemptyset (&mask);
2994       sigaddset (&mask, SIGCHLD);
2995
2996       sigprocmask (SIG_BLOCK, &mask, NULL);
2997
2998       if (enable)
2999         {
3000           if (pipe (linux_event_pipe) == -1)
3001             fatal ("creating event pipe failed.");
3002
3003           fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
3004           fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
3005
3006           /* Register the event loop handler.  */
3007           add_file_handler (linux_event_pipe[0],
3008                             handle_target_event, NULL);
3009
3010           /* Always trigger a linux_wait.  */
3011           async_file_mark ();
3012         }
3013       else
3014         {
3015           delete_file_handler (linux_event_pipe[0]);
3016
3017           close (linux_event_pipe[0]);
3018           close (linux_event_pipe[1]);
3019           linux_event_pipe[0] = -1;
3020           linux_event_pipe[1] = -1;
3021         }
3022
3023       sigprocmask (SIG_UNBLOCK, &mask, NULL);
3024     }
3025
3026   return previous;
3027 }
3028
3029 static int
3030 linux_start_non_stop (int nonstop)
3031 {
3032   /* Register or unregister from event-loop accordingly.  */
3033   linux_async (nonstop);
3034   return 0;
3035 }
3036
3037 static int
3038 linux_supports_multi_process (void)
3039 {
3040   return 1;
3041 }
3042
3043
3044 /* Enumerate spufs IDs for process PID.  */
3045 static int
3046 spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
3047 {
3048   int pos = 0;
3049   int written = 0;
3050   char path[128];
3051   DIR *dir;
3052   struct dirent *entry;
3053
3054   sprintf (path, "/proc/%ld/fd", pid);
3055   dir = opendir (path);
3056   if (!dir)
3057     return -1;
3058
3059   rewinddir (dir);
3060   while ((entry = readdir (dir)) != NULL)
3061     {
3062       struct stat st;
3063       struct statfs stfs;
3064       int fd;
3065
3066       fd = atoi (entry->d_name);
3067       if (!fd)
3068         continue;
3069
3070       sprintf (path, "/proc/%ld/fd/%d", pid, fd);
3071       if (stat (path, &st) != 0)
3072         continue;
3073       if (!S_ISDIR (st.st_mode))
3074         continue;
3075
3076       if (statfs (path, &stfs) != 0)
3077         continue;
3078       if (stfs.f_type != SPUFS_MAGIC)
3079         continue;
3080
3081       if (pos >= offset && pos + 4 <= offset + len)
3082         {
3083           *(unsigned int *)(buf + pos - offset) = fd;
3084           written += 4;
3085         }
3086       pos += 4;
3087     }
3088
3089   closedir (dir);
3090   return written;
3091 }
3092
3093 /* Implements the to_xfer_partial interface for the TARGET_OBJECT_SPU
3094    object type, using the /proc file system.  */
3095 static int
3096 linux_qxfer_spu (const char *annex, unsigned char *readbuf,
3097                  unsigned const char *writebuf,
3098                  CORE_ADDR offset, int len)
3099 {
3100   long pid = lwpid_of (get_thread_lwp (current_inferior));
3101   char buf[128];
3102   int fd = 0;
3103   int ret = 0;
3104
3105   if (!writebuf && !readbuf)
3106     return -1;
3107
3108   if (!*annex)
3109     {
3110       if (!readbuf)
3111         return -1;
3112       else
3113         return spu_enumerate_spu_ids (pid, readbuf, offset, len);
3114     }
3115
3116   sprintf (buf, "/proc/%ld/fd/%s", pid, annex);
3117   fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
3118   if (fd <= 0)
3119     return -1;
3120
3121   if (offset != 0
3122       && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
3123     {
3124       close (fd);
3125       return 0;
3126     }
3127
3128   if (writebuf)
3129     ret = write (fd, writebuf, (size_t) len);
3130   else
3131     ret = read (fd, readbuf, (size_t) len);
3132
3133   close (fd);
3134   return ret;
3135 }
3136
3137 static struct target_ops linux_target_ops = {
3138   linux_create_inferior,
3139   linux_attach,
3140   linux_kill,
3141   linux_detach,
3142   linux_join,
3143   linux_thread_alive,
3144   linux_resume,
3145   linux_wait,
3146   linux_fetch_registers,
3147   linux_store_registers,
3148   linux_read_memory,
3149   linux_write_memory,
3150   linux_look_up_symbols,
3151   linux_request_interrupt,
3152   linux_read_auxv,
3153   linux_insert_point,
3154   linux_remove_point,
3155   linux_stopped_by_watchpoint,
3156   linux_stopped_data_address,
3157 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
3158   linux_read_offsets,
3159 #else
3160   NULL,
3161 #endif
3162 #ifdef USE_THREAD_DB
3163   thread_db_get_tls_address,
3164 #else
3165   NULL,
3166 #endif
3167   linux_qxfer_spu,
3168   hostio_last_error_from_errno,
3169   linux_qxfer_osdata,
3170   linux_xfer_siginfo,
3171   linux_supports_non_stop,
3172   linux_async,
3173   linux_start_non_stop,
3174   linux_supports_multi_process
3175 };
3176
3177 static void
3178 linux_init_signals ()
3179 {
3180   /* FIXME drow/2002-06-09: As above, we should check with LinuxThreads
3181      to find what the cancel signal actually is.  */
3182   signal (__SIGRTMIN+1, SIG_IGN);
3183 }
3184
3185 void
3186 initialize_low (void)
3187 {
3188   struct sigaction sigchld_action;
3189   memset (&sigchld_action, 0, sizeof (sigchld_action));
3190   set_target_ops (&linux_target_ops);
3191   set_breakpoint_data (the_low_target.breakpoint,
3192                        the_low_target.breakpoint_len);
3193   linux_init_signals ();
3194   linux_test_for_tracefork ();
3195 #ifdef HAVE_LINUX_REGSETS
3196   for (num_regsets = 0; target_regsets[num_regsets].size >= 0; num_regsets++)
3197     ;
3198   disabled_regsets = xmalloc (num_regsets);
3199 #endif
3200
3201   sigchld_action.sa_handler = sigchld_handler;
3202   sigemptyset (&sigchld_action.sa_mask);
3203   sigchld_action.sa_flags = SA_RESTART;
3204   sigaction (SIGCHLD, &sigchld_action, NULL);
3205 }