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