OSDN Git Service

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