OSDN Git Service

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