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