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