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