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