PR14918, lto always links in libgcc_s.so
[deliverable/binutils-gdb.git] / gdb / gdbserver / linux-low.c
CommitLineData
da6d8c04 1/* Low level interface to ptrace, for the remote server for GDB.
ecd75fc8 2 Copyright (C) 1995-2014 Free Software Foundation, Inc.
da6d8c04
DJ
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
a9762ec7 8 the Free Software Foundation; either version 3 of the License, or
da6d8c04
DJ
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
a9762ec7 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
da6d8c04
DJ
18
19#include "server.h"
58caa3dc 20#include "linux-low.h"
125f8a3d 21#include "nat/linux-osdata.h"
58b4daa5 22#include "agent.h"
da6d8c04 23
96d7229d
LM
24#include "nat/linux-nat.h"
25#include "nat/linux-waitpid.h"
8bdce1ff 26#include "gdb_wait.h"
da6d8c04 27#include <stdio.h>
da6d8c04 28#include <sys/ptrace.h>
125f8a3d
GB
29#include "nat/linux-ptrace.h"
30#include "nat/linux-procfs.h"
da6d8c04
DJ
31#include <signal.h>
32#include <sys/ioctl.h>
33#include <fcntl.h>
d07c63e7 34#include <string.h>
0a30fbc4
DJ
35#include <stdlib.h>
36#include <unistd.h>
fa6a77dc 37#include <errno.h>
fd500816 38#include <sys/syscall.h>
f9387fc3 39#include <sched.h>
07e059b5
VP
40#include <ctype.h>
41#include <pwd.h>
42#include <sys/types.h>
43#include <dirent.h>
53ce3c39 44#include <sys/stat.h>
efcbbd14 45#include <sys/vfs.h>
1570b33e 46#include <sys/uio.h>
602e3198 47#include "filestuff.h"
c144c7a0 48#include "tracepoint.h"
533b0600 49#include "hostio.h"
957f3f49
DE
50#ifndef ELFMAG0
51/* Don't include <linux/elf.h> here. If it got included by gdb_proc_service.h
52 then ELFMAG0 will have been defined. If it didn't get included by
53 gdb_proc_service.h then including it will likely introduce a duplicate
54 definition of elf_fpregset_t. */
55#include <elf.h>
56#endif
efcbbd14
UW
57
58#ifndef SPUFS_MAGIC
59#define SPUFS_MAGIC 0x23c9b64e
60#endif
da6d8c04 61
03583c20
UW
62#ifdef HAVE_PERSONALITY
63# include <sys/personality.h>
64# if !HAVE_DECL_ADDR_NO_RANDOMIZE
65# define ADDR_NO_RANDOMIZE 0x0040000
66# endif
67#endif
68
fd462a61
DJ
69#ifndef O_LARGEFILE
70#define O_LARGEFILE 0
71#endif
72
ec8ebe72
DE
73#ifndef W_STOPCODE
74#define W_STOPCODE(sig) ((sig) << 8 | 0x7f)
75#endif
76
1a981360
PA
77/* This is the kernel's hard limit. Not to be confused with
78 SIGRTMIN. */
79#ifndef __SIGRTMIN
80#define __SIGRTMIN 32
81#endif
82
db0dfaa0
LM
83/* Some targets did not define these ptrace constants from the start,
84 so gdbserver defines them locally here. In the future, these may
85 be removed after they are added to asm/ptrace.h. */
86#if !(defined(PT_TEXT_ADDR) \
87 || defined(PT_DATA_ADDR) \
88 || defined(PT_TEXT_END_ADDR))
89#if defined(__mcoldfire__)
90/* These are still undefined in 3.10 kernels. */
91#define PT_TEXT_ADDR 49*4
92#define PT_DATA_ADDR 50*4
93#define PT_TEXT_END_ADDR 51*4
94/* BFIN already defines these since at least 2.6.32 kernels. */
95#elif defined(BFIN)
96#define PT_TEXT_ADDR 220
97#define PT_TEXT_END_ADDR 224
98#define PT_DATA_ADDR 228
99/* These are still undefined in 3.10 kernels. */
100#elif defined(__TMS320C6X__)
101#define PT_TEXT_ADDR (0x10000*4)
102#define PT_DATA_ADDR (0x10004*4)
103#define PT_TEXT_END_ADDR (0x10008*4)
104#endif
105#endif
106
9accd112 107#ifdef HAVE_LINUX_BTRACE
125f8a3d 108# include "nat/linux-btrace.h"
9accd112
MM
109#endif
110
8365dcf5
TJB
111#ifndef HAVE_ELF32_AUXV_T
112/* Copied from glibc's elf.h. */
113typedef struct
114{
115 uint32_t a_type; /* Entry type */
116 union
117 {
118 uint32_t a_val; /* Integer value */
119 /* We use to have pointer elements added here. We cannot do that,
120 though, since it does not work when using 32-bit definitions
121 on 64-bit platforms and vice versa. */
122 } a_un;
123} Elf32_auxv_t;
124#endif
125
126#ifndef HAVE_ELF64_AUXV_T
127/* Copied from glibc's elf.h. */
128typedef struct
129{
130 uint64_t a_type; /* Entry type */
131 union
132 {
133 uint64_t a_val; /* Integer value */
134 /* We use to have pointer elements added here. We cannot do that,
135 though, since it does not work when using 32-bit definitions
136 on 64-bit platforms and vice versa. */
137 } a_un;
138} Elf64_auxv_t;
139#endif
140
05044653
PA
141/* A list of all unknown processes which receive stop signals. Some
142 other process will presumably claim each of these as forked
143 children momentarily. */
24a09b5f 144
05044653
PA
145struct simple_pid_list
146{
147 /* The process ID. */
148 int pid;
149
150 /* The status as reported by waitpid. */
151 int status;
152
153 /* Next in chain. */
154 struct simple_pid_list *next;
155};
156struct simple_pid_list *stopped_pids;
157
158/* Trivial list manipulation functions to keep track of a list of new
159 stopped processes. */
160
161static void
162add_to_pid_list (struct simple_pid_list **listp, int pid, int status)
163{
164 struct simple_pid_list *new_pid = xmalloc (sizeof (struct simple_pid_list));
165
166 new_pid->pid = pid;
167 new_pid->status = status;
168 new_pid->next = *listp;
169 *listp = new_pid;
170}
171
172static int
173pull_pid_from_list (struct simple_pid_list **listp, int pid, int *statusp)
174{
175 struct simple_pid_list **p;
176
177 for (p = listp; *p != NULL; p = &(*p)->next)
178 if ((*p)->pid == pid)
179 {
180 struct simple_pid_list *next = (*p)->next;
181
182 *statusp = (*p)->status;
183 xfree (*p);
184 *p = next;
185 return 1;
186 }
187 return 0;
188}
24a09b5f 189
bde24c0a
PA
190enum stopping_threads_kind
191 {
192 /* Not stopping threads presently. */
193 NOT_STOPPING_THREADS,
194
195 /* Stopping threads. */
196 STOPPING_THREADS,
197
198 /* Stopping and suspending threads. */
199 STOPPING_AND_SUSPENDING_THREADS
200 };
201
202/* This is set while stop_all_lwps is in effect. */
203enum stopping_threads_kind stopping_threads = NOT_STOPPING_THREADS;
0d62e5e8
DJ
204
205/* FIXME make into a target method? */
24a09b5f 206int using_threads = 1;
24a09b5f 207
fa593d66
PA
208/* True if we're presently stabilizing threads (moving them out of
209 jump pads). */
210static int stabilizing_threads;
211
2acc282a 212static void linux_resume_one_lwp (struct lwp_info *lwp,
54a0b537 213 int step, int signal, siginfo_t *info);
2bd7c093 214static void linux_resume (struct thread_resume *resume_info, size_t n);
7984d532
PA
215static void stop_all_lwps (int suspend, struct lwp_info *except);
216static void unstop_all_lwps (int unsuspend, struct lwp_info *except);
fa96cb38
PA
217static int linux_wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid,
218 int *wstat, int options);
95954743 219static int linux_wait_for_event (ptid_t ptid, int *wstat, int options);
b3312d80 220static struct lwp_info *add_lwp (ptid_t ptid);
c35fafde 221static int linux_stopped_by_watchpoint (void);
95954743 222static void mark_lwp_dead (struct lwp_info *lwp, int wstat);
d50171e4 223static void proceed_all_lwps (void);
d50171e4
PA
224static int finish_step_over (struct lwp_info *lwp);
225static CORE_ADDR get_stop_pc (struct lwp_info *lwp);
226static int kill_lwp (unsigned long lwpid, int signo);
227
228/* True if the low target can hardware single-step. Such targets
229 don't need a BREAKPOINT_REINSERT_ADDR callback. */
230
231static int
232can_hardware_single_step (void)
233{
234 return (the_low_target.breakpoint_reinsert_addr == NULL);
235}
236
237/* True if the low target supports memory breakpoints. If so, we'll
238 have a GET_PC implementation. */
239
240static int
241supports_breakpoints (void)
242{
243 return (the_low_target.get_pc != NULL);
244}
0d62e5e8 245
fa593d66
PA
246/* Returns true if this target can support fast tracepoints. This
247 does not mean that the in-process agent has been loaded in the
248 inferior. */
249
250static int
251supports_fast_tracepoints (void)
252{
253 return the_low_target.install_fast_tracepoint_jump_pad != NULL;
254}
255
c2d6af84
PA
256/* True if LWP is stopped in its stepping range. */
257
258static int
259lwp_in_step_range (struct lwp_info *lwp)
260{
261 CORE_ADDR pc = lwp->stop_pc;
262
263 return (pc >= lwp->step_range_start && pc < lwp->step_range_end);
264}
265
0d62e5e8
DJ
266struct pending_signals
267{
268 int signal;
32ca6d61 269 siginfo_t info;
0d62e5e8
DJ
270 struct pending_signals *prev;
271};
611cb4a5 272
bd99dc85
PA
273/* The read/write ends of the pipe registered as waitable file in the
274 event loop. */
275static int linux_event_pipe[2] = { -1, -1 };
276
277/* True if we're currently in async mode. */
278#define target_is_async_p() (linux_event_pipe[0] != -1)
279
02fc4de7 280static void send_sigstop (struct lwp_info *lwp);
fa96cb38 281static void wait_for_sigstop (void);
bd99dc85 282
d0722149
DE
283/* Return non-zero if HEADER is a 64-bit ELF file. */
284
285static int
214d508e 286elf_64_header_p (const Elf64_Ehdr *header, unsigned int *machine)
d0722149 287{
214d508e
L
288 if (header->e_ident[EI_MAG0] == ELFMAG0
289 && header->e_ident[EI_MAG1] == ELFMAG1
290 && header->e_ident[EI_MAG2] == ELFMAG2
291 && header->e_ident[EI_MAG3] == ELFMAG3)
292 {
293 *machine = header->e_machine;
294 return header->e_ident[EI_CLASS] == ELFCLASS64;
295
296 }
297 *machine = EM_NONE;
298 return -1;
d0722149
DE
299}
300
301/* Return non-zero if FILE is a 64-bit ELF file,
302 zero if the file is not a 64-bit ELF file,
303 and -1 if the file is not accessible or doesn't exist. */
304
be07f1a2 305static int
214d508e 306elf_64_file_p (const char *file, unsigned int *machine)
d0722149 307{
957f3f49 308 Elf64_Ehdr header;
d0722149
DE
309 int fd;
310
311 fd = open (file, O_RDONLY);
312 if (fd < 0)
313 return -1;
314
315 if (read (fd, &header, sizeof (header)) != sizeof (header))
316 {
317 close (fd);
318 return 0;
319 }
320 close (fd);
321
214d508e 322 return elf_64_header_p (&header, machine);
d0722149
DE
323}
324
be07f1a2
PA
325/* Accepts an integer PID; Returns true if the executable PID is
326 running is a 64-bit ELF file.. */
327
328int
214d508e 329linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine)
be07f1a2 330{
d8d2a3ee 331 char file[PATH_MAX];
be07f1a2
PA
332
333 sprintf (file, "/proc/%d/exe", pid);
214d508e 334 return elf_64_file_p (file, machine);
be07f1a2
PA
335}
336
bd99dc85
PA
337static void
338delete_lwp (struct lwp_info *lwp)
339{
fa96cb38
PA
340 struct thread_info *thr = get_lwp_thread (lwp);
341
342 if (debug_threads)
343 debug_printf ("deleting %ld\n", lwpid_of (thr));
344
345 remove_thread (thr);
aa5ca48f 346 free (lwp->arch_private);
bd99dc85
PA
347 free (lwp);
348}
349
95954743
PA
350/* Add a process to the common process list, and set its private
351 data. */
352
353static struct process_info *
354linux_add_process (int pid, int attached)
355{
356 struct process_info *proc;
357
95954743
PA
358 proc = add_process (pid, attached);
359 proc->private = xcalloc (1, sizeof (*proc->private));
360
3aee8918
PA
361 /* Set the arch when the first LWP stops. */
362 proc->private->new_inferior = 1;
363
aa5ca48f
DE
364 if (the_low_target.new_process != NULL)
365 proc->private->arch_private = the_low_target.new_process ();
366
95954743
PA
367 return proc;
368}
369
bd99dc85
PA
370/* Handle a GNU/Linux extended wait response. If we see a clone
371 event, we need to add the new LWP to our list (and not report the
372 trap to higher layers). */
0d62e5e8 373
24a09b5f 374static void
54a0b537 375handle_extended_wait (struct lwp_info *event_child, int wstat)
24a09b5f
DJ
376{
377 int event = wstat >> 16;
d86d4aaf 378 struct thread_info *event_thr = get_lwp_thread (event_child);
54a0b537 379 struct lwp_info *new_lwp;
24a09b5f
DJ
380
381 if (event == PTRACE_EVENT_CLONE)
382 {
95954743 383 ptid_t ptid;
24a09b5f 384 unsigned long new_pid;
05044653 385 int ret, status;
24a09b5f 386
d86d4aaf 387 ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_thr), (PTRACE_TYPE_ARG3) 0,
56f7af9c 388 &new_pid);
24a09b5f
DJ
389
390 /* If we haven't already seen the new PID stop, wait for it now. */
05044653 391 if (!pull_pid_from_list (&stopped_pids, new_pid, &status))
24a09b5f
DJ
392 {
393 /* The new child has a pending SIGSTOP. We can't affect it until it
394 hits the SIGSTOP, but we're already attached. */
395
97438e3f 396 ret = my_waitpid (new_pid, &status, __WALL);
24a09b5f
DJ
397
398 if (ret == -1)
399 perror_with_name ("waiting for new child");
400 else if (ret != new_pid)
401 warning ("wait returned unexpected PID %d", ret);
da5898ce 402 else if (!WIFSTOPPED (status))
24a09b5f
DJ
403 warning ("wait returned unexpected status 0x%x", status);
404 }
405
fa96cb38
PA
406 if (debug_threads)
407 debug_printf ("HEW: Got clone event "
408 "from LWP %ld, new child is LWP %ld\n",
409 lwpid_of (event_thr), new_pid);
410
d86d4aaf 411 ptid = ptid_build (pid_of (event_thr), new_pid, 0);
b3312d80 412 new_lwp = add_lwp (ptid);
24a09b5f 413
e27d73f6
DE
414 /* Either we're going to immediately resume the new thread
415 or leave it stopped. linux_resume_one_lwp is a nop if it
416 thinks the thread is currently running, so set this first
417 before calling linux_resume_one_lwp. */
418 new_lwp->stopped = 1;
419
bde24c0a
PA
420 /* If we're suspending all threads, leave this one suspended
421 too. */
422 if (stopping_threads == STOPPING_AND_SUSPENDING_THREADS)
423 new_lwp->suspended = 1;
424
da5898ce
DJ
425 /* Normally we will get the pending SIGSTOP. But in some cases
426 we might get another signal delivered to the group first.
f21cc1a2 427 If we do get another signal, be sure not to lose it. */
da5898ce
DJ
428 if (WSTOPSIG (status) == SIGSTOP)
429 {
bde24c0a 430 if (stopping_threads != NOT_STOPPING_THREADS)
d50171e4
PA
431 new_lwp->stop_pc = get_stop_pc (new_lwp);
432 else
e27d73f6 433 linux_resume_one_lwp (new_lwp, 0, 0, NULL);
da5898ce 434 }
24a09b5f 435 else
da5898ce 436 {
54a0b537 437 new_lwp->stop_expected = 1;
d50171e4 438
bde24c0a 439 if (stopping_threads != NOT_STOPPING_THREADS)
da5898ce 440 {
d50171e4 441 new_lwp->stop_pc = get_stop_pc (new_lwp);
54a0b537
PA
442 new_lwp->status_pending_p = 1;
443 new_lwp->status_pending = status;
da5898ce
DJ
444 }
445 else
446 /* Pass the signal on. This is what GDB does - except
447 shouldn't we really report it instead? */
e27d73f6 448 linux_resume_one_lwp (new_lwp, 0, WSTOPSIG (status), NULL);
da5898ce 449 }
24a09b5f
DJ
450
451 /* Always resume the current thread. If we are stopping
452 threads, it will have a pending SIGSTOP; we may as well
453 collect it now. */
2acc282a 454 linux_resume_one_lwp (event_child, event_child->stepping, 0, NULL);
24a09b5f
DJ
455 }
456}
457
d50171e4
PA
458/* Return the PC as read from the regcache of LWP, without any
459 adjustment. */
460
461static CORE_ADDR
462get_pc (struct lwp_info *lwp)
463{
464 struct thread_info *saved_inferior;
465 struct regcache *regcache;
466 CORE_ADDR pc;
467
468 if (the_low_target.get_pc == NULL)
469 return 0;
470
471 saved_inferior = current_inferior;
472 current_inferior = get_lwp_thread (lwp);
473
474 regcache = get_thread_regcache (current_inferior, 1);
475 pc = (*the_low_target.get_pc) (regcache);
476
477 if (debug_threads)
87ce2a04 478 debug_printf ("pc is 0x%lx\n", (long) pc);
d50171e4
PA
479
480 current_inferior = saved_inferior;
481 return pc;
482}
483
484/* This function should only be called if LWP got a SIGTRAP.
0d62e5e8
DJ
485 The SIGTRAP could mean several things.
486
487 On i386, where decr_pc_after_break is non-zero:
488 If we were single-stepping this process using PTRACE_SINGLESTEP,
489 we will get only the one SIGTRAP (even if the instruction we
490 stepped over was a breakpoint). The value of $eip will be the
491 next instruction.
492 If we continue the process using PTRACE_CONT, we will get a
493 SIGTRAP when we hit a breakpoint. The value of $eip will be
494 the instruction after the breakpoint (i.e. needs to be
495 decremented). If we report the SIGTRAP to GDB, we must also
496 report the undecremented PC. If we cancel the SIGTRAP, we
497 must resume at the decremented PC.
498
499 (Presumably, not yet tested) On a non-decr_pc_after_break machine
500 with hardware or kernel single-step:
501 If we single-step over a breakpoint instruction, our PC will
502 point at the following instruction. If we continue and hit a
503 breakpoint instruction, our PC will point at the breakpoint
504 instruction. */
505
506static CORE_ADDR
d50171e4 507get_stop_pc (struct lwp_info *lwp)
0d62e5e8 508{
d50171e4
PA
509 CORE_ADDR stop_pc;
510
511 if (the_low_target.get_pc == NULL)
512 return 0;
0d62e5e8 513
d50171e4
PA
514 stop_pc = get_pc (lwp);
515
bdabb078
PA
516 if (WSTOPSIG (lwp->last_status) == SIGTRAP
517 && !lwp->stepping
518 && !lwp->stopped_by_watchpoint
519 && lwp->last_status >> 16 == 0)
47c0c975
DE
520 stop_pc -= the_low_target.decr_pc_after_break;
521
522 if (debug_threads)
87ce2a04 523 debug_printf ("stop pc is 0x%lx\n", (long) stop_pc);
47c0c975
DE
524
525 return stop_pc;
0d62e5e8 526}
ce3a066d 527
b3312d80 528static struct lwp_info *
95954743 529add_lwp (ptid_t ptid)
611cb4a5 530{
54a0b537 531 struct lwp_info *lwp;
0d62e5e8 532
54a0b537
PA
533 lwp = (struct lwp_info *) xmalloc (sizeof (*lwp));
534 memset (lwp, 0, sizeof (*lwp));
0d62e5e8 535
aa5ca48f
DE
536 if (the_low_target.new_thread != NULL)
537 lwp->arch_private = the_low_target.new_thread ();
538
f7667f0d 539 lwp->thread = add_thread (ptid, lwp);
0d62e5e8 540
54a0b537 541 return lwp;
0d62e5e8 542}
611cb4a5 543
da6d8c04
DJ
544/* Start an inferior process and returns its pid.
545 ALLARGS is a vector of program-name and args. */
546
ce3a066d
DJ
547static int
548linux_create_inferior (char *program, char **allargs)
da6d8c04 549{
03583c20
UW
550#ifdef HAVE_PERSONALITY
551 int personality_orig = 0, personality_set = 0;
552#endif
a6dbe5df 553 struct lwp_info *new_lwp;
da6d8c04 554 int pid;
95954743 555 ptid_t ptid;
da6d8c04 556
03583c20
UW
557#ifdef HAVE_PERSONALITY
558 if (disable_randomization)
559 {
560 errno = 0;
561 personality_orig = personality (0xffffffff);
562 if (errno == 0 && !(personality_orig & ADDR_NO_RANDOMIZE))
563 {
564 personality_set = 1;
565 personality (personality_orig | ADDR_NO_RANDOMIZE);
566 }
567 if (errno != 0 || (personality_set
568 && !(personality (0xffffffff) & ADDR_NO_RANDOMIZE)))
569 warning ("Error disabling address space randomization: %s",
570 strerror (errno));
571 }
572#endif
573
42c81e2a 574#if defined(__UCLIBC__) && defined(HAS_NOMMU)
52fb6437
NS
575 pid = vfork ();
576#else
da6d8c04 577 pid = fork ();
52fb6437 578#endif
da6d8c04
DJ
579 if (pid < 0)
580 perror_with_name ("fork");
581
582 if (pid == 0)
583 {
602e3198 584 close_most_fds ();
b8e1b30e 585 ptrace (PTRACE_TRACEME, 0, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
da6d8c04 586
1a981360 587#ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does. */
254787d4 588 signal (__SIGRTMIN + 1, SIG_DFL);
60c3d7b0 589#endif
0d62e5e8 590
a9fa9f7d
DJ
591 setpgid (0, 0);
592
e0f9f062
DE
593 /* If gdbserver is connected to gdb via stdio, redirect the inferior's
594 stdout to stderr so that inferior i/o doesn't corrupt the connection.
595 Also, redirect stdin to /dev/null. */
596 if (remote_connection_is_stdio ())
597 {
598 close (0);
599 open ("/dev/null", O_RDONLY);
600 dup2 (2, 1);
3e52c33d
JK
601 if (write (2, "stdin/stdout redirected\n",
602 sizeof ("stdin/stdout redirected\n") - 1) < 0)
8c29b58e
YQ
603 {
604 /* Errors ignored. */;
605 }
e0f9f062
DE
606 }
607
2b876972
DJ
608 execv (program, allargs);
609 if (errno == ENOENT)
610 execvp (program, allargs);
da6d8c04
DJ
611
612 fprintf (stderr, "Cannot exec %s: %s.\n", program,
d07c63e7 613 strerror (errno));
da6d8c04
DJ
614 fflush (stderr);
615 _exit (0177);
616 }
617
03583c20
UW
618#ifdef HAVE_PERSONALITY
619 if (personality_set)
620 {
621 errno = 0;
622 personality (personality_orig);
623 if (errno != 0)
624 warning ("Error restoring address space randomization: %s",
625 strerror (errno));
626 }
627#endif
628
95954743
PA
629 linux_add_process (pid, 0);
630
631 ptid = ptid_build (pid, pid, 0);
632 new_lwp = add_lwp (ptid);
a6dbe5df 633 new_lwp->must_set_ptrace_flags = 1;
611cb4a5 634
a9fa9f7d 635 return pid;
da6d8c04
DJ
636}
637
7ae1a6a6
PA
638char *
639linux_attach_fail_reason_string (ptid_t ptid, int err)
640{
641 static char *reason_string;
642 struct buffer buffer;
643 char *warnings;
644 long lwpid = ptid_get_lwp (ptid);
645
646 xfree (reason_string);
647
648 buffer_init (&buffer);
649 linux_ptrace_attach_fail_reason (lwpid, &buffer);
650 buffer_grow_str0 (&buffer, "");
651 warnings = buffer_finish (&buffer);
652 if (warnings[0] != '\0')
653 reason_string = xstrprintf ("%s (%d), %s",
654 strerror (err), err, warnings);
655 else
656 reason_string = xstrprintf ("%s (%d)",
657 strerror (err), err);
658 xfree (warnings);
659 return reason_string;
660}
661
da6d8c04
DJ
662/* Attach to an inferior process. */
663
7ae1a6a6
PA
664int
665linux_attach_lwp (ptid_t ptid)
da6d8c04 666{
54a0b537 667 struct lwp_info *new_lwp;
7ae1a6a6 668 int lwpid = ptid_get_lwp (ptid);
611cb4a5 669
b8e1b30e 670 if (ptrace (PTRACE_ATTACH, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0)
56f7af9c 671 != 0)
7ae1a6a6 672 return errno;
24a09b5f 673
b3312d80 674 new_lwp = add_lwp (ptid);
0d62e5e8 675
a6dbe5df
PA
676 /* We need to wait for SIGSTOP before being able to make the next
677 ptrace call on this LWP. */
678 new_lwp->must_set_ptrace_flags = 1;
679
644cebc9 680 if (linux_proc_pid_is_stopped (lwpid))
c14d7ab2
PA
681 {
682 if (debug_threads)
87ce2a04 683 debug_printf ("Attached to a stopped process\n");
c14d7ab2
PA
684
685 /* The process is definitely stopped. It is in a job control
686 stop, unless the kernel predates the TASK_STOPPED /
687 TASK_TRACED distinction, in which case it might be in a
688 ptrace stop. Make sure it is in a ptrace stop; from there we
689 can kill it, signal it, et cetera.
690
691 First make sure there is a pending SIGSTOP. Since we are
692 already attached, the process can not transition from stopped
693 to running without a PTRACE_CONT; so we know this signal will
694 go into the queue. The SIGSTOP generated by PTRACE_ATTACH is
695 probably already in the queue (unless this kernel is old
696 enough to use TASK_STOPPED for ptrace stops); but since
697 SIGSTOP is not an RT signal, it can only be queued once. */
698 kill_lwp (lwpid, SIGSTOP);
699
700 /* Finally, resume the stopped process. This will deliver the
701 SIGSTOP (or a higher priority signal, just like normal
702 PTRACE_ATTACH), which we'll catch later on. */
b8e1b30e 703 ptrace (PTRACE_CONT, lwpid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
c14d7ab2
PA
704 }
705
0d62e5e8 706 /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
0e21c1ec
DE
707 brings it to a halt.
708
709 There are several cases to consider here:
710
711 1) gdbserver has already attached to the process and is being notified
1b3f6016 712 of a new thread that is being created.
d50171e4
PA
713 In this case we should ignore that SIGSTOP and resume the
714 process. This is handled below by setting stop_expected = 1,
8336d594 715 and the fact that add_thread sets last_resume_kind ==
d50171e4 716 resume_continue.
0e21c1ec
DE
717
718 2) This is the first thread (the process thread), and we're attaching
1b3f6016
PA
719 to it via attach_inferior.
720 In this case we want the process thread to stop.
d50171e4
PA
721 This is handled by having linux_attach set last_resume_kind ==
722 resume_stop after we return.
e3deef73
LM
723
724 If the pid we are attaching to is also the tgid, we attach to and
725 stop all the existing threads. Otherwise, we attach to pid and
726 ignore any other threads in the same group as this pid.
0e21c1ec
DE
727
728 3) GDB is connecting to gdbserver and is requesting an enumeration of all
1b3f6016
PA
729 existing threads.
730 In this case we want the thread to stop.
731 FIXME: This case is currently not properly handled.
732 We should wait for the SIGSTOP but don't. Things work apparently
733 because enough time passes between when we ptrace (ATTACH) and when
734 gdb makes the next ptrace call on the thread.
0d62e5e8
DJ
735
736 On the other hand, if we are currently trying to stop all threads, we
737 should treat the new thread as if we had sent it a SIGSTOP. This works
54a0b537 738 because we are guaranteed that the add_lwp call above added us to the
0e21c1ec
DE
739 end of the list, and so the new thread has not yet reached
740 wait_for_sigstop (but will). */
d50171e4 741 new_lwp->stop_expected = 1;
0d62e5e8 742
7ae1a6a6 743 return 0;
95954743
PA
744}
745
e3deef73
LM
746/* Attach to PID. If PID is the tgid, attach to it and all
747 of its threads. */
748
c52daf70 749static int
a1928bad 750linux_attach (unsigned long pid)
0d62e5e8 751{
7ae1a6a6
PA
752 ptid_t ptid = ptid_build (pid, pid, 0);
753 int err;
754
e3deef73
LM
755 /* Attach to PID. We will check for other threads
756 soon. */
7ae1a6a6
PA
757 err = linux_attach_lwp (ptid);
758 if (err != 0)
759 error ("Cannot attach to process %ld: %s",
760 pid, linux_attach_fail_reason_string (ptid, err));
761
95954743 762 linux_add_process (pid, 1);
0d62e5e8 763
bd99dc85
PA
764 if (!non_stop)
765 {
8336d594
PA
766 struct thread_info *thread;
767
768 /* Don't ignore the initial SIGSTOP if we just attached to this
769 process. It will be collected by wait shortly. */
770 thread = find_thread_ptid (ptid_build (pid, pid, 0));
771 thread->last_resume_kind = resume_stop;
bd99dc85 772 }
0d62e5e8 773
e3deef73
LM
774 if (linux_proc_get_tgid (pid) == pid)
775 {
776 DIR *dir;
777 char pathname[128];
778
779 sprintf (pathname, "/proc/%ld/task", pid);
780
781 dir = opendir (pathname);
782
783 if (!dir)
784 {
785 fprintf (stderr, "Could not open /proc/%ld/task.\n", pid);
786 fflush (stderr);
787 }
788 else
789 {
790 /* At this point we attached to the tgid. Scan the task for
791 existing threads. */
e3deef73
LM
792 int new_threads_found;
793 int iterations = 0;
e3deef73
LM
794
795 while (iterations < 2)
796 {
7ae1a6a6
PA
797 struct dirent *dp;
798
e3deef73
LM
799 new_threads_found = 0;
800 /* Add all the other threads. While we go through the
801 threads, new threads may be spawned. Cycle through
802 the list of threads until we have done two iterations without
803 finding new threads. */
804 while ((dp = readdir (dir)) != NULL)
805 {
7ae1a6a6
PA
806 unsigned long lwp;
807 ptid_t ptid;
808
e3deef73
LM
809 /* Fetch one lwp. */
810 lwp = strtoul (dp->d_name, NULL, 10);
811
7ae1a6a6
PA
812 ptid = ptid_build (pid, lwp, 0);
813
e3deef73 814 /* Is this a new thread? */
7ae1a6a6 815 if (lwp != 0 && find_thread_ptid (ptid) == NULL)
e3deef73 816 {
7ae1a6a6 817 int err;
e3deef73
LM
818
819 if (debug_threads)
7ae1a6a6
PA
820 debug_printf ("Found new lwp %ld\n", lwp);
821
822 err = linux_attach_lwp (ptid);
823 if (err != 0)
824 warning ("Cannot attach to lwp %ld: %s",
825 lwp,
826 linux_attach_fail_reason_string (ptid, err));
827
828 new_threads_found++;
e3deef73
LM
829 }
830 }
831
832 if (!new_threads_found)
833 iterations++;
834 else
835 iterations = 0;
836
837 rewinddir (dir);
838 }
839 closedir (dir);
840 }
841 }
842
95954743
PA
843 return 0;
844}
845
846struct counter
847{
848 int pid;
849 int count;
850};
851
852static int
853second_thread_of_pid_p (struct inferior_list_entry *entry, void *args)
854{
855 struct counter *counter = args;
856
857 if (ptid_get_pid (entry->id) == counter->pid)
858 {
859 if (++counter->count > 1)
860 return 1;
861 }
d61ddec4 862
da6d8c04
DJ
863 return 0;
864}
865
95954743 866static int
fa96cb38 867last_thread_of_process_p (int pid)
95954743 868{
95954743 869 struct counter counter = { pid , 0 };
da6d8c04 870
95954743
PA
871 return (find_inferior (&all_threads,
872 second_thread_of_pid_p, &counter) == NULL);
873}
874
da84f473
PA
875/* Kill LWP. */
876
877static void
878linux_kill_one_lwp (struct lwp_info *lwp)
879{
d86d4aaf
DE
880 struct thread_info *thr = get_lwp_thread (lwp);
881 int pid = lwpid_of (thr);
da84f473
PA
882
883 /* PTRACE_KILL is unreliable. After stepping into a signal handler,
884 there is no signal context, and ptrace(PTRACE_KILL) (or
885 ptrace(PTRACE_CONT, SIGKILL), pretty much the same) acts like
886 ptrace(CONT, pid, 0,0) and just resumes the tracee. A better
887 alternative is to kill with SIGKILL. We only need one SIGKILL
888 per process, not one for each thread. But since we still support
889 linuxthreads, and we also support debugging programs using raw
890 clone without CLONE_THREAD, we send one for each thread. For
891 years, we used PTRACE_KILL only, so we're being a bit paranoid
892 about some old kernels where PTRACE_KILL might work better
893 (dubious if there are any such, but that's why it's paranoia), so
894 we try SIGKILL first, PTRACE_KILL second, and so we're fine
895 everywhere. */
896
897 errno = 0;
69ff6be5 898 kill_lwp (pid, SIGKILL);
da84f473 899 if (debug_threads)
ce9e3fe7
PA
900 {
901 int save_errno = errno;
902
903 debug_printf ("LKL: kill_lwp (SIGKILL) %s, 0, 0 (%s)\n",
904 target_pid_to_str (ptid_of (thr)),
905 save_errno ? strerror (save_errno) : "OK");
906 }
da84f473
PA
907
908 errno = 0;
b8e1b30e 909 ptrace (PTRACE_KILL, pid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0);
da84f473 910 if (debug_threads)
ce9e3fe7
PA
911 {
912 int save_errno = errno;
913
914 debug_printf ("LKL: PTRACE_KILL %s, 0, 0 (%s)\n",
915 target_pid_to_str (ptid_of (thr)),
916 save_errno ? strerror (save_errno) : "OK");
917 }
da84f473
PA
918}
919
e76126e8
PA
920/* Kill LWP and wait for it to die. */
921
922static void
923kill_wait_lwp (struct lwp_info *lwp)
924{
925 struct thread_info *thr = get_lwp_thread (lwp);
926 int pid = ptid_get_pid (ptid_of (thr));
927 int lwpid = ptid_get_lwp (ptid_of (thr));
928 int wstat;
929 int res;
930
931 if (debug_threads)
932 debug_printf ("kwl: killing lwp %d, for pid: %d\n", lwpid, pid);
933
934 do
935 {
936 linux_kill_one_lwp (lwp);
937
938 /* Make sure it died. Notes:
939
940 - The loop is most likely unnecessary.
941
942 - We don't use linux_wait_for_event as that could delete lwps
943 while we're iterating over them. We're not interested in
944 any pending status at this point, only in making sure all
945 wait status on the kernel side are collected until the
946 process is reaped.
947
948 - We don't use __WALL here as the __WALL emulation relies on
949 SIGCHLD, and killing a stopped process doesn't generate
950 one, nor an exit status.
951 */
952 res = my_waitpid (lwpid, &wstat, 0);
953 if (res == -1 && errno == ECHILD)
954 res = my_waitpid (lwpid, &wstat, __WCLONE);
955 } while (res > 0 && WIFSTOPPED (wstat));
956
957 gdb_assert (res > 0);
958}
959
da84f473
PA
960/* Callback for `find_inferior'. Kills an lwp of a given process,
961 except the leader. */
95954743
PA
962
963static int
da84f473 964kill_one_lwp_callback (struct inferior_list_entry *entry, void *args)
da6d8c04 965{
0d62e5e8 966 struct thread_info *thread = (struct thread_info *) entry;
54a0b537 967 struct lwp_info *lwp = get_thread_lwp (thread);
95954743
PA
968 int pid = * (int *) args;
969
970 if (ptid_get_pid (entry->id) != pid)
971 return 0;
0d62e5e8 972
fd500816
DJ
973 /* We avoid killing the first thread here, because of a Linux kernel (at
974 least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
975 the children get a chance to be reaped, it will remain a zombie
976 forever. */
95954743 977
d86d4aaf 978 if (lwpid_of (thread) == pid)
95954743
PA
979 {
980 if (debug_threads)
87ce2a04
DE
981 debug_printf ("lkop: is last of process %s\n",
982 target_pid_to_str (entry->id));
95954743
PA
983 return 0;
984 }
fd500816 985
e76126e8 986 kill_wait_lwp (lwp);
95954743 987 return 0;
da6d8c04
DJ
988}
989
95954743
PA
990static int
991linux_kill (int pid)
0d62e5e8 992{
95954743 993 struct process_info *process;
54a0b537 994 struct lwp_info *lwp;
fd500816 995
95954743
PA
996 process = find_process_pid (pid);
997 if (process == NULL)
998 return -1;
9d606399 999
f9e39928
PA
1000 /* If we're killing a running inferior, make sure it is stopped
1001 first, as PTRACE_KILL will not work otherwise. */
7984d532 1002 stop_all_lwps (0, NULL);
f9e39928 1003
da84f473 1004 find_inferior (&all_threads, kill_one_lwp_callback , &pid);
fd500816 1005
54a0b537 1006 /* See the comment in linux_kill_one_lwp. We did not kill the first
fd500816 1007 thread in the list, so do so now. */
95954743 1008 lwp = find_lwp_pid (pid_to_ptid (pid));
bd99dc85 1009
784867a5 1010 if (lwp == NULL)
fd500816 1011 {
784867a5 1012 if (debug_threads)
d86d4aaf
DE
1013 debug_printf ("lk_1: cannot find lwp for pid: %d\n",
1014 pid);
784867a5
JK
1015 }
1016 else
e76126e8 1017 kill_wait_lwp (lwp);
2d717e4f 1018
8336d594 1019 the_target->mourn (process);
f9e39928
PA
1020
1021 /* Since we presently can only stop all lwps of all processes, we
1022 need to unstop lwps of other processes. */
7984d532 1023 unstop_all_lwps (0, NULL);
95954743 1024 return 0;
0d62e5e8
DJ
1025}
1026
9b224c5e
PA
1027/* Get pending signal of THREAD, for detaching purposes. This is the
1028 signal the thread last stopped for, which we need to deliver to the
1029 thread when detaching, otherwise, it'd be suppressed/lost. */
1030
1031static int
1032get_detach_signal (struct thread_info *thread)
1033{
a493e3e2 1034 enum gdb_signal signo = GDB_SIGNAL_0;
9b224c5e
PA
1035 int status;
1036 struct lwp_info *lp = get_thread_lwp (thread);
1037
1038 if (lp->status_pending_p)
1039 status = lp->status_pending;
1040 else
1041 {
1042 /* If the thread had been suspended by gdbserver, and it stopped
1043 cleanly, then it'll have stopped with SIGSTOP. But we don't
1044 want to deliver that SIGSTOP. */
1045 if (thread->last_status.kind != TARGET_WAITKIND_STOPPED
a493e3e2 1046 || thread->last_status.value.sig == GDB_SIGNAL_0)
9b224c5e
PA
1047 return 0;
1048
1049 /* Otherwise, we may need to deliver the signal we
1050 intercepted. */
1051 status = lp->last_status;
1052 }
1053
1054 if (!WIFSTOPPED (status))
1055 {
1056 if (debug_threads)
87ce2a04 1057 debug_printf ("GPS: lwp %s hasn't stopped: no pending signal\n",
d86d4aaf 1058 target_pid_to_str (ptid_of (thread)));
9b224c5e
PA
1059 return 0;
1060 }
1061
1062 /* Extended wait statuses aren't real SIGTRAPs. */
1063 if (WSTOPSIG (status) == SIGTRAP && status >> 16 != 0)
1064 {
1065 if (debug_threads)
87ce2a04
DE
1066 debug_printf ("GPS: lwp %s had stopped with extended "
1067 "status: no pending signal\n",
d86d4aaf 1068 target_pid_to_str (ptid_of (thread)));
9b224c5e
PA
1069 return 0;
1070 }
1071
2ea28649 1072 signo = gdb_signal_from_host (WSTOPSIG (status));
9b224c5e
PA
1073
1074 if (program_signals_p && !program_signals[signo])
1075 {
1076 if (debug_threads)
87ce2a04 1077 debug_printf ("GPS: lwp %s had signal %s, but it is in nopass state\n",
d86d4aaf 1078 target_pid_to_str (ptid_of (thread)),
87ce2a04 1079 gdb_signal_to_string (signo));
9b224c5e
PA
1080 return 0;
1081 }
1082 else if (!program_signals_p
1083 /* If we have no way to know which signals GDB does not
1084 want to have passed to the program, assume
1085 SIGTRAP/SIGINT, which is GDB's default. */
a493e3e2 1086 && (signo == GDB_SIGNAL_TRAP || signo == GDB_SIGNAL_INT))
9b224c5e
PA
1087 {
1088 if (debug_threads)
87ce2a04
DE
1089 debug_printf ("GPS: lwp %s had signal %s, "
1090 "but we don't know if we should pass it. "
1091 "Default to not.\n",
d86d4aaf 1092 target_pid_to_str (ptid_of (thread)),
87ce2a04 1093 gdb_signal_to_string (signo));
9b224c5e
PA
1094 return 0;
1095 }
1096 else
1097 {
1098 if (debug_threads)
87ce2a04 1099 debug_printf ("GPS: lwp %s has pending signal %s: delivering it.\n",
d86d4aaf 1100 target_pid_to_str (ptid_of (thread)),
87ce2a04 1101 gdb_signal_to_string (signo));
9b224c5e
PA
1102
1103 return WSTOPSIG (status);
1104 }
1105}
1106
95954743
PA
1107static int
1108linux_detach_one_lwp (struct inferior_list_entry *entry, void *args)
6ad8ae5c
DJ
1109{
1110 struct thread_info *thread = (struct thread_info *) entry;
54a0b537 1111 struct lwp_info *lwp = get_thread_lwp (thread);
95954743 1112 int pid = * (int *) args;
9b224c5e 1113 int sig;
95954743
PA
1114
1115 if (ptid_get_pid (entry->id) != pid)
1116 return 0;
6ad8ae5c 1117
9b224c5e 1118 /* If there is a pending SIGSTOP, get rid of it. */
54a0b537 1119 if (lwp->stop_expected)
ae13219e 1120 {
9b224c5e 1121 if (debug_threads)
87ce2a04 1122 debug_printf ("Sending SIGCONT to %s\n",
d86d4aaf 1123 target_pid_to_str (ptid_of (thread)));
9b224c5e 1124
d86d4aaf 1125 kill_lwp (lwpid_of (thread), SIGCONT);
54a0b537 1126 lwp->stop_expected = 0;
ae13219e
DJ
1127 }
1128
1129 /* Flush any pending changes to the process's registers. */
d86d4aaf 1130 regcache_invalidate_thread (thread);
ae13219e 1131
9b224c5e
PA
1132 /* Pass on any pending signal for this thread. */
1133 sig = get_detach_signal (thread);
1134
ae13219e 1135 /* Finally, let it resume. */
82bfbe7e
PA
1136 if (the_low_target.prepare_to_resume != NULL)
1137 the_low_target.prepare_to_resume (lwp);
d86d4aaf 1138 if (ptrace (PTRACE_DETACH, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
b8e1b30e 1139 (PTRACE_TYPE_ARG4) (long) sig) < 0)
9b224c5e 1140 error (_("Can't detach %s: %s"),
d86d4aaf 1141 target_pid_to_str (ptid_of (thread)),
9b224c5e 1142 strerror (errno));
bd99dc85
PA
1143
1144 delete_lwp (lwp);
95954743 1145 return 0;
6ad8ae5c
DJ
1146}
1147
95954743
PA
1148static int
1149linux_detach (int pid)
1150{
1151 struct process_info *process;
1152
1153 process = find_process_pid (pid);
1154 if (process == NULL)
1155 return -1;
1156
f9e39928
PA
1157 /* Stop all threads before detaching. First, ptrace requires that
1158 the thread is stopped to sucessfully detach. Second, thread_db
1159 may need to uninstall thread event breakpoints from memory, which
1160 only works with a stopped process anyway. */
7984d532 1161 stop_all_lwps (0, NULL);
f9e39928 1162
ca5c370d 1163#ifdef USE_THREAD_DB
8336d594 1164 thread_db_detach (process);
ca5c370d
PA
1165#endif
1166
fa593d66
PA
1167 /* Stabilize threads (move out of jump pads). */
1168 stabilize_threads ();
1169
95954743 1170 find_inferior (&all_threads, linux_detach_one_lwp, &pid);
8336d594
PA
1171
1172 the_target->mourn (process);
f9e39928
PA
1173
1174 /* Since we presently can only stop all lwps of all processes, we
1175 need to unstop lwps of other processes. */
7984d532 1176 unstop_all_lwps (0, NULL);
f9e39928
PA
1177 return 0;
1178}
1179
1180/* Remove all LWPs that belong to process PROC from the lwp list. */
1181
1182static int
1183delete_lwp_callback (struct inferior_list_entry *entry, void *proc)
1184{
d86d4aaf
DE
1185 struct thread_info *thread = (struct thread_info *) entry;
1186 struct lwp_info *lwp = get_thread_lwp (thread);
f9e39928
PA
1187 struct process_info *process = proc;
1188
d86d4aaf 1189 if (pid_of (thread) == pid_of (process))
f9e39928
PA
1190 delete_lwp (lwp);
1191
dd6953e1 1192 return 0;
6ad8ae5c
DJ
1193}
1194
8336d594
PA
1195static void
1196linux_mourn (struct process_info *process)
1197{
1198 struct process_info_private *priv;
1199
1200#ifdef USE_THREAD_DB
1201 thread_db_mourn (process);
1202#endif
1203
d86d4aaf 1204 find_inferior (&all_threads, delete_lwp_callback, process);
f9e39928 1205
8336d594
PA
1206 /* Freeing all private data. */
1207 priv = process->private;
1208 free (priv->arch_private);
1209 free (priv);
1210 process->private = NULL;
505106cd
PA
1211
1212 remove_process (process);
8336d594
PA
1213}
1214
444d6139 1215static void
95954743 1216linux_join (int pid)
444d6139 1217{
444d6139
PA
1218 int status, ret;
1219
1220 do {
95954743 1221 ret = my_waitpid (pid, &status, 0);
444d6139
PA
1222 if (WIFEXITED (status) || WIFSIGNALED (status))
1223 break;
1224 } while (ret != -1 || errno != ECHILD);
1225}
1226
6ad8ae5c 1227/* Return nonzero if the given thread is still alive. */
0d62e5e8 1228static int
95954743 1229linux_thread_alive (ptid_t ptid)
0d62e5e8 1230{
95954743
PA
1231 struct lwp_info *lwp = find_lwp_pid (ptid);
1232
1233 /* We assume we always know if a thread exits. If a whole process
1234 exited but we still haven't been able to report it to GDB, we'll
1235 hold on to the last lwp of the dead process. */
1236 if (lwp != NULL)
1237 return !lwp->dead;
0d62e5e8
DJ
1238 else
1239 return 0;
1240}
1241
6bf5e0ba 1242/* Return 1 if this lwp has an interesting status pending. */
611cb4a5 1243static int
d50171e4 1244status_pending_p_callback (struct inferior_list_entry *entry, void *arg)
0d62e5e8 1245{
d86d4aaf
DE
1246 struct thread_info *thread = (struct thread_info *) entry;
1247 struct lwp_info *lwp = get_thread_lwp (thread);
95954743
PA
1248 ptid_t ptid = * (ptid_t *) arg;
1249
1250 /* Check if we're only interested in events from a specific process
1251 or its lwps. */
1252 if (!ptid_equal (minus_one_ptid, ptid)
d86d4aaf 1253 && ptid_get_pid (ptid) != ptid_get_pid (thread->entry.id))
95954743 1254 return 0;
0d62e5e8 1255
d50171e4
PA
1256 /* If we got a `vCont;t', but we haven't reported a stop yet, do
1257 report any status pending the LWP may have. */
8336d594 1258 if (thread->last_resume_kind == resume_stop
7984d532 1259 && thread->last_status.kind != TARGET_WAITKIND_IGNORE)
d50171e4 1260 return 0;
0d62e5e8 1261
d50171e4 1262 return lwp->status_pending_p;
0d62e5e8
DJ
1263}
1264
95954743
PA
1265static int
1266same_lwp (struct inferior_list_entry *entry, void *data)
1267{
1268 ptid_t ptid = *(ptid_t *) data;
1269 int lwp;
1270
1271 if (ptid_get_lwp (ptid) != 0)
1272 lwp = ptid_get_lwp (ptid);
1273 else
1274 lwp = ptid_get_pid (ptid);
1275
1276 if (ptid_get_lwp (entry->id) == lwp)
1277 return 1;
1278
1279 return 0;
1280}
1281
1282struct lwp_info *
1283find_lwp_pid (ptid_t ptid)
1284{
d86d4aaf
DE
1285 struct inferior_list_entry *thread
1286 = find_inferior (&all_threads, same_lwp, &ptid);
1287
1288 if (thread == NULL)
1289 return NULL;
1290
1291 return get_thread_lwp ((struct thread_info *) thread);
95954743
PA
1292}
1293
fa96cb38 1294/* Return the number of known LWPs in the tgid given by PID. */
0d62e5e8 1295
fa96cb38
PA
1296static int
1297num_lwps (int pid)
1298{
1299 struct inferior_list_entry *inf, *tmp;
1300 int count = 0;
0d62e5e8 1301
fa96cb38 1302 ALL_INFERIORS (&all_threads, inf, tmp)
24a09b5f 1303 {
fa96cb38
PA
1304 if (ptid_get_pid (inf->id) == pid)
1305 count++;
24a09b5f 1306 }
3aee8918 1307
fa96cb38
PA
1308 return count;
1309}
d61ddec4 1310
fa96cb38
PA
1311/* Detect zombie thread group leaders, and "exit" them. We can't reap
1312 their exits until all other threads in the group have exited. */
c3adc08c 1313
fa96cb38
PA
1314static void
1315check_zombie_leaders (void)
1316{
1317 struct process_info *proc, *tmp;
c3adc08c 1318
fa96cb38 1319 ALL_PROCESSES (proc, tmp)
c3adc08c 1320 {
fa96cb38
PA
1321 pid_t leader_pid = pid_of (proc);
1322 struct lwp_info *leader_lp;
c3adc08c 1323
fa96cb38 1324 leader_lp = find_lwp_pid (pid_to_ptid (leader_pid));
c3adc08c 1325
fa96cb38
PA
1326 if (debug_threads)
1327 debug_printf ("leader_pid=%d, leader_lp!=NULL=%d, "
1328 "num_lwps=%d, zombie=%d\n",
1329 leader_pid, leader_lp!= NULL, num_lwps (leader_pid),
1330 linux_proc_pid_is_zombie (leader_pid));
1331
1332 if (leader_lp != NULL
1333 /* Check if there are other threads in the group, as we may
1334 have raced with the inferior simply exiting. */
1335 && !last_thread_of_process_p (leader_pid)
1336 && linux_proc_pid_is_zombie (leader_pid))
1337 {
1338 /* A leader zombie can mean one of two things:
1339
1340 - It exited, and there's an exit status pending
1341 available, or only the leader exited (not the whole
1342 program). In the latter case, we can't waitpid the
1343 leader's exit status until all other threads are gone.
1344
1345 - There are 3 or more threads in the group, and a thread
1346 other than the leader exec'd. On an exec, the Linux
1347 kernel destroys all other threads (except the execing
1348 one) in the thread group, and resets the execing thread's
1349 tid to the tgid. No exit notification is sent for the
1350 execing thread -- from the ptracer's perspective, it
1351 appears as though the execing thread just vanishes.
1352 Until we reap all other threads except the leader and the
1353 execing thread, the leader will be zombie, and the
1354 execing thread will be in `D (disc sleep)'. As soon as
1355 all other threads are reaped, the execing thread changes
1356 it's tid to the tgid, and the previous (zombie) leader
1357 vanishes, giving place to the "new" leader. We could try
1358 distinguishing the exit and exec cases, by waiting once
1359 more, and seeing if something comes out, but it doesn't
1360 sound useful. The previous leader _does_ go away, and
1361 we'll re-add the new one once we see the exec event
1362 (which is just the same as what would happen if the
1363 previous leader did exit voluntarily before some other
1364 thread execs). */
c3adc08c 1365
fa96cb38
PA
1366 if (debug_threads)
1367 fprintf (stderr,
1368 "CZL: Thread group leader %d zombie "
1369 "(it exited, or another thread execd).\n",
1370 leader_pid);
c3adc08c 1371
fa96cb38 1372 delete_lwp (leader_lp);
c3adc08c
PA
1373 }
1374 }
fa96cb38 1375}
c3adc08c 1376
fa96cb38
PA
1377/* Callback for `find_inferior'. Returns the first LWP that is not
1378 stopped. ARG is a PTID filter. */
d50171e4 1379
fa96cb38
PA
1380static int
1381not_stopped_callback (struct inferior_list_entry *entry, void *arg)
1382{
1383 struct thread_info *thr = (struct thread_info *) entry;
1384 struct lwp_info *lwp;
1385 ptid_t filter = *(ptid_t *) arg;
47c0c975 1386
fa96cb38
PA
1387 if (!ptid_match (ptid_of (thr), filter))
1388 return 0;
bd99dc85 1389
fa96cb38
PA
1390 lwp = get_thread_lwp (thr);
1391 if (!lwp->stopped)
1392 return 1;
1393
1394 return 0;
0d62e5e8 1395}
611cb4a5 1396
219f2f23
PA
1397/* This function should only be called if the LWP got a SIGTRAP.
1398
1399 Handle any tracepoint steps or hits. Return true if a tracepoint
1400 event was handled, 0 otherwise. */
1401
1402static int
1403handle_tracepoints (struct lwp_info *lwp)
1404{
1405 struct thread_info *tinfo = get_lwp_thread (lwp);
1406 int tpoint_related_event = 0;
1407
7984d532
PA
1408 /* If this tracepoint hit causes a tracing stop, we'll immediately
1409 uninsert tracepoints. To do this, we temporarily pause all
1410 threads, unpatch away, and then unpause threads. We need to make
1411 sure the unpausing doesn't resume LWP too. */
1412 lwp->suspended++;
1413
219f2f23
PA
1414 /* And we need to be sure that any all-threads-stopping doesn't try
1415 to move threads out of the jump pads, as it could deadlock the
1416 inferior (LWP could be in the jump pad, maybe even holding the
1417 lock.) */
1418
1419 /* Do any necessary step collect actions. */
1420 tpoint_related_event |= tracepoint_finished_step (tinfo, lwp->stop_pc);
1421
fa593d66
PA
1422 tpoint_related_event |= handle_tracepoint_bkpts (tinfo, lwp->stop_pc);
1423
219f2f23
PA
1424 /* See if we just hit a tracepoint and do its main collect
1425 actions. */
1426 tpoint_related_event |= tracepoint_was_hit (tinfo, lwp->stop_pc);
1427
7984d532
PA
1428 lwp->suspended--;
1429
1430 gdb_assert (lwp->suspended == 0);
fa593d66 1431 gdb_assert (!stabilizing_threads || lwp->collecting_fast_tracepoint);
7984d532 1432
219f2f23
PA
1433 if (tpoint_related_event)
1434 {
1435 if (debug_threads)
87ce2a04 1436 debug_printf ("got a tracepoint event\n");
219f2f23
PA
1437 return 1;
1438 }
1439
1440 return 0;
1441}
1442
fa593d66
PA
1443/* Convenience wrapper. Returns true if LWP is presently collecting a
1444 fast tracepoint. */
1445
1446static int
1447linux_fast_tracepoint_collecting (struct lwp_info *lwp,
1448 struct fast_tpoint_collect_status *status)
1449{
1450 CORE_ADDR thread_area;
d86d4aaf 1451 struct thread_info *thread = get_lwp_thread (lwp);
fa593d66
PA
1452
1453 if (the_low_target.get_thread_area == NULL)
1454 return 0;
1455
1456 /* Get the thread area address. This is used to recognize which
1457 thread is which when tracing with the in-process agent library.
1458 We don't read anything from the address, and treat it as opaque;
1459 it's the address itself that we assume is unique per-thread. */
d86d4aaf 1460 if ((*the_low_target.get_thread_area) (lwpid_of (thread), &thread_area) == -1)
fa593d66
PA
1461 return 0;
1462
1463 return fast_tracepoint_collecting (thread_area, lwp->stop_pc, status);
1464}
1465
1466/* The reason we resume in the caller, is because we want to be able
1467 to pass lwp->status_pending as WSTAT, and we need to clear
1468 status_pending_p before resuming, otherwise, linux_resume_one_lwp
1469 refuses to resume. */
1470
1471static int
1472maybe_move_out_of_jump_pad (struct lwp_info *lwp, int *wstat)
1473{
1474 struct thread_info *saved_inferior;
1475
1476 saved_inferior = current_inferior;
1477 current_inferior = get_lwp_thread (lwp);
1478
1479 if ((wstat == NULL
1480 || (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) != SIGTRAP))
1481 && supports_fast_tracepoints ()
58b4daa5 1482 && agent_loaded_p ())
fa593d66
PA
1483 {
1484 struct fast_tpoint_collect_status status;
1485 int r;
1486
1487 if (debug_threads)
87ce2a04
DE
1488 debug_printf ("Checking whether LWP %ld needs to move out of the "
1489 "jump pad.\n",
d86d4aaf 1490 lwpid_of (current_inferior));
fa593d66
PA
1491
1492 r = linux_fast_tracepoint_collecting (lwp, &status);
1493
1494 if (wstat == NULL
1495 || (WSTOPSIG (*wstat) != SIGILL
1496 && WSTOPSIG (*wstat) != SIGFPE
1497 && WSTOPSIG (*wstat) != SIGSEGV
1498 && WSTOPSIG (*wstat) != SIGBUS))
1499 {
1500 lwp->collecting_fast_tracepoint = r;
1501
1502 if (r != 0)
1503 {
1504 if (r == 1 && lwp->exit_jump_pad_bkpt == NULL)
1505 {
1506 /* Haven't executed the original instruction yet.
1507 Set breakpoint there, and wait till it's hit,
1508 then single-step until exiting the jump pad. */
1509 lwp->exit_jump_pad_bkpt
1510 = set_breakpoint_at (status.adjusted_insn_addr, NULL);
1511 }
1512
1513 if (debug_threads)
87ce2a04
DE
1514 debug_printf ("Checking whether LWP %ld needs to move out of "
1515 "the jump pad...it does\n",
d86d4aaf 1516 lwpid_of (current_inferior));
0cccb683 1517 current_inferior = saved_inferior;
fa593d66
PA
1518
1519 return 1;
1520 }
1521 }
1522 else
1523 {
1524 /* If we get a synchronous signal while collecting, *and*
1525 while executing the (relocated) original instruction,
1526 reset the PC to point at the tpoint address, before
1527 reporting to GDB. Otherwise, it's an IPA lib bug: just
1528 report the signal to GDB, and pray for the best. */
1529
1530 lwp->collecting_fast_tracepoint = 0;
1531
1532 if (r != 0
1533 && (status.adjusted_insn_addr <= lwp->stop_pc
1534 && lwp->stop_pc < status.adjusted_insn_addr_end))
1535 {
1536 siginfo_t info;
1537 struct regcache *regcache;
1538
1539 /* The si_addr on a few signals references the address
1540 of the faulting instruction. Adjust that as
1541 well. */
1542 if ((WSTOPSIG (*wstat) == SIGILL
1543 || WSTOPSIG (*wstat) == SIGFPE
1544 || WSTOPSIG (*wstat) == SIGBUS
1545 || WSTOPSIG (*wstat) == SIGSEGV)
d86d4aaf 1546 && ptrace (PTRACE_GETSIGINFO, lwpid_of (current_inferior),
b8e1b30e 1547 (PTRACE_TYPE_ARG3) 0, &info) == 0
fa593d66
PA
1548 /* Final check just to make sure we don't clobber
1549 the siginfo of non-kernel-sent signals. */
1550 && (uintptr_t) info.si_addr == lwp->stop_pc)
1551 {
1552 info.si_addr = (void *) (uintptr_t) status.tpoint_addr;
d86d4aaf 1553 ptrace (PTRACE_SETSIGINFO, lwpid_of (current_inferior),
b8e1b30e 1554 (PTRACE_TYPE_ARG3) 0, &info);
fa593d66
PA
1555 }
1556
d86d4aaf 1557 regcache = get_thread_regcache (current_inferior, 1);
fa593d66
PA
1558 (*the_low_target.set_pc) (regcache, status.tpoint_addr);
1559 lwp->stop_pc = status.tpoint_addr;
1560
1561 /* Cancel any fast tracepoint lock this thread was
1562 holding. */
1563 force_unlock_trace_buffer ();
1564 }
1565
1566 if (lwp->exit_jump_pad_bkpt != NULL)
1567 {
1568 if (debug_threads)
87ce2a04
DE
1569 debug_printf ("Cancelling fast exit-jump-pad: removing bkpt. "
1570 "stopping all threads momentarily.\n");
fa593d66
PA
1571
1572 stop_all_lwps (1, lwp);
1573 cancel_breakpoints ();
1574
1575 delete_breakpoint (lwp->exit_jump_pad_bkpt);
1576 lwp->exit_jump_pad_bkpt = NULL;
1577
1578 unstop_all_lwps (1, lwp);
1579
1580 gdb_assert (lwp->suspended >= 0);
1581 }
1582 }
1583 }
1584
1585 if (debug_threads)
87ce2a04
DE
1586 debug_printf ("Checking whether LWP %ld needs to move out of the "
1587 "jump pad...no\n",
d86d4aaf 1588 lwpid_of (current_inferior));
0cccb683
YQ
1589
1590 current_inferior = saved_inferior;
fa593d66
PA
1591 return 0;
1592}
1593
1594/* Enqueue one signal in the "signals to report later when out of the
1595 jump pad" list. */
1596
1597static void
1598enqueue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
1599{
1600 struct pending_signals *p_sig;
d86d4aaf 1601 struct thread_info *thread = get_lwp_thread (lwp);
fa593d66
PA
1602
1603 if (debug_threads)
87ce2a04 1604 debug_printf ("Deferring signal %d for LWP %ld.\n",
d86d4aaf 1605 WSTOPSIG (*wstat), lwpid_of (thread));
fa593d66
PA
1606
1607 if (debug_threads)
1608 {
1609 struct pending_signals *sig;
1610
1611 for (sig = lwp->pending_signals_to_report;
1612 sig != NULL;
1613 sig = sig->prev)
87ce2a04
DE
1614 debug_printf (" Already queued %d\n",
1615 sig->signal);
fa593d66 1616
87ce2a04 1617 debug_printf (" (no more currently queued signals)\n");
fa593d66
PA
1618 }
1619
1a981360
PA
1620 /* Don't enqueue non-RT signals if they are already in the deferred
1621 queue. (SIGSTOP being the easiest signal to see ending up here
1622 twice) */
1623 if (WSTOPSIG (*wstat) < __SIGRTMIN)
1624 {
1625 struct pending_signals *sig;
1626
1627 for (sig = lwp->pending_signals_to_report;
1628 sig != NULL;
1629 sig = sig->prev)
1630 {
1631 if (sig->signal == WSTOPSIG (*wstat))
1632 {
1633 if (debug_threads)
87ce2a04
DE
1634 debug_printf ("Not requeuing already queued non-RT signal %d"
1635 " for LWP %ld\n",
1636 sig->signal,
d86d4aaf 1637 lwpid_of (thread));
1a981360
PA
1638 return;
1639 }
1640 }
1641 }
1642
fa593d66
PA
1643 p_sig = xmalloc (sizeof (*p_sig));
1644 p_sig->prev = lwp->pending_signals_to_report;
1645 p_sig->signal = WSTOPSIG (*wstat);
1646 memset (&p_sig->info, 0, sizeof (siginfo_t));
d86d4aaf 1647 ptrace (PTRACE_GETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
56f7af9c 1648 &p_sig->info);
fa593d66
PA
1649
1650 lwp->pending_signals_to_report = p_sig;
1651}
1652
1653/* Dequeue one signal from the "signals to report later when out of
1654 the jump pad" list. */
1655
1656static int
1657dequeue_one_deferred_signal (struct lwp_info *lwp, int *wstat)
1658{
d86d4aaf
DE
1659 struct thread_info *thread = get_lwp_thread (lwp);
1660
fa593d66
PA
1661 if (lwp->pending_signals_to_report != NULL)
1662 {
1663 struct pending_signals **p_sig;
1664
1665 p_sig = &lwp->pending_signals_to_report;
1666 while ((*p_sig)->prev != NULL)
1667 p_sig = &(*p_sig)->prev;
1668
1669 *wstat = W_STOPCODE ((*p_sig)->signal);
1670 if ((*p_sig)->info.si_signo != 0)
d86d4aaf 1671 ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
56f7af9c 1672 &(*p_sig)->info);
fa593d66
PA
1673 free (*p_sig);
1674 *p_sig = NULL;
1675
1676 if (debug_threads)
87ce2a04 1677 debug_printf ("Reporting deferred signal %d for LWP %ld.\n",
d86d4aaf 1678 WSTOPSIG (*wstat), lwpid_of (thread));
fa593d66
PA
1679
1680 if (debug_threads)
1681 {
1682 struct pending_signals *sig;
1683
1684 for (sig = lwp->pending_signals_to_report;
1685 sig != NULL;
1686 sig = sig->prev)
87ce2a04
DE
1687 debug_printf (" Still queued %d\n",
1688 sig->signal);
fa593d66 1689
87ce2a04 1690 debug_printf (" (no more queued signals)\n");
fa593d66
PA
1691 }
1692
1693 return 1;
1694 }
1695
1696 return 0;
1697}
1698
d50171e4
PA
1699/* Arrange for a breakpoint to be hit again later. We don't keep the
1700 SIGTRAP status and don't forward the SIGTRAP signal to the LWP. We
1701 will handle the current event, eventually we will resume this LWP,
1702 and this breakpoint will trap again. */
1703
1704static int
1705cancel_breakpoint (struct lwp_info *lwp)
1706{
1707 struct thread_info *saved_inferior;
d50171e4
PA
1708
1709 /* There's nothing to do if we don't support breakpoints. */
1710 if (!supports_breakpoints ())
1711 return 0;
1712
d50171e4
PA
1713 /* breakpoint_at reads from current inferior. */
1714 saved_inferior = current_inferior;
1715 current_inferior = get_lwp_thread (lwp);
1716
1717 if ((*the_low_target.breakpoint_at) (lwp->stop_pc))
1718 {
1719 if (debug_threads)
87ce2a04 1720 debug_printf ("CB: Push back breakpoint for %s\n",
d86d4aaf 1721 target_pid_to_str (ptid_of (current_inferior)));
d50171e4
PA
1722
1723 /* Back up the PC if necessary. */
1724 if (the_low_target.decr_pc_after_break)
1725 {
1726 struct regcache *regcache
fc7238bb 1727 = get_thread_regcache (current_inferior, 1);
d50171e4
PA
1728 (*the_low_target.set_pc) (regcache, lwp->stop_pc);
1729 }
1730
1731 current_inferior = saved_inferior;
1732 return 1;
1733 }
1734 else
1735 {
1736 if (debug_threads)
87ce2a04
DE
1737 debug_printf ("CB: No breakpoint found at %s for [%s]\n",
1738 paddress (lwp->stop_pc),
d86d4aaf 1739 target_pid_to_str (ptid_of (current_inferior)));
d50171e4
PA
1740 }
1741
1742 current_inferior = saved_inferior;
1743 return 0;
1744}
1745
fa96cb38
PA
1746/* Do low-level handling of the event, and check if we should go on
1747 and pass it to caller code. Return the affected lwp if we are, or
1748 NULL otherwise. */
1749
1750static struct lwp_info *
1751linux_low_filter_event (ptid_t filter_ptid, int lwpid, int wstat)
1752{
1753 struct lwp_info *child;
1754 struct thread_info *thread;
1755
1756 child = find_lwp_pid (pid_to_ptid (lwpid));
1757
1758 /* If we didn't find a process, one of two things presumably happened:
1759 - A process we started and then detached from has exited. Ignore it.
1760 - A process we are controlling has forked and the new child's stop
1761 was reported to us by the kernel. Save its PID. */
1762 if (child == NULL && WIFSTOPPED (wstat))
1763 {
1764 add_to_pid_list (&stopped_pids, lwpid, wstat);
1765 return NULL;
1766 }
1767 else if (child == NULL)
1768 return NULL;
1769
1770 thread = get_lwp_thread (child);
1771
1772 child->stopped = 1;
1773
1774 child->last_status = wstat;
1775
1776 if (WIFSTOPPED (wstat))
1777 {
1778 struct process_info *proc;
1779
1780 /* Architecture-specific setup after inferior is running. This
1781 needs to happen after we have attached to the inferior and it
1782 is stopped for the first time, but before we access any
1783 inferior registers. */
1784 proc = find_process_pid (pid_of (thread));
1785 if (proc->private->new_inferior)
1786 {
1787 struct thread_info *saved_inferior;
1788
1789 saved_inferior = current_inferior;
1790 current_inferior = thread;
1791
1792 the_low_target.arch_setup ();
1793
1794 current_inferior = saved_inferior;
1795
1796 proc->private->new_inferior = 0;
1797 }
1798 }
1799
1800 /* Store the STOP_PC, with adjustment applied. This depends on the
1801 architecture being defined already (so that CHILD has a valid
1802 regcache), and on LAST_STATUS being set (to check for SIGTRAP or
1803 not). */
1804 if (WIFSTOPPED (wstat))
1805 {
1806 if (debug_threads
1807 && the_low_target.get_pc != NULL)
1808 {
1809 struct thread_info *saved_inferior;
1810 struct regcache *regcache;
1811 CORE_ADDR pc;
1812
1813 saved_inferior = current_inferior;
1814 current_inferior = thread;
1815 regcache = get_thread_regcache (current_inferior, 1);
1816 pc = (*the_low_target.get_pc) (regcache);
1817 debug_printf ("linux_low_filter_event: pc is 0x%lx\n", (long) pc);
1818 current_inferior = saved_inferior;
1819 }
1820
1821 child->stop_pc = get_stop_pc (child);
1822 }
1823
1824 /* Fetch the possibly triggered data watchpoint info and store it in
1825 CHILD.
1826
1827 On some archs, like x86, that use debug registers to set
1828 watchpoints, it's possible that the way to know which watched
1829 address trapped, is to check the register that is used to select
1830 which address to watch. Problem is, between setting the
1831 watchpoint and reading back which data address trapped, the user
1832 may change the set of watchpoints, and, as a consequence, GDB
1833 changes the debug registers in the inferior. To avoid reading
1834 back a stale stopped-data-address when that happens, we cache in
1835 LP the fact that a watchpoint trapped, and the corresponding data
1836 address, as soon as we see CHILD stop with a SIGTRAP. If GDB
1837 changes the debug registers meanwhile, we have the cached data we
1838 can rely on. */
1839
1840 if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGTRAP)
1841 {
1842 if (the_low_target.stopped_by_watchpoint == NULL)
1843 {
1844 child->stopped_by_watchpoint = 0;
1845 }
1846 else
1847 {
1848 struct thread_info *saved_inferior;
1849
1850 saved_inferior = current_inferior;
1851 current_inferior = thread;
1852
1853 child->stopped_by_watchpoint
1854 = the_low_target.stopped_by_watchpoint ();
1855
1856 if (child->stopped_by_watchpoint)
1857 {
1858 if (the_low_target.stopped_data_address != NULL)
1859 child->stopped_data_address
1860 = the_low_target.stopped_data_address ();
1861 else
1862 child->stopped_data_address = 0;
1863 }
1864
1865 current_inferior = saved_inferior;
1866 }
1867 }
1868
1869 if (WIFSTOPPED (wstat) && child->must_set_ptrace_flags)
1870 {
1871 linux_enable_event_reporting (lwpid);
1872 child->must_set_ptrace_flags = 0;
1873 }
1874
1875 if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGTRAP
1876 && wstat >> 16 != 0)
1877 {
1878 handle_extended_wait (child, wstat);
1879 return NULL;
1880 }
1881
1882 if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGSTOP
1883 && child->stop_expected)
1884 {
1885 if (debug_threads)
1886 debug_printf ("Expected stop.\n");
1887 child->stop_expected = 0;
1888
1889 if (thread->last_resume_kind == resume_stop)
1890 {
1891 /* We want to report the stop to the core. Treat the
1892 SIGSTOP as a normal event. */
1893 }
1894 else if (stopping_threads != NOT_STOPPING_THREADS)
1895 {
1896 /* Stopping threads. We don't want this SIGSTOP to end up
1897 pending in the FILTER_PTID handling below. */
1898 return NULL;
1899 }
1900 else
1901 {
1902 /* Filter out the event. */
1903 linux_resume_one_lwp (child, child->stepping, 0, NULL);
1904 return NULL;
1905 }
1906 }
1907
1908 /* Check if the thread has exited. */
1909 if ((WIFEXITED (wstat) || WIFSIGNALED (wstat))
1910 && num_lwps (pid_of (thread)) > 1)
1911 {
1912 if (debug_threads)
1913 debug_printf ("LLW: %d exited.\n", lwpid);
1914
1915 /* If there is at least one more LWP, then the exit signal
1916 was not the end of the debugged application and should be
1917 ignored. */
1918 delete_lwp (child);
1919 return NULL;
1920 }
1921
1922 if (!ptid_match (ptid_of (thread), filter_ptid))
1923 {
1924 if (debug_threads)
1925 debug_printf ("LWP %d got an event %06x, leaving pending.\n",
1926 lwpid, wstat);
1927
1928 if (WIFSTOPPED (wstat))
1929 {
1930 child->status_pending_p = 1;
1931 child->status_pending = wstat;
1932
1933 if (WSTOPSIG (wstat) != SIGSTOP)
1934 {
1935 /* Cancel breakpoint hits. The breakpoint may be
1936 removed before we fetch events from this process to
1937 report to the core. It is best not to assume the
1938 moribund breakpoints heuristic always handles these
1939 cases --- it could be too many events go through to
1940 the core before this one is handled. All-stop always
1941 cancels breakpoint hits in all threads. */
1942 if (non_stop
1943 && WSTOPSIG (wstat) == SIGTRAP
1944 && cancel_breakpoint (child))
1945 {
1946 /* Throw away the SIGTRAP. */
1947 child->status_pending_p = 0;
1948
1949 if (debug_threads)
1950 debug_printf ("LLW: LWP %d hit a breakpoint while"
1951 " waiting for another process;"
1952 " cancelled it\n", lwpid);
1953 }
1954 }
1955 }
1956 else if (WIFEXITED (wstat) || WIFSIGNALED (wstat))
1957 {
1958 if (debug_threads)
1959 debug_printf ("LLWE: process %d exited while fetching "
1960 "event from another LWP\n", lwpid);
1961
1962 /* This was the last lwp in the process. Since events are
1963 serialized to GDB core, and we can't report this one
1964 right now, but GDB core and the other target layers will
1965 want to be notified about the exit code/signal, leave the
1966 status pending for the next time we're able to report
1967 it. */
1968 mark_lwp_dead (child, wstat);
1969 }
1970
1971 return NULL;
1972 }
1973
1974 return child;
1975}
1976
d50171e4
PA
1977/* When the event-loop is doing a step-over, this points at the thread
1978 being stepped. */
1979ptid_t step_over_bkpt;
1980
fa96cb38
PA
1981/* Wait for an event from child(ren) WAIT_PTID, and return any that
1982 match FILTER_PTID (leaving others pending). The PTIDs can be:
1983 minus_one_ptid, to specify any child; a pid PTID, specifying all
1984 lwps of a thread group; or a PTID representing a single lwp. Store
1985 the stop status through the status pointer WSTAT. OPTIONS is
1986 passed to the waitpid call. Return 0 if no event was found and
1987 OPTIONS contains WNOHANG. Return -1 if no unwaited-for children
1988 was found. Return the PID of the stopped child otherwise. */
bd99dc85 1989
0d62e5e8 1990static int
fa96cb38
PA
1991linux_wait_for_event_filtered (ptid_t wait_ptid, ptid_t filter_ptid,
1992 int *wstatp, int options)
0d62e5e8 1993{
d86d4aaf 1994 struct thread_info *event_thread;
d50171e4 1995 struct lwp_info *event_child, *requested_child;
fa96cb38 1996 sigset_t block_mask, prev_mask;
d50171e4 1997
fa96cb38 1998 retry:
d86d4aaf
DE
1999 /* N.B. event_thread points to the thread_info struct that contains
2000 event_child. Keep them in sync. */
2001 event_thread = NULL;
d50171e4
PA
2002 event_child = NULL;
2003 requested_child = NULL;
0d62e5e8 2004
95954743 2005 /* Check for a lwp with a pending status. */
bd99dc85 2006
fa96cb38 2007 if (ptid_equal (filter_ptid, minus_one_ptid) || ptid_is_pid (filter_ptid))
0d62e5e8 2008 {
d86d4aaf 2009 event_thread = (struct thread_info *)
fa96cb38 2010 find_inferior (&all_threads, status_pending_p_callback, &filter_ptid);
d86d4aaf
DE
2011 if (event_thread != NULL)
2012 event_child = get_thread_lwp (event_thread);
2013 if (debug_threads && event_thread)
2014 debug_printf ("Got a pending child %ld\n", lwpid_of (event_thread));
0d62e5e8 2015 }
fa96cb38 2016 else if (!ptid_equal (filter_ptid, null_ptid))
0d62e5e8 2017 {
fa96cb38 2018 requested_child = find_lwp_pid (filter_ptid);
d50171e4 2019
bde24c0a 2020 if (stopping_threads == NOT_STOPPING_THREADS
fa593d66
PA
2021 && requested_child->status_pending_p
2022 && requested_child->collecting_fast_tracepoint)
2023 {
2024 enqueue_one_deferred_signal (requested_child,
2025 &requested_child->status_pending);
2026 requested_child->status_pending_p = 0;
2027 requested_child->status_pending = 0;
2028 linux_resume_one_lwp (requested_child, 0, 0, NULL);
2029 }
2030
2031 if (requested_child->suspended
2032 && requested_child->status_pending_p)
2033 fatal ("requesting an event out of a suspended child?");
2034
d50171e4 2035 if (requested_child->status_pending_p)
d86d4aaf
DE
2036 {
2037 event_child = requested_child;
2038 event_thread = get_lwp_thread (event_child);
2039 }
0d62e5e8 2040 }
611cb4a5 2041
0d62e5e8
DJ
2042 if (event_child != NULL)
2043 {
bd99dc85 2044 if (debug_threads)
87ce2a04 2045 debug_printf ("Got an event from pending child %ld (%04x)\n",
d86d4aaf 2046 lwpid_of (event_thread), event_child->status_pending);
fa96cb38 2047 *wstatp = event_child->status_pending;
bd99dc85
PA
2048 event_child->status_pending_p = 0;
2049 event_child->status_pending = 0;
d86d4aaf
DE
2050 current_inferior = event_thread;
2051 return lwpid_of (event_thread);
0d62e5e8
DJ
2052 }
2053
fa96cb38
PA
2054 /* But if we don't find a pending event, we'll have to wait.
2055
2056 We only enter this loop if no process has a pending wait status.
2057 Thus any action taken in response to a wait status inside this
2058 loop is responding as soon as we detect the status, not after any
2059 pending events. */
d8301ad1 2060
fa96cb38
PA
2061 /* Make sure SIGCHLD is blocked until the sigsuspend below. Block
2062 all signals while here. */
2063 sigfillset (&block_mask);
2064 sigprocmask (SIG_BLOCK, &block_mask, &prev_mask);
2065
2066 while (event_child == NULL)
0d62e5e8 2067 {
fa96cb38 2068 pid_t ret = 0;
0d62e5e8 2069
fa96cb38
PA
2070 /* Always use -1 and WNOHANG, due to couple of a kernel/ptrace
2071 quirks:
0d62e5e8 2072
fa96cb38
PA
2073 - If the thread group leader exits while other threads in the
2074 thread group still exist, waitpid(TGID, ...) hangs. That
2075 waitpid won't return an exit status until the other threads
2076 in the group are reaped.
611cb4a5 2077
fa96cb38
PA
2078 - When a non-leader thread execs, that thread just vanishes
2079 without reporting an exit (so we'd hang if we waited for it
2080 explicitly in that case). The exec event is reported to
2081 the TGID pid (although we don't currently enable exec
2082 events). */
2083 errno = 0;
2084 ret = my_waitpid (-1, wstatp, options | WNOHANG);
d8301ad1 2085
fa96cb38
PA
2086 if (debug_threads)
2087 debug_printf ("LWFE: waitpid(-1, ...) returned %d, %s\n",
2088 ret, errno ? strerror (errno) : "ERRNO-OK");
0d62e5e8 2089
fa96cb38 2090 if (ret > 0)
0d62e5e8 2091 {
89be2091 2092 if (debug_threads)
bd99dc85 2093 {
fa96cb38
PA
2094 debug_printf ("LLW: waitpid %ld received %s\n",
2095 (long) ret, status_to_str (*wstatp));
bd99dc85 2096 }
89be2091 2097
fa96cb38
PA
2098 event_child = linux_low_filter_event (filter_ptid,
2099 ret, *wstatp);
2100 if (event_child != NULL)
bd99dc85 2101 {
fa96cb38
PA
2102 /* We got an event to report to the core. */
2103 event_thread = get_lwp_thread (event_child);
2104 break;
bd99dc85 2105 }
89be2091 2106
fa96cb38
PA
2107 /* Retry until nothing comes out of waitpid. A single
2108 SIGCHLD can indicate more than one child stopped. */
89be2091
DJ
2109 continue;
2110 }
2111
fa96cb38
PA
2112 /* Check for zombie thread group leaders. Those can't be reaped
2113 until all other threads in the thread group are. */
2114 check_zombie_leaders ();
2115
2116 /* If there are no resumed children left in the set of LWPs we
2117 want to wait for, bail. We can't just block in
2118 waitpid/sigsuspend, because lwps might have been left stopped
2119 in trace-stop state, and we'd be stuck forever waiting for
2120 their status to change (which would only happen if we resumed
2121 them). Even if WNOHANG is set, this return code is preferred
2122 over 0 (below), as it is more detailed. */
2123 if ((find_inferior (&all_threads,
2124 not_stopped_callback,
2125 &wait_ptid) == NULL))
a6dbe5df 2126 {
fa96cb38
PA
2127 if (debug_threads)
2128 debug_printf ("LLW: exit (no unwaited-for LWP)\n");
2129 sigprocmask (SIG_SETMASK, &prev_mask, NULL);
2130 return -1;
a6dbe5df
PA
2131 }
2132
fa96cb38
PA
2133 /* No interesting event to report to the caller. */
2134 if ((options & WNOHANG))
24a09b5f 2135 {
fa96cb38
PA
2136 if (debug_threads)
2137 debug_printf ("WNOHANG set, no event found\n");
2138
2139 sigprocmask (SIG_SETMASK, &prev_mask, NULL);
2140 return 0;
24a09b5f
DJ
2141 }
2142
fa96cb38
PA
2143 /* Block until we get an event reported with SIGCHLD. */
2144 if (debug_threads)
2145 debug_printf ("sigsuspend'ing\n");
d50171e4 2146
fa96cb38
PA
2147 sigsuspend (&prev_mask);
2148 sigprocmask (SIG_SETMASK, &prev_mask, NULL);
2149 goto retry;
2150 }
d50171e4 2151
fa96cb38 2152 sigprocmask (SIG_SETMASK, &prev_mask, NULL);
d50171e4 2153
fa96cb38 2154 current_inferior = event_thread;
d50171e4 2155
fa96cb38
PA
2156 /* Check for thread exit. */
2157 if (! WIFSTOPPED (*wstatp))
2158 {
2159 gdb_assert (last_thread_of_process_p (pid_of (event_thread)));
2160
2161 if (debug_threads)
2162 debug_printf ("LWP %d is the last lwp of process. "
2163 "Process %ld exiting.\n",
2164 pid_of (event_thread), lwpid_of (event_thread));
d86d4aaf 2165 return lwpid_of (event_thread);
611cb4a5 2166 }
0d62e5e8 2167
fa96cb38
PA
2168 return lwpid_of (event_thread);
2169}
2170
2171/* Wait for an event from child(ren) PTID. PTIDs can be:
2172 minus_one_ptid, to specify any child; a pid PTID, specifying all
2173 lwps of a thread group; or a PTID representing a single lwp. Store
2174 the stop status through the status pointer WSTAT. OPTIONS is
2175 passed to the waitpid call. Return 0 if no event was found and
2176 OPTIONS contains WNOHANG. Return -1 if no unwaited-for children
2177 was found. Return the PID of the stopped child otherwise. */
2178
2179static int
2180linux_wait_for_event (ptid_t ptid, int *wstatp, int options)
2181{
2182 return linux_wait_for_event_filtered (ptid, ptid, wstatp, options);
611cb4a5
DJ
2183}
2184
6bf5e0ba
PA
2185/* Count the LWP's that have had events. */
2186
2187static int
2188count_events_callback (struct inferior_list_entry *entry, void *data)
2189{
d86d4aaf
DE
2190 struct thread_info *thread = (struct thread_info *) entry;
2191 struct lwp_info *lp = get_thread_lwp (thread);
6bf5e0ba
PA
2192 int *count = data;
2193
2194 gdb_assert (count != NULL);
2195
2196 /* Count only resumed LWPs that have a SIGTRAP event pending that
2197 should be reported to GDB. */
8336d594
PA
2198 if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
2199 && thread->last_resume_kind != resume_stop
6bf5e0ba
PA
2200 && lp->status_pending_p
2201 && WIFSTOPPED (lp->status_pending)
2202 && WSTOPSIG (lp->status_pending) == SIGTRAP
2203 && !breakpoint_inserted_here (lp->stop_pc))
2204 (*count)++;
2205
2206 return 0;
2207}
2208
2209/* Select the LWP (if any) that is currently being single-stepped. */
2210
2211static int
2212select_singlestep_lwp_callback (struct inferior_list_entry *entry, void *data)
2213{
d86d4aaf
DE
2214 struct thread_info *thread = (struct thread_info *) entry;
2215 struct lwp_info *lp = get_thread_lwp (thread);
6bf5e0ba 2216
8336d594
PA
2217 if (thread->last_status.kind == TARGET_WAITKIND_IGNORE
2218 && thread->last_resume_kind == resume_step
6bf5e0ba
PA
2219 && lp->status_pending_p)
2220 return 1;
2221 else
2222 return 0;
2223}
2224
2225/* Select the Nth LWP that has had a SIGTRAP event that should be
2226 reported to GDB. */
2227
2228static int
2229select_event_lwp_callback (struct inferior_list_entry *entry, void *data)
2230{
d86d4aaf
DE
2231 struct thread_info *thread = (struct thread_info *) entry;
2232 struct lwp_info *lp = get_thread_lwp (thread);
6bf5e0ba
PA
2233 int *selector = data;
2234
2235 gdb_assert (selector != NULL);
2236
2237 /* Select only resumed LWPs that have a SIGTRAP event pending. */
8336d594
PA
2238 if (thread->last_resume_kind != resume_stop
2239 && thread->last_status.kind == TARGET_WAITKIND_IGNORE
6bf5e0ba
PA
2240 && lp->status_pending_p
2241 && WIFSTOPPED (lp->status_pending)
2242 && WSTOPSIG (lp->status_pending) == SIGTRAP
2243 && !breakpoint_inserted_here (lp->stop_pc))
2244 if ((*selector)-- == 0)
2245 return 1;
2246
2247 return 0;
2248}
2249
2250static int
2251cancel_breakpoints_callback (struct inferior_list_entry *entry, void *data)
2252{
d86d4aaf
DE
2253 struct thread_info *thread = (struct thread_info *) entry;
2254 struct lwp_info *lp = get_thread_lwp (thread);
6bf5e0ba
PA
2255 struct lwp_info *event_lp = data;
2256
2257 /* Leave the LWP that has been elected to receive a SIGTRAP alone. */
2258 if (lp == event_lp)
2259 return 0;
2260
2261 /* If a LWP other than the LWP that we're reporting an event for has
2262 hit a GDB breakpoint (as opposed to some random trap signal),
2263 then just arrange for it to hit it again later. We don't keep
2264 the SIGTRAP status and don't forward the SIGTRAP signal to the
2265 LWP. We will handle the current event, eventually we will resume
2266 all LWPs, and this one will get its breakpoint trap again.
2267
2268 If we do not do this, then we run the risk that the user will
2269 delete or disable the breakpoint, but the LWP will have already
2270 tripped on it. */
2271
8336d594
PA
2272 if (thread->last_resume_kind != resume_stop
2273 && thread->last_status.kind == TARGET_WAITKIND_IGNORE
6bf5e0ba
PA
2274 && lp->status_pending_p
2275 && WIFSTOPPED (lp->status_pending)
2276 && WSTOPSIG (lp->status_pending) == SIGTRAP
bdabb078
PA
2277 && !lp->stepping
2278 && !lp->stopped_by_watchpoint
6bf5e0ba
PA
2279 && cancel_breakpoint (lp))
2280 /* Throw away the SIGTRAP. */
2281 lp->status_pending_p = 0;
2282
2283 return 0;
2284}
2285
7984d532
PA
2286static void
2287linux_cancel_breakpoints (void)
2288{
d86d4aaf 2289 find_inferior (&all_threads, cancel_breakpoints_callback, NULL);
7984d532
PA
2290}
2291
6bf5e0ba
PA
2292/* Select one LWP out of those that have events pending. */
2293
2294static void
2295select_event_lwp (struct lwp_info **orig_lp)
2296{
2297 int num_events = 0;
2298 int random_selector;
d86d4aaf 2299 struct thread_info *event_thread;
6bf5e0ba
PA
2300
2301 /* Give preference to any LWP that is being single-stepped. */
d86d4aaf
DE
2302 event_thread
2303 = (struct thread_info *) find_inferior (&all_threads,
2304 select_singlestep_lwp_callback,
2305 NULL);
2306 if (event_thread != NULL)
6bf5e0ba
PA
2307 {
2308 if (debug_threads)
87ce2a04 2309 debug_printf ("SEL: Select single-step %s\n",
d86d4aaf 2310 target_pid_to_str (ptid_of (event_thread)));
6bf5e0ba
PA
2311 }
2312 else
2313 {
2314 /* No single-stepping LWP. Select one at random, out of those
2315 which have had SIGTRAP events. */
2316
2317 /* First see how many SIGTRAP events we have. */
d86d4aaf 2318 find_inferior (&all_threads, count_events_callback, &num_events);
6bf5e0ba
PA
2319
2320 /* Now randomly pick a LWP out of those that have had a SIGTRAP. */
2321 random_selector = (int)
2322 ((num_events * (double) rand ()) / (RAND_MAX + 1.0));
2323
2324 if (debug_threads && num_events > 1)
87ce2a04
DE
2325 debug_printf ("SEL: Found %d SIGTRAP events, selecting #%d\n",
2326 num_events, random_selector);
6bf5e0ba 2327
d86d4aaf
DE
2328 event_thread
2329 = (struct thread_info *) find_inferior (&all_threads,
2330 select_event_lwp_callback,
2331 &random_selector);
6bf5e0ba
PA
2332 }
2333
d86d4aaf 2334 if (event_thread != NULL)
6bf5e0ba 2335 {
d86d4aaf
DE
2336 struct lwp_info *event_lp = get_thread_lwp (event_thread);
2337
6bf5e0ba
PA
2338 /* Switch the event LWP. */
2339 *orig_lp = event_lp;
2340 }
2341}
2342
7984d532
PA
2343/* Decrement the suspend count of an LWP. */
2344
2345static int
2346unsuspend_one_lwp (struct inferior_list_entry *entry, void *except)
2347{
d86d4aaf
DE
2348 struct thread_info *thread = (struct thread_info *) entry;
2349 struct lwp_info *lwp = get_thread_lwp (thread);
7984d532
PA
2350
2351 /* Ignore EXCEPT. */
2352 if (lwp == except)
2353 return 0;
2354
2355 lwp->suspended--;
2356
2357 gdb_assert (lwp->suspended >= 0);
2358 return 0;
2359}
2360
2361/* Decrement the suspend count of all LWPs, except EXCEPT, if non
2362 NULL. */
2363
2364static void
2365unsuspend_all_lwps (struct lwp_info *except)
2366{
d86d4aaf 2367 find_inferior (&all_threads, unsuspend_one_lwp, except);
7984d532
PA
2368}
2369
fa593d66
PA
2370static void move_out_of_jump_pad_callback (struct inferior_list_entry *entry);
2371static int stuck_in_jump_pad_callback (struct inferior_list_entry *entry,
2372 void *data);
2373static int lwp_running (struct inferior_list_entry *entry, void *data);
2374static ptid_t linux_wait_1 (ptid_t ptid,
2375 struct target_waitstatus *ourstatus,
2376 int target_options);
2377
2378/* Stabilize threads (move out of jump pads).
2379
2380 If a thread is midway collecting a fast tracepoint, we need to
2381 finish the collection and move it out of the jump pad before
2382 reporting the signal.
2383
2384 This avoids recursion while collecting (when a signal arrives
2385 midway, and the signal handler itself collects), which would trash
2386 the trace buffer. In case the user set a breakpoint in a signal
2387 handler, this avoids the backtrace showing the jump pad, etc..
2388 Most importantly, there are certain things we can't do safely if
2389 threads are stopped in a jump pad (or in its callee's). For
2390 example:
2391
2392 - starting a new trace run. A thread still collecting the
2393 previous run, could trash the trace buffer when resumed. The trace
2394 buffer control structures would have been reset but the thread had
2395 no way to tell. The thread could even midway memcpy'ing to the
2396 buffer, which would mean that when resumed, it would clobber the
2397 trace buffer that had been set for a new run.
2398
2399 - we can't rewrite/reuse the jump pads for new tracepoints
2400 safely. Say you do tstart while a thread is stopped midway while
2401 collecting. When the thread is later resumed, it finishes the
2402 collection, and returns to the jump pad, to execute the original
2403 instruction that was under the tracepoint jump at the time the
2404 older run had been started. If the jump pad had been rewritten
2405 since for something else in the new run, the thread would now
2406 execute the wrong / random instructions. */
2407
2408static void
2409linux_stabilize_threads (void)
2410{
2411 struct thread_info *save_inferior;
d86d4aaf 2412 struct thread_info *thread_stuck;
fa593d66 2413
d86d4aaf
DE
2414 thread_stuck
2415 = (struct thread_info *) find_inferior (&all_threads,
2416 stuck_in_jump_pad_callback,
2417 NULL);
2418 if (thread_stuck != NULL)
fa593d66 2419 {
b4d51a55 2420 if (debug_threads)
87ce2a04 2421 debug_printf ("can't stabilize, LWP %ld is stuck in jump pad\n",
d86d4aaf 2422 lwpid_of (thread_stuck));
fa593d66
PA
2423 return;
2424 }
2425
2426 save_inferior = current_inferior;
2427
2428 stabilizing_threads = 1;
2429
2430 /* Kick 'em all. */
d86d4aaf 2431 for_each_inferior (&all_threads, move_out_of_jump_pad_callback);
fa593d66
PA
2432
2433 /* Loop until all are stopped out of the jump pads. */
d86d4aaf 2434 while (find_inferior (&all_threads, lwp_running, NULL) != NULL)
fa593d66
PA
2435 {
2436 struct target_waitstatus ourstatus;
2437 struct lwp_info *lwp;
fa593d66
PA
2438 int wstat;
2439
2440 /* Note that we go through the full wait even loop. While
2441 moving threads out of jump pad, we need to be able to step
2442 over internal breakpoints and such. */
32fcada3 2443 linux_wait_1 (minus_one_ptid, &ourstatus, 0);
fa593d66
PA
2444
2445 if (ourstatus.kind == TARGET_WAITKIND_STOPPED)
2446 {
2447 lwp = get_thread_lwp (current_inferior);
2448
2449 /* Lock it. */
2450 lwp->suspended++;
2451
a493e3e2 2452 if (ourstatus.value.sig != GDB_SIGNAL_0
fa593d66
PA
2453 || current_inferior->last_resume_kind == resume_stop)
2454 {
2ea28649 2455 wstat = W_STOPCODE (gdb_signal_to_host (ourstatus.value.sig));
fa593d66
PA
2456 enqueue_one_deferred_signal (lwp, &wstat);
2457 }
2458 }
2459 }
2460
d86d4aaf 2461 find_inferior (&all_threads, unsuspend_one_lwp, NULL);
fa593d66
PA
2462
2463 stabilizing_threads = 0;
2464
2465 current_inferior = save_inferior;
2466
b4d51a55 2467 if (debug_threads)
fa593d66 2468 {
d86d4aaf
DE
2469 thread_stuck
2470 = (struct thread_info *) find_inferior (&all_threads,
2471 stuck_in_jump_pad_callback,
2472 NULL);
2473 if (thread_stuck != NULL)
87ce2a04 2474 debug_printf ("couldn't stabilize, LWP %ld got stuck in jump pad\n",
d86d4aaf 2475 lwpid_of (thread_stuck));
fa593d66
PA
2476 }
2477}
2478
0d62e5e8 2479/* Wait for process, returns status. */
da6d8c04 2480
95954743
PA
2481static ptid_t
2482linux_wait_1 (ptid_t ptid,
2483 struct target_waitstatus *ourstatus, int target_options)
da6d8c04 2484{
e5f1222d 2485 int w;
fc7238bb 2486 struct lwp_info *event_child;
bd99dc85 2487 int options;
bd99dc85 2488 int pid;
6bf5e0ba
PA
2489 int step_over_finished;
2490 int bp_explains_trap;
2491 int maybe_internal_trap;
2492 int report_to_gdb;
219f2f23 2493 int trace_event;
c2d6af84 2494 int in_step_range;
bd99dc85 2495
87ce2a04
DE
2496 if (debug_threads)
2497 {
2498 debug_enter ();
2499 debug_printf ("linux_wait_1: [%s]\n", target_pid_to_str (ptid));
2500 }
2501
bd99dc85
PA
2502 /* Translate generic target options into linux options. */
2503 options = __WALL;
2504 if (target_options & TARGET_WNOHANG)
2505 options |= WNOHANG;
0d62e5e8
DJ
2506
2507retry:
fa593d66
PA
2508 bp_explains_trap = 0;
2509 trace_event = 0;
c2d6af84 2510 in_step_range = 0;
bd99dc85
PA
2511 ourstatus->kind = TARGET_WAITKIND_IGNORE;
2512
0d62e5e8
DJ
2513 /* If we were only supposed to resume one thread, only wait for
2514 that thread - if it's still alive. If it died, however - which
2515 can happen if we're coming from the thread death case below -
2516 then we need to make sure we restart the other threads. We could
2517 pick a thread at random or restart all; restarting all is less
2518 arbitrary. */
95954743
PA
2519 if (!non_stop
2520 && !ptid_equal (cont_thread, null_ptid)
2521 && !ptid_equal (cont_thread, minus_one_ptid))
0d62e5e8 2522 {
fc7238bb
PA
2523 struct thread_info *thread;
2524
bd99dc85
PA
2525 thread = (struct thread_info *) find_inferior_id (&all_threads,
2526 cont_thread);
0d62e5e8
DJ
2527
2528 /* No stepping, no signal - unless one is pending already, of course. */
bd99dc85 2529 if (thread == NULL)
64386c31
DJ
2530 {
2531 struct thread_resume resume_info;
95954743 2532 resume_info.thread = minus_one_ptid;
bd99dc85
PA
2533 resume_info.kind = resume_continue;
2534 resume_info.sig = 0;
2bd7c093 2535 linux_resume (&resume_info, 1);
64386c31 2536 }
bd99dc85 2537 else
95954743 2538 ptid = cont_thread;
0d62e5e8 2539 }
da6d8c04 2540
6bf5e0ba
PA
2541 if (ptid_equal (step_over_bkpt, null_ptid))
2542 pid = linux_wait_for_event (ptid, &w, options);
2543 else
2544 {
2545 if (debug_threads)
87ce2a04
DE
2546 debug_printf ("step_over_bkpt set [%s], doing a blocking wait\n",
2547 target_pid_to_str (step_over_bkpt));
6bf5e0ba
PA
2548 pid = linux_wait_for_event (step_over_bkpt, &w, options & ~WNOHANG);
2549 }
2550
fa96cb38 2551 if (pid == 0)
87ce2a04 2552 {
fa96cb38
PA
2553 gdb_assert (target_options & TARGET_WNOHANG);
2554
87ce2a04
DE
2555 if (debug_threads)
2556 {
fa96cb38
PA
2557 debug_printf ("linux_wait_1 ret = null_ptid, "
2558 "TARGET_WAITKIND_IGNORE\n");
87ce2a04
DE
2559 debug_exit ();
2560 }
fa96cb38
PA
2561
2562 ourstatus->kind = TARGET_WAITKIND_IGNORE;
87ce2a04
DE
2563 return null_ptid;
2564 }
fa96cb38
PA
2565 else if (pid == -1)
2566 {
2567 if (debug_threads)
2568 {
2569 debug_printf ("linux_wait_1 ret = null_ptid, "
2570 "TARGET_WAITKIND_NO_RESUMED\n");
2571 debug_exit ();
2572 }
bd99dc85 2573
fa96cb38
PA
2574 ourstatus->kind = TARGET_WAITKIND_NO_RESUMED;
2575 return null_ptid;
2576 }
0d62e5e8 2577
fa96cb38 2578 event_child = get_thread_lwp (current_inferior);
0d62e5e8 2579
fa96cb38
PA
2580 /* linux_wait_for_event only returns an exit status for the last
2581 child of a process. Report it. */
2582 if (WIFEXITED (w) || WIFSIGNALED (w))
da6d8c04 2583 {
fa96cb38 2584 if (WIFEXITED (w))
0d62e5e8 2585 {
fa96cb38
PA
2586 ourstatus->kind = TARGET_WAITKIND_EXITED;
2587 ourstatus->value.integer = WEXITSTATUS (w);
bd99dc85 2588
fa96cb38 2589 if (debug_threads)
bd99dc85 2590 {
fa96cb38
PA
2591 debug_printf ("linux_wait_1 ret = %s, exited with "
2592 "retcode %d\n",
2593 target_pid_to_str (ptid_of (current_inferior)),
2594 WEXITSTATUS (w));
2595 debug_exit ();
bd99dc85 2596 }
fa96cb38
PA
2597 }
2598 else
2599 {
2600 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
2601 ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (w));
5b1c542e 2602
fa96cb38
PA
2603 if (debug_threads)
2604 {
2605 debug_printf ("linux_wait_1 ret = %s, terminated with "
2606 "signal %d\n",
2607 target_pid_to_str (ptid_of (current_inferior)),
2608 WTERMSIG (w));
2609 debug_exit ();
2610 }
0d62e5e8 2611 }
fa96cb38
PA
2612
2613 return ptid_of (current_inferior);
da6d8c04
DJ
2614 }
2615
6bf5e0ba
PA
2616 /* If this event was not handled before, and is not a SIGTRAP, we
2617 report it. SIGILL and SIGSEGV are also treated as traps in case
2618 a breakpoint is inserted at the current PC. If this target does
2619 not support internal breakpoints at all, we also report the
2620 SIGTRAP without further processing; it's of no concern to us. */
2621 maybe_internal_trap
2622 = (supports_breakpoints ()
2623 && (WSTOPSIG (w) == SIGTRAP
2624 || ((WSTOPSIG (w) == SIGILL
2625 || WSTOPSIG (w) == SIGSEGV)
2626 && (*the_low_target.breakpoint_at) (event_child->stop_pc))));
2627
2628 if (maybe_internal_trap)
2629 {
2630 /* Handle anything that requires bookkeeping before deciding to
2631 report the event or continue waiting. */
2632
2633 /* First check if we can explain the SIGTRAP with an internal
2634 breakpoint, or if we should possibly report the event to GDB.
2635 Do this before anything that may remove or insert a
2636 breakpoint. */
2637 bp_explains_trap = breakpoint_inserted_here (event_child->stop_pc);
2638
2639 /* We have a SIGTRAP, possibly a step-over dance has just
2640 finished. If so, tweak the state machine accordingly,
2641 reinsert breakpoints and delete any reinsert (software
2642 single-step) breakpoints. */
2643 step_over_finished = finish_step_over (event_child);
2644
2645 /* Now invoke the callbacks of any internal breakpoints there. */
2646 check_breakpoints (event_child->stop_pc);
2647
219f2f23
PA
2648 /* Handle tracepoint data collecting. This may overflow the
2649 trace buffer, and cause a tracing stop, removing
2650 breakpoints. */
2651 trace_event = handle_tracepoints (event_child);
2652
6bf5e0ba
PA
2653 if (bp_explains_trap)
2654 {
2655 /* If we stepped or ran into an internal breakpoint, we've
2656 already handled it. So next time we resume (from this
2657 PC), we should step over it. */
2658 if (debug_threads)
87ce2a04 2659 debug_printf ("Hit a gdbserver breakpoint.\n");
6bf5e0ba 2660
8b07ae33
PA
2661 if (breakpoint_here (event_child->stop_pc))
2662 event_child->need_step_over = 1;
6bf5e0ba
PA
2663 }
2664 }
2665 else
2666 {
2667 /* We have some other signal, possibly a step-over dance was in
2668 progress, and it should be cancelled too. */
2669 step_over_finished = finish_step_over (event_child);
fa593d66
PA
2670 }
2671
2672 /* We have all the data we need. Either report the event to GDB, or
2673 resume threads and keep waiting for more. */
2674
2675 /* If we're collecting a fast tracepoint, finish the collection and
2676 move out of the jump pad before delivering a signal. See
2677 linux_stabilize_threads. */
2678
2679 if (WIFSTOPPED (w)
2680 && WSTOPSIG (w) != SIGTRAP
2681 && supports_fast_tracepoints ()
58b4daa5 2682 && agent_loaded_p ())
fa593d66
PA
2683 {
2684 if (debug_threads)
87ce2a04
DE
2685 debug_printf ("Got signal %d for LWP %ld. Check if we need "
2686 "to defer or adjust it.\n",
d86d4aaf 2687 WSTOPSIG (w), lwpid_of (current_inferior));
fa593d66
PA
2688
2689 /* Allow debugging the jump pad itself. */
2690 if (current_inferior->last_resume_kind != resume_step
2691 && maybe_move_out_of_jump_pad (event_child, &w))
2692 {
2693 enqueue_one_deferred_signal (event_child, &w);
2694
2695 if (debug_threads)
87ce2a04 2696 debug_printf ("Signal %d for LWP %ld deferred (in jump pad)\n",
d86d4aaf 2697 WSTOPSIG (w), lwpid_of (current_inferior));
fa593d66
PA
2698
2699 linux_resume_one_lwp (event_child, 0, 0, NULL);
2700 goto retry;
2701 }
2702 }
219f2f23 2703
fa593d66
PA
2704 if (event_child->collecting_fast_tracepoint)
2705 {
2706 if (debug_threads)
87ce2a04
DE
2707 debug_printf ("LWP %ld was trying to move out of the jump pad (%d). "
2708 "Check if we're already there.\n",
d86d4aaf 2709 lwpid_of (current_inferior),
87ce2a04 2710 event_child->collecting_fast_tracepoint);
fa593d66
PA
2711
2712 trace_event = 1;
2713
2714 event_child->collecting_fast_tracepoint
2715 = linux_fast_tracepoint_collecting (event_child, NULL);
2716
2717 if (event_child->collecting_fast_tracepoint != 1)
2718 {
2719 /* No longer need this breakpoint. */
2720 if (event_child->exit_jump_pad_bkpt != NULL)
2721 {
2722 if (debug_threads)
87ce2a04
DE
2723 debug_printf ("No longer need exit-jump-pad bkpt; removing it."
2724 "stopping all threads momentarily.\n");
fa593d66
PA
2725
2726 /* Other running threads could hit this breakpoint.
2727 We don't handle moribund locations like GDB does,
2728 instead we always pause all threads when removing
2729 breakpoints, so that any step-over or
2730 decr_pc_after_break adjustment is always taken
2731 care of while the breakpoint is still
2732 inserted. */
2733 stop_all_lwps (1, event_child);
2734 cancel_breakpoints ();
2735
2736 delete_breakpoint (event_child->exit_jump_pad_bkpt);
2737 event_child->exit_jump_pad_bkpt = NULL;
2738
2739 unstop_all_lwps (1, event_child);
2740
2741 gdb_assert (event_child->suspended >= 0);
2742 }
2743 }
2744
2745 if (event_child->collecting_fast_tracepoint == 0)
2746 {
2747 if (debug_threads)
87ce2a04
DE
2748 debug_printf ("fast tracepoint finished "
2749 "collecting successfully.\n");
fa593d66
PA
2750
2751 /* We may have a deferred signal to report. */
2752 if (dequeue_one_deferred_signal (event_child, &w))
2753 {
2754 if (debug_threads)
87ce2a04 2755 debug_printf ("dequeued one signal.\n");
fa593d66 2756 }
3c11dd79 2757 else
fa593d66 2758 {
3c11dd79 2759 if (debug_threads)
87ce2a04 2760 debug_printf ("no deferred signals.\n");
fa593d66
PA
2761
2762 if (stabilizing_threads)
2763 {
2764 ourstatus->kind = TARGET_WAITKIND_STOPPED;
a493e3e2 2765 ourstatus->value.sig = GDB_SIGNAL_0;
87ce2a04
DE
2766
2767 if (debug_threads)
2768 {
2769 debug_printf ("linux_wait_1 ret = %s, stopped "
2770 "while stabilizing threads\n",
d86d4aaf 2771 target_pid_to_str (ptid_of (current_inferior)));
87ce2a04
DE
2772 debug_exit ();
2773 }
2774
d86d4aaf 2775 return ptid_of (current_inferior);
fa593d66
PA
2776 }
2777 }
2778 }
6bf5e0ba
PA
2779 }
2780
e471f25b
PA
2781 /* Check whether GDB would be interested in this event. */
2782
2783 /* If GDB is not interested in this signal, don't stop other
2784 threads, and don't report it to GDB. Just resume the inferior
2785 right away. We do this for threading-related signals as well as
2786 any that GDB specifically requested we ignore. But never ignore
2787 SIGSTOP if we sent it ourselves, and do not ignore signals when
2788 stepping - they may require special handling to skip the signal
2789 handler. */
2790 /* FIXME drow/2002-06-09: Get signal numbers from the inferior's
2791 thread library? */
2792 if (WIFSTOPPED (w)
2793 && current_inferior->last_resume_kind != resume_step
2794 && (
1a981360 2795#if defined (USE_THREAD_DB) && !defined (__ANDROID__)
e471f25b
PA
2796 (current_process ()->private->thread_db != NULL
2797 && (WSTOPSIG (w) == __SIGRTMIN
2798 || WSTOPSIG (w) == __SIGRTMIN + 1))
2799 ||
2800#endif
2ea28649 2801 (pass_signals[gdb_signal_from_host (WSTOPSIG (w))]
e471f25b
PA
2802 && !(WSTOPSIG (w) == SIGSTOP
2803 && current_inferior->last_resume_kind == resume_stop))))
2804 {
2805 siginfo_t info, *info_p;
2806
2807 if (debug_threads)
87ce2a04 2808 debug_printf ("Ignored signal %d for LWP %ld.\n",
d86d4aaf 2809 WSTOPSIG (w), lwpid_of (current_inferior));
e471f25b 2810
d86d4aaf 2811 if (ptrace (PTRACE_GETSIGINFO, lwpid_of (current_inferior),
b8e1b30e 2812 (PTRACE_TYPE_ARG3) 0, &info) == 0)
e471f25b
PA
2813 info_p = &info;
2814 else
2815 info_p = NULL;
2816 linux_resume_one_lwp (event_child, event_child->stepping,
2817 WSTOPSIG (w), info_p);
2818 goto retry;
2819 }
2820
c2d6af84
PA
2821 /* Note that all addresses are always "out of the step range" when
2822 there's no range to begin with. */
2823 in_step_range = lwp_in_step_range (event_child);
2824
2825 /* If GDB wanted this thread to single step, and the thread is out
2826 of the step range, we always want to report the SIGTRAP, and let
2827 GDB handle it. Watchpoints should always be reported. So should
2828 signals we can't explain. A SIGTRAP we can't explain could be a
2829 GDB breakpoint --- we may or not support Z0 breakpoints. If we
2830 do, we're be able to handle GDB breakpoints on top of internal
2831 breakpoints, by handling the internal breakpoint and still
2832 reporting the event to GDB. If we don't, we're out of luck, GDB
2833 won't see the breakpoint hit. */
6bf5e0ba 2834 report_to_gdb = (!maybe_internal_trap
c2d6af84
PA
2835 || (current_inferior->last_resume_kind == resume_step
2836 && !in_step_range)
6bf5e0ba 2837 || event_child->stopped_by_watchpoint
c2d6af84 2838 || (!step_over_finished && !in_step_range
493e2a69 2839 && !bp_explains_trap && !trace_event)
9f3a5c85 2840 || (gdb_breakpoint_here (event_child->stop_pc)
d3ce09f5
SS
2841 && gdb_condition_true_at_breakpoint (event_child->stop_pc)
2842 && gdb_no_commands_at_breakpoint (event_child->stop_pc)));
2843
2844 run_breakpoint_commands (event_child->stop_pc);
6bf5e0ba
PA
2845
2846 /* We found no reason GDB would want us to stop. We either hit one
2847 of our own breakpoints, or finished an internal step GDB
2848 shouldn't know about. */
2849 if (!report_to_gdb)
2850 {
2851 if (debug_threads)
2852 {
2853 if (bp_explains_trap)
87ce2a04 2854 debug_printf ("Hit a gdbserver breakpoint.\n");
6bf5e0ba 2855 if (step_over_finished)
87ce2a04 2856 debug_printf ("Step-over finished.\n");
219f2f23 2857 if (trace_event)
87ce2a04 2858 debug_printf ("Tracepoint event.\n");
c2d6af84 2859 if (lwp_in_step_range (event_child))
87ce2a04
DE
2860 debug_printf ("Range stepping pc 0x%s [0x%s, 0x%s).\n",
2861 paddress (event_child->stop_pc),
2862 paddress (event_child->step_range_start),
2863 paddress (event_child->step_range_end));
6bf5e0ba
PA
2864 }
2865
2866 /* We're not reporting this breakpoint to GDB, so apply the
2867 decr_pc_after_break adjustment to the inferior's regcache
2868 ourselves. */
2869
2870 if (the_low_target.set_pc != NULL)
2871 {
2872 struct regcache *regcache
d86d4aaf 2873 = get_thread_regcache (current_inferior, 1);
6bf5e0ba
PA
2874 (*the_low_target.set_pc) (regcache, event_child->stop_pc);
2875 }
2876
7984d532
PA
2877 /* We may have finished stepping over a breakpoint. If so,
2878 we've stopped and suspended all LWPs momentarily except the
2879 stepping one. This is where we resume them all again. We're
2880 going to keep waiting, so use proceed, which handles stepping
2881 over the next breakpoint. */
6bf5e0ba 2882 if (debug_threads)
87ce2a04 2883 debug_printf ("proceeding all threads.\n");
7984d532
PA
2884
2885 if (step_over_finished)
2886 unsuspend_all_lwps (event_child);
2887
6bf5e0ba
PA
2888 proceed_all_lwps ();
2889 goto retry;
2890 }
2891
2892 if (debug_threads)
2893 {
8336d594 2894 if (current_inferior->last_resume_kind == resume_step)
c2d6af84
PA
2895 {
2896 if (event_child->step_range_start == event_child->step_range_end)
87ce2a04 2897 debug_printf ("GDB wanted to single-step, reporting event.\n");
c2d6af84 2898 else if (!lwp_in_step_range (event_child))
87ce2a04 2899 debug_printf ("Out of step range, reporting event.\n");
c2d6af84 2900 }
6bf5e0ba 2901 if (event_child->stopped_by_watchpoint)
87ce2a04 2902 debug_printf ("Stopped by watchpoint.\n");
8b07ae33 2903 if (gdb_breakpoint_here (event_child->stop_pc))
87ce2a04 2904 debug_printf ("Stopped by GDB breakpoint.\n");
6bf5e0ba 2905 if (debug_threads)
87ce2a04 2906 debug_printf ("Hit a non-gdbserver trap event.\n");
6bf5e0ba
PA
2907 }
2908
2909 /* Alright, we're going to report a stop. */
2910
fa593d66 2911 if (!non_stop && !stabilizing_threads)
6bf5e0ba
PA
2912 {
2913 /* In all-stop, stop all threads. */
7984d532 2914 stop_all_lwps (0, NULL);
6bf5e0ba
PA
2915
2916 /* If we're not waiting for a specific LWP, choose an event LWP
2917 from among those that have had events. Giving equal priority
2918 to all LWPs that have had events helps prevent
2919 starvation. */
2920 if (ptid_equal (ptid, minus_one_ptid))
2921 {
2922 event_child->status_pending_p = 1;
2923 event_child->status_pending = w;
2924
2925 select_event_lwp (&event_child);
2926
ee1e2d4f
DE
2927 /* current_inferior and event_child must stay in sync. */
2928 current_inferior = get_lwp_thread (event_child);
2929
6bf5e0ba
PA
2930 event_child->status_pending_p = 0;
2931 w = event_child->status_pending;
2932 }
2933
2934 /* Now that we've selected our final event LWP, cancel any
2935 breakpoints in other LWPs that have hit a GDB breakpoint.
2936 See the comment in cancel_breakpoints_callback to find out
2937 why. */
d86d4aaf 2938 find_inferior (&all_threads, cancel_breakpoints_callback, event_child);
fa593d66 2939
c03e6ccc
YQ
2940 /* If we were going a step-over, all other threads but the stepping one
2941 had been paused in start_step_over, with their suspend counts
2942 incremented. We don't want to do a full unstop/unpause, because we're
2943 in all-stop mode (so we want threads stopped), but we still need to
2944 unsuspend the other threads, to decrement their `suspended' count
2945 back. */
2946 if (step_over_finished)
2947 unsuspend_all_lwps (event_child);
2948
fa593d66
PA
2949 /* Stabilize threads (move out of jump pads). */
2950 stabilize_threads ();
6bf5e0ba
PA
2951 }
2952 else
2953 {
2954 /* If we just finished a step-over, then all threads had been
2955 momentarily paused. In all-stop, that's fine, we want
2956 threads stopped by now anyway. In non-stop, we need to
2957 re-resume threads that GDB wanted to be running. */
2958 if (step_over_finished)
7984d532 2959 unstop_all_lwps (1, event_child);
6bf5e0ba
PA
2960 }
2961
5b1c542e 2962 ourstatus->kind = TARGET_WAITKIND_STOPPED;
5b1c542e 2963
8336d594
PA
2964 if (current_inferior->last_resume_kind == resume_stop
2965 && WSTOPSIG (w) == SIGSTOP)
bd99dc85
PA
2966 {
2967 /* A thread that has been requested to stop by GDB with vCont;t,
2968 and it stopped cleanly, so report as SIG0. The use of
2969 SIGSTOP is an implementation detail. */
a493e3e2 2970 ourstatus->value.sig = GDB_SIGNAL_0;
bd99dc85 2971 }
8336d594
PA
2972 else if (current_inferior->last_resume_kind == resume_stop
2973 && WSTOPSIG (w) != SIGSTOP)
bd99dc85
PA
2974 {
2975 /* A thread that has been requested to stop by GDB with vCont;t,
d50171e4 2976 but, it stopped for other reasons. */
2ea28649 2977 ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
bd99dc85
PA
2978 }
2979 else
2980 {
2ea28649 2981 ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (w));
bd99dc85
PA
2982 }
2983
d50171e4
PA
2984 gdb_assert (ptid_equal (step_over_bkpt, null_ptid));
2985
bd99dc85 2986 if (debug_threads)
87ce2a04
DE
2987 {
2988 debug_printf ("linux_wait_1 ret = %s, %d, %d\n",
d86d4aaf 2989 target_pid_to_str (ptid_of (current_inferior)),
87ce2a04
DE
2990 ourstatus->kind, ourstatus->value.sig);
2991 debug_exit ();
2992 }
bd99dc85 2993
d86d4aaf 2994 return ptid_of (current_inferior);
bd99dc85
PA
2995}
2996
2997/* Get rid of any pending event in the pipe. */
2998static void
2999async_file_flush (void)
3000{
3001 int ret;
3002 char buf;
3003
3004 do
3005 ret = read (linux_event_pipe[0], &buf, 1);
3006 while (ret >= 0 || (ret == -1 && errno == EINTR));
3007}
3008
3009/* Put something in the pipe, so the event loop wakes up. */
3010static void
3011async_file_mark (void)
3012{
3013 int ret;
3014
3015 async_file_flush ();
3016
3017 do
3018 ret = write (linux_event_pipe[1], "+", 1);
3019 while (ret == 0 || (ret == -1 && errno == EINTR));
3020
3021 /* Ignore EAGAIN. If the pipe is full, the event loop will already
3022 be awakened anyway. */
3023}
3024
95954743
PA
3025static ptid_t
3026linux_wait (ptid_t ptid,
3027 struct target_waitstatus *ourstatus, int target_options)
bd99dc85 3028{
95954743 3029 ptid_t event_ptid;
bd99dc85 3030
bd99dc85
PA
3031 /* Flush the async file first. */
3032 if (target_is_async_p ())
3033 async_file_flush ();
3034
95954743 3035 event_ptid = linux_wait_1 (ptid, ourstatus, target_options);
bd99dc85
PA
3036
3037 /* If at least one stop was reported, there may be more. A single
3038 SIGCHLD can signal more than one child stop. */
3039 if (target_is_async_p ()
3040 && (target_options & TARGET_WNOHANG) != 0
95954743 3041 && !ptid_equal (event_ptid, null_ptid))
bd99dc85
PA
3042 async_file_mark ();
3043
3044 return event_ptid;
da6d8c04
DJ
3045}
3046
c5f62d5f 3047/* Send a signal to an LWP. */
fd500816
DJ
3048
3049static int
a1928bad 3050kill_lwp (unsigned long lwpid, int signo)
fd500816 3051{
c5f62d5f
DE
3052 /* Use tkill, if possible, in case we are using nptl threads. If tkill
3053 fails, then we are not using nptl threads and we should be using kill. */
fd500816 3054
c5f62d5f
DE
3055#ifdef __NR_tkill
3056 {
3057 static int tkill_failed;
fd500816 3058
c5f62d5f
DE
3059 if (!tkill_failed)
3060 {
3061 int ret;
3062
3063 errno = 0;
3064 ret = syscall (__NR_tkill, lwpid, signo);
3065 if (errno != ENOSYS)
3066 return ret;
3067 tkill_failed = 1;
3068 }
3069 }
fd500816
DJ
3070#endif
3071
3072 return kill (lwpid, signo);
3073}
3074
964e4306
PA
3075void
3076linux_stop_lwp (struct lwp_info *lwp)
3077{
3078 send_sigstop (lwp);
3079}
3080
0d62e5e8 3081static void
02fc4de7 3082send_sigstop (struct lwp_info *lwp)
0d62e5e8 3083{
bd99dc85 3084 int pid;
0d62e5e8 3085
d86d4aaf 3086 pid = lwpid_of (get_lwp_thread (lwp));
bd99dc85 3087
0d62e5e8
DJ
3088 /* If we already have a pending stop signal for this process, don't
3089 send another. */
54a0b537 3090 if (lwp->stop_expected)
0d62e5e8 3091 {
ae13219e 3092 if (debug_threads)
87ce2a04 3093 debug_printf ("Have pending sigstop for lwp %d\n", pid);
ae13219e 3094
0d62e5e8
DJ
3095 return;
3096 }
3097
3098 if (debug_threads)
87ce2a04 3099 debug_printf ("Sending sigstop to lwp %d\n", pid);
0d62e5e8 3100
d50171e4 3101 lwp->stop_expected = 1;
bd99dc85 3102 kill_lwp (pid, SIGSTOP);
0d62e5e8
DJ
3103}
3104
7984d532
PA
3105static int
3106send_sigstop_callback (struct inferior_list_entry *entry, void *except)
02fc4de7 3107{
d86d4aaf
DE
3108 struct thread_info *thread = (struct thread_info *) entry;
3109 struct lwp_info *lwp = get_thread_lwp (thread);
02fc4de7 3110
7984d532
PA
3111 /* Ignore EXCEPT. */
3112 if (lwp == except)
3113 return 0;
3114
02fc4de7 3115 if (lwp->stopped)
7984d532 3116 return 0;
02fc4de7
PA
3117
3118 send_sigstop (lwp);
7984d532
PA
3119 return 0;
3120}
3121
3122/* Increment the suspend count of an LWP, and stop it, if not stopped
3123 yet. */
3124static int
3125suspend_and_send_sigstop_callback (struct inferior_list_entry *entry,
3126 void *except)
3127{
d86d4aaf
DE
3128 struct thread_info *thread = (struct thread_info *) entry;
3129 struct lwp_info *lwp = get_thread_lwp (thread);
7984d532
PA
3130
3131 /* Ignore EXCEPT. */
3132 if (lwp == except)
3133 return 0;
3134
3135 lwp->suspended++;
3136
3137 return send_sigstop_callback (entry, except);
02fc4de7
PA
3138}
3139
95954743
PA
3140static void
3141mark_lwp_dead (struct lwp_info *lwp, int wstat)
3142{
3143 /* It's dead, really. */
3144 lwp->dead = 1;
3145
3146 /* Store the exit status for later. */
3147 lwp->status_pending_p = 1;
3148 lwp->status_pending = wstat;
3149
95954743
PA
3150 /* Prevent trying to stop it. */
3151 lwp->stopped = 1;
3152
3153 /* No further stops are expected from a dead lwp. */
3154 lwp->stop_expected = 0;
3155}
3156
fa96cb38
PA
3157/* Wait for all children to stop for the SIGSTOPs we just queued. */
3158
0d62e5e8 3159static void
fa96cb38 3160wait_for_sigstop (void)
0d62e5e8 3161{
bd99dc85 3162 struct thread_info *saved_inferior;
95954743 3163 ptid_t saved_tid;
fa96cb38
PA
3164 int wstat;
3165 int ret;
0d62e5e8
DJ
3166
3167 saved_inferior = current_inferior;
bd99dc85 3168 if (saved_inferior != NULL)
80894984 3169 saved_tid = saved_inferior->entry.id;
bd99dc85 3170 else
95954743 3171 saved_tid = null_ptid; /* avoid bogus unused warning */
bd99dc85 3172
d50171e4 3173 if (debug_threads)
fa96cb38 3174 debug_printf ("wait_for_sigstop: pulling events\n");
d50171e4 3175
fa96cb38
PA
3176 /* Passing NULL_PTID as filter indicates we want all events to be
3177 left pending. Eventually this returns when there are no
3178 unwaited-for children left. */
3179 ret = linux_wait_for_event_filtered (minus_one_ptid, null_ptid,
3180 &wstat, __WALL);
3181 gdb_assert (ret == -1);
0d62e5e8 3182
bd99dc85 3183 if (saved_inferior == NULL || linux_thread_alive (saved_tid))
0d62e5e8
DJ
3184 current_inferior = saved_inferior;
3185 else
3186 {
3187 if (debug_threads)
87ce2a04 3188 debug_printf ("Previously current thread died.\n");
0d62e5e8 3189
bd99dc85
PA
3190 if (non_stop)
3191 {
3192 /* We can't change the current inferior behind GDB's back,
3193 otherwise, a subsequent command may apply to the wrong
3194 process. */
3195 current_inferior = NULL;
3196 }
3197 else
3198 {
3199 /* Set a valid thread as current. */
3200 set_desired_inferior (0);
3201 }
0d62e5e8
DJ
3202 }
3203}
3204
fa593d66
PA
3205/* Returns true if LWP ENTRY is stopped in a jump pad, and we can't
3206 move it out, because we need to report the stop event to GDB. For
3207 example, if the user puts a breakpoint in the jump pad, it's
3208 because she wants to debug it. */
3209
3210static int
3211stuck_in_jump_pad_callback (struct inferior_list_entry *entry, void *data)
3212{
d86d4aaf
DE
3213 struct thread_info *thread = (struct thread_info *) entry;
3214 struct lwp_info *lwp = get_thread_lwp (thread);
fa593d66
PA
3215
3216 gdb_assert (lwp->suspended == 0);
3217 gdb_assert (lwp->stopped);
3218
3219 /* Allow debugging the jump pad, gdb_collect, etc.. */
3220 return (supports_fast_tracepoints ()
58b4daa5 3221 && agent_loaded_p ()
fa593d66
PA
3222 && (gdb_breakpoint_here (lwp->stop_pc)
3223 || lwp->stopped_by_watchpoint
3224 || thread->last_resume_kind == resume_step)
3225 && linux_fast_tracepoint_collecting (lwp, NULL));
3226}
3227
3228static void
3229move_out_of_jump_pad_callback (struct inferior_list_entry *entry)
3230{
d86d4aaf
DE
3231 struct thread_info *thread = (struct thread_info *) entry;
3232 struct lwp_info *lwp = get_thread_lwp (thread);
fa593d66
PA
3233 int *wstat;
3234
3235 gdb_assert (lwp->suspended == 0);
3236 gdb_assert (lwp->stopped);
3237
3238 wstat = lwp->status_pending_p ? &lwp->status_pending : NULL;
3239
3240 /* Allow debugging the jump pad, gdb_collect, etc. */
3241 if (!gdb_breakpoint_here (lwp->stop_pc)
3242 && !lwp->stopped_by_watchpoint
3243 && thread->last_resume_kind != resume_step
3244 && maybe_move_out_of_jump_pad (lwp, wstat))
3245 {
3246 if (debug_threads)
87ce2a04 3247 debug_printf ("LWP %ld needs stabilizing (in jump pad)\n",
d86d4aaf 3248 lwpid_of (thread));
fa593d66
PA
3249
3250 if (wstat)
3251 {
3252 lwp->status_pending_p = 0;
3253 enqueue_one_deferred_signal (lwp, wstat);
3254
3255 if (debug_threads)
87ce2a04
DE
3256 debug_printf ("Signal %d for LWP %ld deferred "
3257 "(in jump pad)\n",
d86d4aaf 3258 WSTOPSIG (*wstat), lwpid_of (thread));
fa593d66
PA
3259 }
3260
3261 linux_resume_one_lwp (lwp, 0, 0, NULL);
3262 }
3263 else
3264 lwp->suspended++;
3265}
3266
3267static int
3268lwp_running (struct inferior_list_entry *entry, void *data)
3269{
d86d4aaf
DE
3270 struct thread_info *thread = (struct thread_info *) entry;
3271 struct lwp_info *lwp = get_thread_lwp (thread);
fa593d66
PA
3272
3273 if (lwp->dead)
3274 return 0;
3275 if (lwp->stopped)
3276 return 0;
3277 return 1;
3278}
3279
7984d532
PA
3280/* Stop all lwps that aren't stopped yet, except EXCEPT, if not NULL.
3281 If SUSPEND, then also increase the suspend count of every LWP,
3282 except EXCEPT. */
3283
0d62e5e8 3284static void
7984d532 3285stop_all_lwps (int suspend, struct lwp_info *except)
0d62e5e8 3286{
bde24c0a
PA
3287 /* Should not be called recursively. */
3288 gdb_assert (stopping_threads == NOT_STOPPING_THREADS);
3289
87ce2a04
DE
3290 if (debug_threads)
3291 {
3292 debug_enter ();
3293 debug_printf ("stop_all_lwps (%s, except=%s)\n",
3294 suspend ? "stop-and-suspend" : "stop",
3295 except != NULL
d86d4aaf 3296 ? target_pid_to_str (ptid_of (get_lwp_thread (except)))
87ce2a04
DE
3297 : "none");
3298 }
3299
bde24c0a
PA
3300 stopping_threads = (suspend
3301 ? STOPPING_AND_SUSPENDING_THREADS
3302 : STOPPING_THREADS);
7984d532
PA
3303
3304 if (suspend)
d86d4aaf 3305 find_inferior (&all_threads, suspend_and_send_sigstop_callback, except);
7984d532 3306 else
d86d4aaf 3307 find_inferior (&all_threads, send_sigstop_callback, except);
fa96cb38 3308 wait_for_sigstop ();
bde24c0a 3309 stopping_threads = NOT_STOPPING_THREADS;
87ce2a04
DE
3310
3311 if (debug_threads)
3312 {
3313 debug_printf ("stop_all_lwps done, setting stopping_threads "
3314 "back to !stopping\n");
3315 debug_exit ();
3316 }
0d62e5e8
DJ
3317}
3318
da6d8c04
DJ
3319/* Resume execution of the inferior process.
3320 If STEP is nonzero, single-step it.
3321 If SIGNAL is nonzero, give it that signal. */
3322
ce3a066d 3323static void
2acc282a 3324linux_resume_one_lwp (struct lwp_info *lwp,
54a0b537 3325 int step, int signal, siginfo_t *info)
da6d8c04 3326{
d86d4aaf 3327 struct thread_info *thread = get_lwp_thread (lwp);
0d62e5e8 3328 struct thread_info *saved_inferior;
fa593d66 3329 int fast_tp_collecting;
0d62e5e8 3330
54a0b537 3331 if (lwp->stopped == 0)
0d62e5e8
DJ
3332 return;
3333
fa593d66
PA
3334 fast_tp_collecting = lwp->collecting_fast_tracepoint;
3335
3336 gdb_assert (!stabilizing_threads || fast_tp_collecting);
3337
219f2f23
PA
3338 /* Cancel actions that rely on GDB not changing the PC (e.g., the
3339 user used the "jump" command, or "set $pc = foo"). */
3340 if (lwp->stop_pc != get_pc (lwp))
3341 {
3342 /* Collecting 'while-stepping' actions doesn't make sense
3343 anymore. */
d86d4aaf 3344 release_while_stepping_state_list (thread);
219f2f23
PA
3345 }
3346
0d62e5e8
DJ
3347 /* If we have pending signals or status, and a new signal, enqueue the
3348 signal. Also enqueue the signal if we are waiting to reinsert a
3349 breakpoint; it will be picked up again below. */
3350 if (signal != 0
fa593d66
PA
3351 && (lwp->status_pending_p
3352 || lwp->pending_signals != NULL
3353 || lwp->bp_reinsert != 0
3354 || fast_tp_collecting))
0d62e5e8
DJ
3355 {
3356 struct pending_signals *p_sig;
bca929d3 3357 p_sig = xmalloc (sizeof (*p_sig));
54a0b537 3358 p_sig->prev = lwp->pending_signals;
0d62e5e8 3359 p_sig->signal = signal;
32ca6d61
DJ
3360 if (info == NULL)
3361 memset (&p_sig->info, 0, sizeof (siginfo_t));
3362 else
3363 memcpy (&p_sig->info, info, sizeof (siginfo_t));
54a0b537 3364 lwp->pending_signals = p_sig;
0d62e5e8
DJ
3365 }
3366
d50171e4
PA
3367 if (lwp->status_pending_p)
3368 {
3369 if (debug_threads)
87ce2a04
DE
3370 debug_printf ("Not resuming lwp %ld (%s, signal %d, stop %s);"
3371 " has pending status\n",
d86d4aaf 3372 lwpid_of (thread), step ? "step" : "continue", signal,
87ce2a04 3373 lwp->stop_expected ? "expected" : "not expected");
d50171e4
PA
3374 return;
3375 }
0d62e5e8
DJ
3376
3377 saved_inferior = current_inferior;
d86d4aaf 3378 current_inferior = thread;
0d62e5e8
DJ
3379
3380 if (debug_threads)
87ce2a04 3381 debug_printf ("Resuming lwp %ld (%s, signal %d, stop %s)\n",
d86d4aaf 3382 lwpid_of (thread), step ? "step" : "continue", signal,
87ce2a04 3383 lwp->stop_expected ? "expected" : "not expected");
0d62e5e8
DJ
3384
3385 /* This bit needs some thinking about. If we get a signal that
3386 we must report while a single-step reinsert is still pending,
3387 we often end up resuming the thread. It might be better to
3388 (ew) allow a stack of pending events; then we could be sure that
3389 the reinsert happened right away and not lose any signals.
3390
3391 Making this stack would also shrink the window in which breakpoints are
54a0b537 3392 uninserted (see comment in linux_wait_for_lwp) but not enough for
0d62e5e8
DJ
3393 complete correctness, so it won't solve that problem. It may be
3394 worthwhile just to solve this one, however. */
54a0b537 3395 if (lwp->bp_reinsert != 0)
0d62e5e8
DJ
3396 {
3397 if (debug_threads)
87ce2a04
DE
3398 debug_printf (" pending reinsert at 0x%s\n",
3399 paddress (lwp->bp_reinsert));
d50171e4 3400
85e00e85 3401 if (can_hardware_single_step ())
d50171e4 3402 {
fa593d66
PA
3403 if (fast_tp_collecting == 0)
3404 {
3405 if (step == 0)
3406 fprintf (stderr, "BAD - reinserting but not stepping.\n");
3407 if (lwp->suspended)
3408 fprintf (stderr, "BAD - reinserting and suspended(%d).\n",
3409 lwp->suspended);
3410 }
d50171e4
PA
3411
3412 step = 1;
3413 }
0d62e5e8
DJ
3414
3415 /* Postpone any pending signal. It was enqueued above. */
3416 signal = 0;
3417 }
3418
fa593d66
PA
3419 if (fast_tp_collecting == 1)
3420 {
3421 if (debug_threads)
87ce2a04
DE
3422 debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad"
3423 " (exit-jump-pad-bkpt)\n",
d86d4aaf 3424 lwpid_of (thread));
fa593d66
PA
3425
3426 /* Postpone any pending signal. It was enqueued above. */
3427 signal = 0;
3428 }
3429 else if (fast_tp_collecting == 2)
3430 {
3431 if (debug_threads)
87ce2a04
DE
3432 debug_printf ("lwp %ld wants to get out of fast tracepoint jump pad"
3433 " single-stepping\n",
d86d4aaf 3434 lwpid_of (thread));
fa593d66
PA
3435
3436 if (can_hardware_single_step ())
3437 step = 1;
3438 else
3439 fatal ("moving out of jump pad single-stepping"
3440 " not implemented on this target");
3441
3442 /* Postpone any pending signal. It was enqueued above. */
3443 signal = 0;
3444 }
3445
219f2f23
PA
3446 /* If we have while-stepping actions in this thread set it stepping.
3447 If we have a signal to deliver, it may or may not be set to
3448 SIG_IGN, we don't know. Assume so, and allow collecting
3449 while-stepping into a signal handler. A possible smart thing to
3450 do would be to set an internal breakpoint at the signal return
3451 address, continue, and carry on catching this while-stepping
3452 action only when that breakpoint is hit. A future
3453 enhancement. */
d86d4aaf 3454 if (thread->while_stepping != NULL
219f2f23
PA
3455 && can_hardware_single_step ())
3456 {
3457 if (debug_threads)
87ce2a04 3458 debug_printf ("lwp %ld has a while-stepping action -> forcing step.\n",
d86d4aaf 3459 lwpid_of (thread));
219f2f23
PA
3460 step = 1;
3461 }
3462
aa691b87 3463 if (debug_threads && the_low_target.get_pc != NULL)
0d62e5e8 3464 {
442ea881
PA
3465 struct regcache *regcache = get_thread_regcache (current_inferior, 1);
3466 CORE_ADDR pc = (*the_low_target.get_pc) (regcache);
87ce2a04 3467 debug_printf (" resuming from pc 0x%lx\n", (long) pc);
0d62e5e8
DJ
3468 }
3469
fa593d66
PA
3470 /* If we have pending signals, consume one unless we are trying to
3471 reinsert a breakpoint or we're trying to finish a fast tracepoint
3472 collect. */
3473 if (lwp->pending_signals != NULL
3474 && lwp->bp_reinsert == 0
3475 && fast_tp_collecting == 0)
0d62e5e8
DJ
3476 {
3477 struct pending_signals **p_sig;
3478
54a0b537 3479 p_sig = &lwp->pending_signals;
0d62e5e8
DJ
3480 while ((*p_sig)->prev != NULL)
3481 p_sig = &(*p_sig)->prev;
3482
3483 signal = (*p_sig)->signal;
32ca6d61 3484 if ((*p_sig)->info.si_signo != 0)
d86d4aaf 3485 ptrace (PTRACE_SETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
56f7af9c 3486 &(*p_sig)->info);
32ca6d61 3487
0d62e5e8
DJ
3488 free (*p_sig);
3489 *p_sig = NULL;
3490 }
3491
aa5ca48f
DE
3492 if (the_low_target.prepare_to_resume != NULL)
3493 the_low_target.prepare_to_resume (lwp);
3494
d86d4aaf 3495 regcache_invalidate_thread (thread);
da6d8c04 3496 errno = 0;
54a0b537 3497 lwp->stopped = 0;
c3adc08c 3498 lwp->stopped_by_watchpoint = 0;
54a0b537 3499 lwp->stepping = step;
d86d4aaf 3500 ptrace (step ? PTRACE_SINGLESTEP : PTRACE_CONT, lwpid_of (thread),
b8e1b30e 3501 (PTRACE_TYPE_ARG3) 0,
14ce3065
DE
3502 /* Coerce to a uintptr_t first to avoid potential gcc warning
3503 of coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e 3504 (PTRACE_TYPE_ARG4) (uintptr_t) signal);
0d62e5e8
DJ
3505
3506 current_inferior = saved_inferior;
da6d8c04 3507 if (errno)
3221518c
UW
3508 {
3509 /* ESRCH from ptrace either means that the thread was already
3510 running (an error) or that it is gone (a race condition). If
3511 it's gone, we will get a notification the next time we wait,
3512 so we can ignore the error. We could differentiate these
3513 two, but it's tricky without waiting; the thread still exists
3514 as a zombie, so sending it signal 0 would succeed. So just
3515 ignore ESRCH. */
3516 if (errno == ESRCH)
3517 return;
3518
3519 perror_with_name ("ptrace");
3520 }
da6d8c04
DJ
3521}
3522
2bd7c093
PA
3523struct thread_resume_array
3524{
3525 struct thread_resume *resume;
3526 size_t n;
3527};
64386c31 3528
ebcf782c
DE
3529/* This function is called once per thread via find_inferior.
3530 ARG is a pointer to a thread_resume_array struct.
3531 We look up the thread specified by ENTRY in ARG, and mark the thread
3532 with a pointer to the appropriate resume request.
5544ad89
DJ
3533
3534 This algorithm is O(threads * resume elements), but resume elements
3535 is small (and will remain small at least until GDB supports thread
3536 suspension). */
ebcf782c 3537
2bd7c093
PA
3538static int
3539linux_set_resume_request (struct inferior_list_entry *entry, void *arg)
0d62e5e8 3540{
d86d4aaf
DE
3541 struct thread_info *thread = (struct thread_info *) entry;
3542 struct lwp_info *lwp = get_thread_lwp (thread);
5544ad89 3543 int ndx;
2bd7c093 3544 struct thread_resume_array *r;
64386c31 3545
2bd7c093 3546 r = arg;
64386c31 3547
2bd7c093 3548 for (ndx = 0; ndx < r->n; ndx++)
95954743
PA
3549 {
3550 ptid_t ptid = r->resume[ndx].thread;
3551 if (ptid_equal (ptid, minus_one_ptid)
3552 || ptid_equal (ptid, entry->id)
0c9070b3
YQ
3553 /* Handle both 'pPID' and 'pPID.-1' as meaning 'all threads
3554 of PID'. */
d86d4aaf 3555 || (ptid_get_pid (ptid) == pid_of (thread)
0c9070b3
YQ
3556 && (ptid_is_pid (ptid)
3557 || ptid_get_lwp (ptid) == -1)))
95954743 3558 {
d50171e4 3559 if (r->resume[ndx].kind == resume_stop
8336d594 3560 && thread->last_resume_kind == resume_stop)
d50171e4
PA
3561 {
3562 if (debug_threads)
87ce2a04
DE
3563 debug_printf ("already %s LWP %ld at GDB's request\n",
3564 (thread->last_status.kind
3565 == TARGET_WAITKIND_STOPPED)
3566 ? "stopped"
3567 : "stopping",
d86d4aaf 3568 lwpid_of (thread));
d50171e4
PA
3569
3570 continue;
3571 }
3572
95954743 3573 lwp->resume = &r->resume[ndx];
8336d594 3574 thread->last_resume_kind = lwp->resume->kind;
fa593d66 3575
c2d6af84
PA
3576 lwp->step_range_start = lwp->resume->step_range_start;
3577 lwp->step_range_end = lwp->resume->step_range_end;
3578
fa593d66
PA
3579 /* If we had a deferred signal to report, dequeue one now.
3580 This can happen if LWP gets more than one signal while
3581 trying to get out of a jump pad. */
3582 if (lwp->stopped
3583 && !lwp->status_pending_p
3584 && dequeue_one_deferred_signal (lwp, &lwp->status_pending))
3585 {
3586 lwp->status_pending_p = 1;
3587
3588 if (debug_threads)
87ce2a04
DE
3589 debug_printf ("Dequeueing deferred signal %d for LWP %ld, "
3590 "leaving status pending.\n",
d86d4aaf
DE
3591 WSTOPSIG (lwp->status_pending),
3592 lwpid_of (thread));
fa593d66
PA
3593 }
3594
95954743
PA
3595 return 0;
3596 }
3597 }
2bd7c093
PA
3598
3599 /* No resume action for this thread. */
3600 lwp->resume = NULL;
64386c31 3601
2bd7c093 3602 return 0;
5544ad89
DJ
3603}
3604
20ad9378
DE
3605/* find_inferior callback for linux_resume.
3606 Set *FLAG_P if this lwp has an interesting status pending. */
5544ad89 3607
bd99dc85
PA
3608static int
3609resume_status_pending_p (struct inferior_list_entry *entry, void *flag_p)
5544ad89 3610{
d86d4aaf
DE
3611 struct thread_info *thread = (struct thread_info *) entry;
3612 struct lwp_info *lwp = get_thread_lwp (thread);
5544ad89 3613
bd99dc85
PA
3614 /* LWPs which will not be resumed are not interesting, because
3615 we might not wait for them next time through linux_wait. */
2bd7c093 3616 if (lwp->resume == NULL)
bd99dc85 3617 return 0;
64386c31 3618
bd99dc85 3619 if (lwp->status_pending_p)
d50171e4
PA
3620 * (int *) flag_p = 1;
3621
3622 return 0;
3623}
3624
3625/* Return 1 if this lwp that GDB wants running is stopped at an
3626 internal breakpoint that we need to step over. It assumes that any
3627 required STOP_PC adjustment has already been propagated to the
3628 inferior's regcache. */
3629
3630static int
3631need_step_over_p (struct inferior_list_entry *entry, void *dummy)
3632{
d86d4aaf
DE
3633 struct thread_info *thread = (struct thread_info *) entry;
3634 struct lwp_info *lwp = get_thread_lwp (thread);
d50171e4
PA
3635 struct thread_info *saved_inferior;
3636 CORE_ADDR pc;
3637
3638 /* LWPs which will not be resumed are not interesting, because we
3639 might not wait for them next time through linux_wait. */
3640
3641 if (!lwp->stopped)
3642 {
3643 if (debug_threads)
87ce2a04 3644 debug_printf ("Need step over [LWP %ld]? Ignoring, not stopped\n",
d86d4aaf 3645 lwpid_of (thread));
d50171e4
PA
3646 return 0;
3647 }
3648
8336d594 3649 if (thread->last_resume_kind == resume_stop)
d50171e4
PA
3650 {
3651 if (debug_threads)
87ce2a04
DE
3652 debug_printf ("Need step over [LWP %ld]? Ignoring, should remain"
3653 " stopped\n",
d86d4aaf 3654 lwpid_of (thread));
d50171e4
PA
3655 return 0;
3656 }
3657
7984d532
PA
3658 gdb_assert (lwp->suspended >= 0);
3659
3660 if (lwp->suspended)
3661 {
3662 if (debug_threads)
87ce2a04 3663 debug_printf ("Need step over [LWP %ld]? Ignoring, suspended\n",
d86d4aaf 3664 lwpid_of (thread));
7984d532
PA
3665 return 0;
3666 }
3667
d50171e4
PA
3668 if (!lwp->need_step_over)
3669 {
3670 if (debug_threads)
d86d4aaf 3671 debug_printf ("Need step over [LWP %ld]? No\n", lwpid_of (thread));
d50171e4 3672 }
5544ad89 3673
bd99dc85 3674 if (lwp->status_pending_p)
d50171e4
PA
3675 {
3676 if (debug_threads)
87ce2a04
DE
3677 debug_printf ("Need step over [LWP %ld]? Ignoring, has pending"
3678 " status.\n",
d86d4aaf 3679 lwpid_of (thread));
d50171e4
PA
3680 return 0;
3681 }
3682
3683 /* Note: PC, not STOP_PC. Either GDB has adjusted the PC already,
3684 or we have. */
3685 pc = get_pc (lwp);
3686
3687 /* If the PC has changed since we stopped, then don't do anything,
3688 and let the breakpoint/tracepoint be hit. This happens if, for
3689 instance, GDB handled the decr_pc_after_break subtraction itself,
3690 GDB is OOL stepping this thread, or the user has issued a "jump"
3691 command, or poked thread's registers herself. */
3692 if (pc != lwp->stop_pc)
3693 {
3694 if (debug_threads)
87ce2a04
DE
3695 debug_printf ("Need step over [LWP %ld]? Cancelling, PC was changed. "
3696 "Old stop_pc was 0x%s, PC is now 0x%s\n",
d86d4aaf
DE
3697 lwpid_of (thread),
3698 paddress (lwp->stop_pc), paddress (pc));
d50171e4
PA
3699
3700 lwp->need_step_over = 0;
3701 return 0;
3702 }
3703
3704 saved_inferior = current_inferior;
8336d594 3705 current_inferior = thread;
d50171e4 3706
8b07ae33 3707 /* We can only step over breakpoints we know about. */
fa593d66 3708 if (breakpoint_here (pc) || fast_tracepoint_jump_here (pc))
d50171e4 3709 {
8b07ae33 3710 /* Don't step over a breakpoint that GDB expects to hit
9f3a5c85
LM
3711 though. If the condition is being evaluated on the target's side
3712 and it evaluate to false, step over this breakpoint as well. */
3713 if (gdb_breakpoint_here (pc)
d3ce09f5
SS
3714 && gdb_condition_true_at_breakpoint (pc)
3715 && gdb_no_commands_at_breakpoint (pc))
8b07ae33
PA
3716 {
3717 if (debug_threads)
87ce2a04
DE
3718 debug_printf ("Need step over [LWP %ld]? yes, but found"
3719 " GDB breakpoint at 0x%s; skipping step over\n",
d86d4aaf 3720 lwpid_of (thread), paddress (pc));
d50171e4 3721
8b07ae33
PA
3722 current_inferior = saved_inferior;
3723 return 0;
3724 }
3725 else
3726 {
3727 if (debug_threads)
87ce2a04
DE
3728 debug_printf ("Need step over [LWP %ld]? yes, "
3729 "found breakpoint at 0x%s\n",
d86d4aaf 3730 lwpid_of (thread), paddress (pc));
d50171e4 3731
8b07ae33
PA
3732 /* We've found an lwp that needs stepping over --- return 1 so
3733 that find_inferior stops looking. */
3734 current_inferior = saved_inferior;
3735
3736 /* If the step over is cancelled, this is set again. */
3737 lwp->need_step_over = 0;
3738 return 1;
3739 }
d50171e4
PA
3740 }
3741
3742 current_inferior = saved_inferior;
3743
3744 if (debug_threads)
87ce2a04
DE
3745 debug_printf ("Need step over [LWP %ld]? No, no breakpoint found"
3746 " at 0x%s\n",
d86d4aaf 3747 lwpid_of (thread), paddress (pc));
c6ecbae5 3748
bd99dc85 3749 return 0;
5544ad89
DJ
3750}
3751
d50171e4
PA
3752/* Start a step-over operation on LWP. When LWP stopped at a
3753 breakpoint, to make progress, we need to remove the breakpoint out
3754 of the way. If we let other threads run while we do that, they may
3755 pass by the breakpoint location and miss hitting it. To avoid
3756 that, a step-over momentarily stops all threads while LWP is
3757 single-stepped while the breakpoint is temporarily uninserted from
3758 the inferior. When the single-step finishes, we reinsert the
3759 breakpoint, and let all threads that are supposed to be running,
3760 run again.
3761
3762 On targets that don't support hardware single-step, we don't
3763 currently support full software single-stepping. Instead, we only
3764 support stepping over the thread event breakpoint, by asking the
3765 low target where to place a reinsert breakpoint. Since this
3766 routine assumes the breakpoint being stepped over is a thread event
3767 breakpoint, it usually assumes the return address of the current
3768 function is a good enough place to set the reinsert breakpoint. */
3769
3770static int
3771start_step_over (struct lwp_info *lwp)
3772{
d86d4aaf 3773 struct thread_info *thread = get_lwp_thread (lwp);
d50171e4
PA
3774 struct thread_info *saved_inferior;
3775 CORE_ADDR pc;
3776 int step;
3777
3778 if (debug_threads)
87ce2a04 3779 debug_printf ("Starting step-over on LWP %ld. Stopping all threads\n",
d86d4aaf 3780 lwpid_of (thread));
d50171e4 3781
7984d532
PA
3782 stop_all_lwps (1, lwp);
3783 gdb_assert (lwp->suspended == 0);
d50171e4
PA
3784
3785 if (debug_threads)
87ce2a04 3786 debug_printf ("Done stopping all threads for step-over.\n");
d50171e4
PA
3787
3788 /* Note, we should always reach here with an already adjusted PC,
3789 either by GDB (if we're resuming due to GDB's request), or by our
3790 caller, if we just finished handling an internal breakpoint GDB
3791 shouldn't care about. */
3792 pc = get_pc (lwp);
3793
3794 saved_inferior = current_inferior;
d86d4aaf 3795 current_inferior = thread;
d50171e4
PA
3796
3797 lwp->bp_reinsert = pc;
3798 uninsert_breakpoints_at (pc);
fa593d66 3799 uninsert_fast_tracepoint_jumps_at (pc);
d50171e4
PA
3800
3801 if (can_hardware_single_step ())
3802 {
3803 step = 1;
3804 }
3805 else
3806 {
3807 CORE_ADDR raddr = (*the_low_target.breakpoint_reinsert_addr) ();
3808 set_reinsert_breakpoint (raddr);
3809 step = 0;
3810 }
3811
3812 current_inferior = saved_inferior;
3813
3814 linux_resume_one_lwp (lwp, step, 0, NULL);
3815
3816 /* Require next event from this LWP. */
d86d4aaf 3817 step_over_bkpt = thread->entry.id;
d50171e4
PA
3818 return 1;
3819}
3820
3821/* Finish a step-over. Reinsert the breakpoint we had uninserted in
3822 start_step_over, if still there, and delete any reinsert
3823 breakpoints we've set, on non hardware single-step targets. */
3824
3825static int
3826finish_step_over (struct lwp_info *lwp)
3827{
3828 if (lwp->bp_reinsert != 0)
3829 {
3830 if (debug_threads)
87ce2a04 3831 debug_printf ("Finished step over.\n");
d50171e4
PA
3832
3833 /* Reinsert any breakpoint at LWP->BP_REINSERT. Note that there
3834 may be no breakpoint to reinsert there by now. */
3835 reinsert_breakpoints_at (lwp->bp_reinsert);
fa593d66 3836 reinsert_fast_tracepoint_jumps_at (lwp->bp_reinsert);
d50171e4
PA
3837
3838 lwp->bp_reinsert = 0;
3839
3840 /* Delete any software-single-step reinsert breakpoints. No
3841 longer needed. We don't have to worry about other threads
3842 hitting this trap, and later not being able to explain it,
3843 because we were stepping over a breakpoint, and we hold all
3844 threads but LWP stopped while doing that. */
3845 if (!can_hardware_single_step ())
3846 delete_reinsert_breakpoints ();
3847
3848 step_over_bkpt = null_ptid;
3849 return 1;
3850 }
3851 else
3852 return 0;
3853}
3854
5544ad89
DJ
3855/* This function is called once per thread. We check the thread's resume
3856 request, which will tell us whether to resume, step, or leave the thread
bd99dc85 3857 stopped; and what signal, if any, it should be sent.
5544ad89 3858
bd99dc85
PA
3859 For threads which we aren't explicitly told otherwise, we preserve
3860 the stepping flag; this is used for stepping over gdbserver-placed
3861 breakpoints.
3862
3863 If pending_flags was set in any thread, we queue any needed
3864 signals, since we won't actually resume. We already have a pending
3865 event to report, so we don't need to preserve any step requests;
3866 they should be re-issued if necessary. */
3867
3868static int
3869linux_resume_one_thread (struct inferior_list_entry *entry, void *arg)
5544ad89 3870{
d86d4aaf
DE
3871 struct thread_info *thread = (struct thread_info *) entry;
3872 struct lwp_info *lwp = get_thread_lwp (thread);
bd99dc85 3873 int step;
d50171e4
PA
3874 int leave_all_stopped = * (int *) arg;
3875 int leave_pending;
5544ad89 3876
2bd7c093 3877 if (lwp->resume == NULL)
bd99dc85 3878 return 0;
5544ad89 3879
bd99dc85 3880 if (lwp->resume->kind == resume_stop)
5544ad89 3881 {
bd99dc85 3882 if (debug_threads)
d86d4aaf 3883 debug_printf ("resume_stop request for LWP %ld\n", lwpid_of (thread));
bd99dc85
PA
3884
3885 if (!lwp->stopped)
3886 {
3887 if (debug_threads)
d86d4aaf 3888 debug_printf ("stopping LWP %ld\n", lwpid_of (thread));
bd99dc85 3889
d50171e4
PA
3890 /* Stop the thread, and wait for the event asynchronously,
3891 through the event loop. */
02fc4de7 3892 send_sigstop (lwp);
bd99dc85
PA
3893 }
3894 else
3895 {
3896 if (debug_threads)
87ce2a04 3897 debug_printf ("already stopped LWP %ld\n",
d86d4aaf 3898 lwpid_of (thread));
d50171e4
PA
3899
3900 /* The LWP may have been stopped in an internal event that
3901 was not meant to be notified back to GDB (e.g., gdbserver
3902 breakpoint), so we should be reporting a stop event in
3903 this case too. */
3904
3905 /* If the thread already has a pending SIGSTOP, this is a
3906 no-op. Otherwise, something later will presumably resume
3907 the thread and this will cause it to cancel any pending
3908 operation, due to last_resume_kind == resume_stop. If
3909 the thread already has a pending status to report, we
3910 will still report it the next time we wait - see
3911 status_pending_p_callback. */
1a981360
PA
3912
3913 /* If we already have a pending signal to report, then
3914 there's no need to queue a SIGSTOP, as this means we're
3915 midway through moving the LWP out of the jumppad, and we
3916 will report the pending signal as soon as that is
3917 finished. */
3918 if (lwp->pending_signals_to_report == NULL)
3919 send_sigstop (lwp);
bd99dc85 3920 }
32ca6d61 3921
bd99dc85
PA
3922 /* For stop requests, we're done. */
3923 lwp->resume = NULL;
fc7238bb 3924 thread->last_status.kind = TARGET_WAITKIND_IGNORE;
bd99dc85 3925 return 0;
5544ad89
DJ
3926 }
3927
bd99dc85
PA
3928 /* If this thread which is about to be resumed has a pending status,
3929 then don't resume any threads - we can just report the pending
3930 status. Make sure to queue any signals that would otherwise be
3931 sent. In all-stop mode, we do this decision based on if *any*
d50171e4
PA
3932 thread has a pending status. If there's a thread that needs the
3933 step-over-breakpoint dance, then don't resume any other thread
3934 but that particular one. */
3935 leave_pending = (lwp->status_pending_p || leave_all_stopped);
5544ad89 3936
d50171e4 3937 if (!leave_pending)
bd99dc85
PA
3938 {
3939 if (debug_threads)
d86d4aaf 3940 debug_printf ("resuming LWP %ld\n", lwpid_of (thread));
5544ad89 3941
d50171e4 3942 step = (lwp->resume->kind == resume_step);
2acc282a 3943 linux_resume_one_lwp (lwp, step, lwp->resume->sig, NULL);
bd99dc85
PA
3944 }
3945 else
3946 {
3947 if (debug_threads)
d86d4aaf 3948 debug_printf ("leaving LWP %ld stopped\n", lwpid_of (thread));
5544ad89 3949
bd99dc85
PA
3950 /* If we have a new signal, enqueue the signal. */
3951 if (lwp->resume->sig != 0)
3952 {
3953 struct pending_signals *p_sig;
3954 p_sig = xmalloc (sizeof (*p_sig));
3955 p_sig->prev = lwp->pending_signals;
3956 p_sig->signal = lwp->resume->sig;
3957 memset (&p_sig->info, 0, sizeof (siginfo_t));
3958
3959 /* If this is the same signal we were previously stopped by,
3960 make sure to queue its siginfo. We can ignore the return
3961 value of ptrace; if it fails, we'll skip
3962 PTRACE_SETSIGINFO. */
3963 if (WIFSTOPPED (lwp->last_status)
3964 && WSTOPSIG (lwp->last_status) == lwp->resume->sig)
d86d4aaf 3965 ptrace (PTRACE_GETSIGINFO, lwpid_of (thread), (PTRACE_TYPE_ARG3) 0,
56f7af9c 3966 &p_sig->info);
bd99dc85
PA
3967
3968 lwp->pending_signals = p_sig;
3969 }
3970 }
5544ad89 3971
fc7238bb 3972 thread->last_status.kind = TARGET_WAITKIND_IGNORE;
bd99dc85 3973 lwp->resume = NULL;
5544ad89 3974 return 0;
0d62e5e8
DJ
3975}
3976
3977static void
2bd7c093 3978linux_resume (struct thread_resume *resume_info, size_t n)
0d62e5e8 3979{
2bd7c093 3980 struct thread_resume_array array = { resume_info, n };
d86d4aaf 3981 struct thread_info *need_step_over = NULL;
d50171e4
PA
3982 int any_pending;
3983 int leave_all_stopped;
c6ecbae5 3984
87ce2a04
DE
3985 if (debug_threads)
3986 {
3987 debug_enter ();
3988 debug_printf ("linux_resume:\n");
3989 }
3990
2bd7c093 3991 find_inferior (&all_threads, linux_set_resume_request, &array);
5544ad89 3992
d50171e4
PA
3993 /* If there is a thread which would otherwise be resumed, which has
3994 a pending status, then don't resume any threads - we can just
3995 report the pending status. Make sure to queue any signals that
3996 would otherwise be sent. In non-stop mode, we'll apply this
3997 logic to each thread individually. We consume all pending events
3998 before considering to start a step-over (in all-stop). */
3999 any_pending = 0;
bd99dc85 4000 if (!non_stop)
d86d4aaf 4001 find_inferior (&all_threads, resume_status_pending_p, &any_pending);
d50171e4
PA
4002
4003 /* If there is a thread which would otherwise be resumed, which is
4004 stopped at a breakpoint that needs stepping over, then don't
4005 resume any threads - have it step over the breakpoint with all
4006 other threads stopped, then resume all threads again. Make sure
4007 to queue any signals that would otherwise be delivered or
4008 queued. */
4009 if (!any_pending && supports_breakpoints ())
4010 need_step_over
d86d4aaf
DE
4011 = (struct thread_info *) find_inferior (&all_threads,
4012 need_step_over_p, NULL);
d50171e4
PA
4013
4014 leave_all_stopped = (need_step_over != NULL || any_pending);
4015
4016 if (debug_threads)
4017 {
4018 if (need_step_over != NULL)
87ce2a04 4019 debug_printf ("Not resuming all, need step over\n");
d50171e4 4020 else if (any_pending)
87ce2a04
DE
4021 debug_printf ("Not resuming, all-stop and found "
4022 "an LWP with pending status\n");
d50171e4 4023 else
87ce2a04 4024 debug_printf ("Resuming, no pending status or step over needed\n");
d50171e4
PA
4025 }
4026
4027 /* Even if we're leaving threads stopped, queue all signals we'd
4028 otherwise deliver. */
4029 find_inferior (&all_threads, linux_resume_one_thread, &leave_all_stopped);
4030
4031 if (need_step_over)
d86d4aaf 4032 start_step_over (get_thread_lwp (need_step_over));
87ce2a04
DE
4033
4034 if (debug_threads)
4035 {
4036 debug_printf ("linux_resume done\n");
4037 debug_exit ();
4038 }
d50171e4
PA
4039}
4040
4041/* This function is called once per thread. We check the thread's
4042 last resume request, which will tell us whether to resume, step, or
4043 leave the thread stopped. Any signal the client requested to be
4044 delivered has already been enqueued at this point.
4045
4046 If any thread that GDB wants running is stopped at an internal
4047 breakpoint that needs stepping over, we start a step-over operation
4048 on that particular thread, and leave all others stopped. */
4049
7984d532
PA
4050static int
4051proceed_one_lwp (struct inferior_list_entry *entry, void *except)
d50171e4 4052{
d86d4aaf
DE
4053 struct thread_info *thread = (struct thread_info *) entry;
4054 struct lwp_info *lwp = get_thread_lwp (thread);
d50171e4
PA
4055 int step;
4056
7984d532
PA
4057 if (lwp == except)
4058 return 0;
d50171e4
PA
4059
4060 if (debug_threads)
d86d4aaf 4061 debug_printf ("proceed_one_lwp: lwp %ld\n", lwpid_of (thread));
d50171e4
PA
4062
4063 if (!lwp->stopped)
4064 {
4065 if (debug_threads)
d86d4aaf 4066 debug_printf (" LWP %ld already running\n", lwpid_of (thread));
7984d532 4067 return 0;
d50171e4
PA
4068 }
4069
02fc4de7
PA
4070 if (thread->last_resume_kind == resume_stop
4071 && thread->last_status.kind != TARGET_WAITKIND_IGNORE)
d50171e4
PA
4072 {
4073 if (debug_threads)
87ce2a04 4074 debug_printf (" client wants LWP to remain %ld stopped\n",
d86d4aaf 4075 lwpid_of (thread));
7984d532 4076 return 0;
d50171e4
PA
4077 }
4078
4079 if (lwp->status_pending_p)
4080 {
4081 if (debug_threads)
87ce2a04 4082 debug_printf (" LWP %ld has pending status, leaving stopped\n",
d86d4aaf 4083 lwpid_of (thread));
7984d532 4084 return 0;
d50171e4
PA
4085 }
4086
7984d532
PA
4087 gdb_assert (lwp->suspended >= 0);
4088
d50171e4
PA
4089 if (lwp->suspended)
4090 {
4091 if (debug_threads)
d86d4aaf 4092 debug_printf (" LWP %ld is suspended\n", lwpid_of (thread));
7984d532 4093 return 0;
d50171e4
PA
4094 }
4095
1a981360
PA
4096 if (thread->last_resume_kind == resume_stop
4097 && lwp->pending_signals_to_report == NULL
4098 && lwp->collecting_fast_tracepoint == 0)
02fc4de7
PA
4099 {
4100 /* We haven't reported this LWP as stopped yet (otherwise, the
4101 last_status.kind check above would catch it, and we wouldn't
4102 reach here. This LWP may have been momentarily paused by a
4103 stop_all_lwps call while handling for example, another LWP's
4104 step-over. In that case, the pending expected SIGSTOP signal
4105 that was queued at vCont;t handling time will have already
4106 been consumed by wait_for_sigstop, and so we need to requeue
4107 another one here. Note that if the LWP already has a SIGSTOP
4108 pending, this is a no-op. */
4109
4110 if (debug_threads)
87ce2a04
DE
4111 debug_printf ("Client wants LWP %ld to stop. "
4112 "Making sure it has a SIGSTOP pending\n",
d86d4aaf 4113 lwpid_of (thread));
02fc4de7
PA
4114
4115 send_sigstop (lwp);
4116 }
4117
8336d594 4118 step = thread->last_resume_kind == resume_step;
d50171e4 4119 linux_resume_one_lwp (lwp, step, 0, NULL);
7984d532
PA
4120 return 0;
4121}
4122
4123static int
4124unsuspend_and_proceed_one_lwp (struct inferior_list_entry *entry, void *except)
4125{
d86d4aaf
DE
4126 struct thread_info *thread = (struct thread_info *) entry;
4127 struct lwp_info *lwp = get_thread_lwp (thread);
7984d532
PA
4128
4129 if (lwp == except)
4130 return 0;
4131
4132 lwp->suspended--;
4133 gdb_assert (lwp->suspended >= 0);
4134
4135 return proceed_one_lwp (entry, except);
d50171e4
PA
4136}
4137
4138/* When we finish a step-over, set threads running again. If there's
4139 another thread that may need a step-over, now's the time to start
4140 it. Eventually, we'll move all threads past their breakpoints. */
4141
4142static void
4143proceed_all_lwps (void)
4144{
d86d4aaf 4145 struct thread_info *need_step_over;
d50171e4
PA
4146
4147 /* If there is a thread which would otherwise be resumed, which is
4148 stopped at a breakpoint that needs stepping over, then don't
4149 resume any threads - have it step over the breakpoint with all
4150 other threads stopped, then resume all threads again. */
4151
4152 if (supports_breakpoints ())
4153 {
4154 need_step_over
d86d4aaf
DE
4155 = (struct thread_info *) find_inferior (&all_threads,
4156 need_step_over_p, NULL);
d50171e4
PA
4157
4158 if (need_step_over != NULL)
4159 {
4160 if (debug_threads)
87ce2a04
DE
4161 debug_printf ("proceed_all_lwps: found "
4162 "thread %ld needing a step-over\n",
4163 lwpid_of (need_step_over));
d50171e4 4164
d86d4aaf 4165 start_step_over (get_thread_lwp (need_step_over));
d50171e4
PA
4166 return;
4167 }
4168 }
5544ad89 4169
d50171e4 4170 if (debug_threads)
87ce2a04 4171 debug_printf ("Proceeding, no step-over needed\n");
d50171e4 4172
d86d4aaf 4173 find_inferior (&all_threads, proceed_one_lwp, NULL);
d50171e4
PA
4174}
4175
4176/* Stopped LWPs that the client wanted to be running, that don't have
4177 pending statuses, are set to run again, except for EXCEPT, if not
4178 NULL. This undoes a stop_all_lwps call. */
4179
4180static void
7984d532 4181unstop_all_lwps (int unsuspend, struct lwp_info *except)
d50171e4 4182{
5544ad89
DJ
4183 if (debug_threads)
4184 {
87ce2a04 4185 debug_enter ();
d50171e4 4186 if (except)
87ce2a04 4187 debug_printf ("unstopping all lwps, except=(LWP %ld)\n",
d86d4aaf 4188 lwpid_of (get_lwp_thread (except)));
5544ad89 4189 else
87ce2a04 4190 debug_printf ("unstopping all lwps\n");
5544ad89
DJ
4191 }
4192
7984d532 4193 if (unsuspend)
d86d4aaf 4194 find_inferior (&all_threads, unsuspend_and_proceed_one_lwp, except);
7984d532 4195 else
d86d4aaf 4196 find_inferior (&all_threads, proceed_one_lwp, except);
87ce2a04
DE
4197
4198 if (debug_threads)
4199 {
4200 debug_printf ("unstop_all_lwps done\n");
4201 debug_exit ();
4202 }
0d62e5e8
DJ
4203}
4204
58caa3dc
DJ
4205
4206#ifdef HAVE_LINUX_REGSETS
4207
1faeff08
MR
4208#define use_linux_regsets 1
4209
030031ee
PA
4210/* Returns true if REGSET has been disabled. */
4211
4212static int
4213regset_disabled (struct regsets_info *info, struct regset_info *regset)
4214{
4215 return (info->disabled_regsets != NULL
4216 && info->disabled_regsets[regset - info->regsets]);
4217}
4218
4219/* Disable REGSET. */
4220
4221static void
4222disable_regset (struct regsets_info *info, struct regset_info *regset)
4223{
4224 int dr_offset;
4225
4226 dr_offset = regset - info->regsets;
4227 if (info->disabled_regsets == NULL)
4228 info->disabled_regsets = xcalloc (1, info->num_regsets);
4229 info->disabled_regsets[dr_offset] = 1;
4230}
4231
58caa3dc 4232static int
3aee8918
PA
4233regsets_fetch_inferior_registers (struct regsets_info *regsets_info,
4234 struct regcache *regcache)
58caa3dc
DJ
4235{
4236 struct regset_info *regset;
e9d25b98 4237 int saw_general_regs = 0;
95954743 4238 int pid;
1570b33e 4239 struct iovec iov;
58caa3dc 4240
3aee8918 4241 regset = regsets_info->regsets;
58caa3dc 4242
d86d4aaf 4243 pid = lwpid_of (current_inferior);
58caa3dc
DJ
4244 while (regset->size >= 0)
4245 {
1570b33e
L
4246 void *buf, *data;
4247 int nt_type, res;
58caa3dc 4248
030031ee 4249 if (regset->size == 0 || regset_disabled (regsets_info, regset))
58caa3dc
DJ
4250 {
4251 regset ++;
4252 continue;
4253 }
4254
bca929d3 4255 buf = xmalloc (regset->size);
1570b33e
L
4256
4257 nt_type = regset->nt_type;
4258 if (nt_type)
4259 {
4260 iov.iov_base = buf;
4261 iov.iov_len = regset->size;
4262 data = (void *) &iov;
4263 }
4264 else
4265 data = buf;
4266
dfb64f85 4267#ifndef __sparc__
f15f9948 4268 res = ptrace (regset->get_request, pid,
b8e1b30e 4269 (PTRACE_TYPE_ARG3) (long) nt_type, data);
dfb64f85 4270#else
1570b33e 4271 res = ptrace (regset->get_request, pid, data, nt_type);
dfb64f85 4272#endif
58caa3dc
DJ
4273 if (res < 0)
4274 {
4275 if (errno == EIO)
4276 {
52fa2412 4277 /* If we get EIO on a regset, do not try it again for
3aee8918 4278 this process mode. */
030031ee 4279 disable_regset (regsets_info, regset);
fdeb2a12 4280 free (buf);
52fa2412 4281 continue;
58caa3dc
DJ
4282 }
4283 else
4284 {
0d62e5e8 4285 char s[256];
95954743
PA
4286 sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d",
4287 pid);
0d62e5e8 4288 perror (s);
58caa3dc
DJ
4289 }
4290 }
e9d25b98
DJ
4291 else if (regset->type == GENERAL_REGS)
4292 saw_general_regs = 1;
442ea881 4293 regset->store_function (regcache, buf);
58caa3dc 4294 regset ++;
fdeb2a12 4295 free (buf);
58caa3dc 4296 }
e9d25b98
DJ
4297 if (saw_general_regs)
4298 return 0;
4299 else
4300 return 1;
58caa3dc
DJ
4301}
4302
4303static int
3aee8918
PA
4304regsets_store_inferior_registers (struct regsets_info *regsets_info,
4305 struct regcache *regcache)
58caa3dc
DJ
4306{
4307 struct regset_info *regset;
e9d25b98 4308 int saw_general_regs = 0;
95954743 4309 int pid;
1570b33e 4310 struct iovec iov;
58caa3dc 4311
3aee8918 4312 regset = regsets_info->regsets;
58caa3dc 4313
d86d4aaf 4314 pid = lwpid_of (current_inferior);
58caa3dc
DJ
4315 while (regset->size >= 0)
4316 {
1570b33e
L
4317 void *buf, *data;
4318 int nt_type, res;
58caa3dc 4319
030031ee 4320 if (regset->size == 0 || regset_disabled (regsets_info, regset))
58caa3dc
DJ
4321 {
4322 regset ++;
4323 continue;
4324 }
4325
bca929d3 4326 buf = xmalloc (regset->size);
545587ee
DJ
4327
4328 /* First fill the buffer with the current register set contents,
4329 in case there are any items in the kernel's regset that are
4330 not in gdbserver's regcache. */
1570b33e
L
4331
4332 nt_type = regset->nt_type;
4333 if (nt_type)
4334 {
4335 iov.iov_base = buf;
4336 iov.iov_len = regset->size;
4337 data = (void *) &iov;
4338 }
4339 else
4340 data = buf;
4341
dfb64f85 4342#ifndef __sparc__
f15f9948 4343 res = ptrace (regset->get_request, pid,
b8e1b30e 4344 (PTRACE_TYPE_ARG3) (long) nt_type, data);
dfb64f85 4345#else
689cc2ae 4346 res = ptrace (regset->get_request, pid, data, nt_type);
dfb64f85 4347#endif
545587ee
DJ
4348
4349 if (res == 0)
4350 {
4351 /* Then overlay our cached registers on that. */
442ea881 4352 regset->fill_function (regcache, buf);
545587ee
DJ
4353
4354 /* Only now do we write the register set. */
dfb64f85 4355#ifndef __sparc__
f15f9948 4356 res = ptrace (regset->set_request, pid,
b8e1b30e 4357 (PTRACE_TYPE_ARG3) (long) nt_type, data);
dfb64f85 4358#else
1570b33e 4359 res = ptrace (regset->set_request, pid, data, nt_type);
dfb64f85 4360#endif
545587ee
DJ
4361 }
4362
58caa3dc
DJ
4363 if (res < 0)
4364 {
4365 if (errno == EIO)
4366 {
52fa2412 4367 /* If we get EIO on a regset, do not try it again for
3aee8918 4368 this process mode. */
030031ee 4369 disable_regset (regsets_info, regset);
fdeb2a12 4370 free (buf);
52fa2412 4371 continue;
58caa3dc 4372 }
3221518c
UW
4373 else if (errno == ESRCH)
4374 {
1b3f6016
PA
4375 /* At this point, ESRCH should mean the process is
4376 already gone, in which case we simply ignore attempts
4377 to change its registers. See also the related
4378 comment in linux_resume_one_lwp. */
fdeb2a12 4379 free (buf);
3221518c
UW
4380 return 0;
4381 }
58caa3dc
DJ
4382 else
4383 {
ce3a066d 4384 perror ("Warning: ptrace(regsets_store_inferior_registers)");
58caa3dc
DJ
4385 }
4386 }
e9d25b98
DJ
4387 else if (regset->type == GENERAL_REGS)
4388 saw_general_regs = 1;
58caa3dc 4389 regset ++;
09ec9b38 4390 free (buf);
58caa3dc 4391 }
e9d25b98
DJ
4392 if (saw_general_regs)
4393 return 0;
4394 else
4395 return 1;
58caa3dc
DJ
4396}
4397
1faeff08 4398#else /* !HAVE_LINUX_REGSETS */
58caa3dc 4399
1faeff08 4400#define use_linux_regsets 0
3aee8918
PA
4401#define regsets_fetch_inferior_registers(regsets_info, regcache) 1
4402#define regsets_store_inferior_registers(regsets_info, regcache) 1
58caa3dc 4403
58caa3dc 4404#endif
1faeff08
MR
4405
4406/* Return 1 if register REGNO is supported by one of the regset ptrace
4407 calls or 0 if it has to be transferred individually. */
4408
4409static int
3aee8918 4410linux_register_in_regsets (const struct regs_info *regs_info, int regno)
1faeff08
MR
4411{
4412 unsigned char mask = 1 << (regno % 8);
4413 size_t index = regno / 8;
4414
4415 return (use_linux_regsets
3aee8918
PA
4416 && (regs_info->regset_bitmap == NULL
4417 || (regs_info->regset_bitmap[index] & mask) != 0));
1faeff08
MR
4418}
4419
58caa3dc 4420#ifdef HAVE_LINUX_USRREGS
1faeff08
MR
4421
4422int
3aee8918 4423register_addr (const struct usrregs_info *usrregs, int regnum)
1faeff08
MR
4424{
4425 int addr;
4426
3aee8918 4427 if (regnum < 0 || regnum >= usrregs->num_regs)
1faeff08
MR
4428 error ("Invalid register number %d.", regnum);
4429
3aee8918 4430 addr = usrregs->regmap[regnum];
1faeff08
MR
4431
4432 return addr;
4433}
4434
4435/* Fetch one register. */
4436static void
3aee8918
PA
4437fetch_register (const struct usrregs_info *usrregs,
4438 struct regcache *regcache, int regno)
1faeff08
MR
4439{
4440 CORE_ADDR regaddr;
4441 int i, size;
4442 char *buf;
4443 int pid;
4444
3aee8918 4445 if (regno >= usrregs->num_regs)
1faeff08
MR
4446 return;
4447 if ((*the_low_target.cannot_fetch_register) (regno))
4448 return;
4449
3aee8918 4450 regaddr = register_addr (usrregs, regno);
1faeff08
MR
4451 if (regaddr == -1)
4452 return;
4453
3aee8918
PA
4454 size = ((register_size (regcache->tdesc, regno)
4455 + sizeof (PTRACE_XFER_TYPE) - 1)
1faeff08
MR
4456 & -sizeof (PTRACE_XFER_TYPE));
4457 buf = alloca (size);
4458
d86d4aaf 4459 pid = lwpid_of (current_inferior);
1faeff08
MR
4460 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
4461 {
4462 errno = 0;
4463 *(PTRACE_XFER_TYPE *) (buf + i) =
4464 ptrace (PTRACE_PEEKUSER, pid,
4465 /* Coerce to a uintptr_t first to avoid potential gcc warning
4466 of coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e 4467 (PTRACE_TYPE_ARG3) (uintptr_t) regaddr, (PTRACE_TYPE_ARG4) 0);
1faeff08
MR
4468 regaddr += sizeof (PTRACE_XFER_TYPE);
4469 if (errno != 0)
4470 error ("reading register %d: %s", regno, strerror (errno));
4471 }
4472
4473 if (the_low_target.supply_ptrace_register)
4474 the_low_target.supply_ptrace_register (regcache, regno, buf);
4475 else
4476 supply_register (regcache, regno, buf);
4477}
4478
4479/* Store one register. */
4480static void
3aee8918
PA
4481store_register (const struct usrregs_info *usrregs,
4482 struct regcache *regcache, int regno)
1faeff08
MR
4483{
4484 CORE_ADDR regaddr;
4485 int i, size;
4486 char *buf;
4487 int pid;
4488
3aee8918 4489 if (regno >= usrregs->num_regs)
1faeff08
MR
4490 return;
4491 if ((*the_low_target.cannot_store_register) (regno))
4492 return;
4493
3aee8918 4494 regaddr = register_addr (usrregs, regno);
1faeff08
MR
4495 if (regaddr == -1)
4496 return;
4497
3aee8918
PA
4498 size = ((register_size (regcache->tdesc, regno)
4499 + sizeof (PTRACE_XFER_TYPE) - 1)
1faeff08
MR
4500 & -sizeof (PTRACE_XFER_TYPE));
4501 buf = alloca (size);
4502 memset (buf, 0, size);
4503
4504 if (the_low_target.collect_ptrace_register)
4505 the_low_target.collect_ptrace_register (regcache, regno, buf);
4506 else
4507 collect_register (regcache, regno, buf);
4508
d86d4aaf 4509 pid = lwpid_of (current_inferior);
1faeff08
MR
4510 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
4511 {
4512 errno = 0;
4513 ptrace (PTRACE_POKEUSER, pid,
4514 /* Coerce to a uintptr_t first to avoid potential gcc warning
4515 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e
LM
4516 (PTRACE_TYPE_ARG3) (uintptr_t) regaddr,
4517 (PTRACE_TYPE_ARG4) *(PTRACE_XFER_TYPE *) (buf + i));
1faeff08
MR
4518 if (errno != 0)
4519 {
4520 /* At this point, ESRCH should mean the process is
4521 already gone, in which case we simply ignore attempts
4522 to change its registers. See also the related
4523 comment in linux_resume_one_lwp. */
4524 if (errno == ESRCH)
4525 return;
4526
4527 if ((*the_low_target.cannot_store_register) (regno) == 0)
4528 error ("writing register %d: %s", regno, strerror (errno));
4529 }
4530 regaddr += sizeof (PTRACE_XFER_TYPE);
4531 }
4532}
4533
4534/* Fetch all registers, or just one, from the child process.
4535 If REGNO is -1, do this for all registers, skipping any that are
4536 assumed to have been retrieved by regsets_fetch_inferior_registers,
4537 unless ALL is non-zero.
4538 Otherwise, REGNO specifies which register (so we can save time). */
4539static void
3aee8918
PA
4540usr_fetch_inferior_registers (const struct regs_info *regs_info,
4541 struct regcache *regcache, int regno, int all)
1faeff08 4542{
3aee8918
PA
4543 struct usrregs_info *usr = regs_info->usrregs;
4544
1faeff08
MR
4545 if (regno == -1)
4546 {
3aee8918
PA
4547 for (regno = 0; regno < usr->num_regs; regno++)
4548 if (all || !linux_register_in_regsets (regs_info, regno))
4549 fetch_register (usr, regcache, regno);
1faeff08
MR
4550 }
4551 else
3aee8918 4552 fetch_register (usr, regcache, regno);
1faeff08
MR
4553}
4554
4555/* Store our register values back into the inferior.
4556 If REGNO is -1, do this for all registers, skipping any that are
4557 assumed to have been saved by regsets_store_inferior_registers,
4558 unless ALL is non-zero.
4559 Otherwise, REGNO specifies which register (so we can save time). */
4560static void
3aee8918
PA
4561usr_store_inferior_registers (const struct regs_info *regs_info,
4562 struct regcache *regcache, int regno, int all)
1faeff08 4563{
3aee8918
PA
4564 struct usrregs_info *usr = regs_info->usrregs;
4565
1faeff08
MR
4566 if (regno == -1)
4567 {
3aee8918
PA
4568 for (regno = 0; regno < usr->num_regs; regno++)
4569 if (all || !linux_register_in_regsets (regs_info, regno))
4570 store_register (usr, regcache, regno);
1faeff08
MR
4571 }
4572 else
3aee8918 4573 store_register (usr, regcache, regno);
1faeff08
MR
4574}
4575
4576#else /* !HAVE_LINUX_USRREGS */
4577
3aee8918
PA
4578#define usr_fetch_inferior_registers(regs_info, regcache, regno, all) do {} while (0)
4579#define usr_store_inferior_registers(regs_info, regcache, regno, all) do {} while (0)
1faeff08 4580
58caa3dc 4581#endif
1faeff08
MR
4582
4583
4584void
4585linux_fetch_registers (struct regcache *regcache, int regno)
4586{
4587 int use_regsets;
4588 int all = 0;
3aee8918 4589 const struct regs_info *regs_info = (*the_low_target.regs_info) ();
1faeff08
MR
4590
4591 if (regno == -1)
4592 {
3aee8918
PA
4593 if (the_low_target.fetch_register != NULL
4594 && regs_info->usrregs != NULL)
4595 for (regno = 0; regno < regs_info->usrregs->num_regs; regno++)
c14dfd32
PA
4596 (*the_low_target.fetch_register) (regcache, regno);
4597
3aee8918
PA
4598 all = regsets_fetch_inferior_registers (regs_info->regsets_info, regcache);
4599 if (regs_info->usrregs != NULL)
4600 usr_fetch_inferior_registers (regs_info, regcache, -1, all);
1faeff08
MR
4601 }
4602 else
4603 {
c14dfd32
PA
4604 if (the_low_target.fetch_register != NULL
4605 && (*the_low_target.fetch_register) (regcache, regno))
4606 return;
4607
3aee8918 4608 use_regsets = linux_register_in_regsets (regs_info, regno);
1faeff08 4609 if (use_regsets)
3aee8918
PA
4610 all = regsets_fetch_inferior_registers (regs_info->regsets_info,
4611 regcache);
4612 if ((!use_regsets || all) && regs_info->usrregs != NULL)
4613 usr_fetch_inferior_registers (regs_info, regcache, regno, 1);
1faeff08 4614 }
58caa3dc
DJ
4615}
4616
4617void
442ea881 4618linux_store_registers (struct regcache *regcache, int regno)
58caa3dc 4619{
1faeff08
MR
4620 int use_regsets;
4621 int all = 0;
3aee8918 4622 const struct regs_info *regs_info = (*the_low_target.regs_info) ();
1faeff08
MR
4623
4624 if (regno == -1)
4625 {
3aee8918
PA
4626 all = regsets_store_inferior_registers (regs_info->regsets_info,
4627 regcache);
4628 if (regs_info->usrregs != NULL)
4629 usr_store_inferior_registers (regs_info, regcache, regno, all);
1faeff08
MR
4630 }
4631 else
4632 {
3aee8918 4633 use_regsets = linux_register_in_regsets (regs_info, regno);
1faeff08 4634 if (use_regsets)
3aee8918
PA
4635 all = regsets_store_inferior_registers (regs_info->regsets_info,
4636 regcache);
4637 if ((!use_regsets || all) && regs_info->usrregs != NULL)
4638 usr_store_inferior_registers (regs_info, regcache, regno, 1);
1faeff08 4639 }
58caa3dc
DJ
4640}
4641
da6d8c04 4642
da6d8c04
DJ
4643/* Copy LEN bytes from inferior's memory starting at MEMADDR
4644 to debugger memory starting at MYADDR. */
4645
c3e735a6 4646static int
f450004a 4647linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
da6d8c04 4648{
d86d4aaf 4649 int pid = lwpid_of (current_inferior);
4934b29e
MR
4650 register PTRACE_XFER_TYPE *buffer;
4651 register CORE_ADDR addr;
4652 register int count;
4653 char filename[64];
da6d8c04 4654 register int i;
4934b29e 4655 int ret;
fd462a61 4656 int fd;
fd462a61
DJ
4657
4658 /* Try using /proc. Don't bother for one word. */
4659 if (len >= 3 * sizeof (long))
4660 {
4934b29e
MR
4661 int bytes;
4662
fd462a61
DJ
4663 /* We could keep this file open and cache it - possibly one per
4664 thread. That requires some juggling, but is even faster. */
95954743 4665 sprintf (filename, "/proc/%d/mem", pid);
fd462a61
DJ
4666 fd = open (filename, O_RDONLY | O_LARGEFILE);
4667 if (fd == -1)
4668 goto no_proc;
4669
4670 /* If pread64 is available, use it. It's faster if the kernel
4671 supports it (only one syscall), and it's 64-bit safe even on
4672 32-bit platforms (for instance, SPARC debugging a SPARC64
4673 application). */
4674#ifdef HAVE_PREAD64
4934b29e 4675 bytes = pread64 (fd, myaddr, len, memaddr);
fd462a61 4676#else
4934b29e
MR
4677 bytes = -1;
4678 if (lseek (fd, memaddr, SEEK_SET) != -1)
4679 bytes = read (fd, myaddr, len);
fd462a61 4680#endif
fd462a61
DJ
4681
4682 close (fd);
4934b29e
MR
4683 if (bytes == len)
4684 return 0;
4685
4686 /* Some data was read, we'll try to get the rest with ptrace. */
4687 if (bytes > 0)
4688 {
4689 memaddr += bytes;
4690 myaddr += bytes;
4691 len -= bytes;
4692 }
fd462a61 4693 }
da6d8c04 4694
fd462a61 4695 no_proc:
4934b29e
MR
4696 /* Round starting address down to longword boundary. */
4697 addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
4698 /* Round ending address up; get number of longwords that makes. */
4699 count = ((((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
4700 / sizeof (PTRACE_XFER_TYPE));
4701 /* Allocate buffer of that many longwords. */
4702 buffer = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
4703
da6d8c04 4704 /* Read all the longwords */
4934b29e 4705 errno = 0;
da6d8c04
DJ
4706 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
4707 {
14ce3065
DE
4708 /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
4709 about coercing an 8 byte integer to a 4 byte pointer. */
4710 buffer[i] = ptrace (PTRACE_PEEKTEXT, pid,
b8e1b30e
LM
4711 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
4712 (PTRACE_TYPE_ARG4) 0);
c3e735a6 4713 if (errno)
4934b29e 4714 break;
da6d8c04 4715 }
4934b29e 4716 ret = errno;
da6d8c04
DJ
4717
4718 /* Copy appropriate bytes out of the buffer. */
8d409d16
MR
4719 if (i > 0)
4720 {
4721 i *= sizeof (PTRACE_XFER_TYPE);
4722 i -= memaddr & (sizeof (PTRACE_XFER_TYPE) - 1);
4723 memcpy (myaddr,
4724 (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
4725 i < len ? i : len);
4726 }
c3e735a6 4727
4934b29e 4728 return ret;
da6d8c04
DJ
4729}
4730
93ae6fdc
PA
4731/* Copy LEN bytes of data from debugger memory at MYADDR to inferior's
4732 memory at MEMADDR. On failure (cannot write to the inferior)
f0ae6fc3 4733 returns the value of errno. Always succeeds if LEN is zero. */
da6d8c04 4734
ce3a066d 4735static int
f450004a 4736linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
da6d8c04
DJ
4737{
4738 register int i;
4739 /* Round starting address down to longword boundary. */
4740 register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
4741 /* Round ending address up; get number of longwords that makes. */
4742 register int count
493e2a69
MS
4743 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
4744 / sizeof (PTRACE_XFER_TYPE);
4745
da6d8c04 4746 /* Allocate buffer of that many longwords. */
493e2a69
MS
4747 register PTRACE_XFER_TYPE *buffer = (PTRACE_XFER_TYPE *)
4748 alloca (count * sizeof (PTRACE_XFER_TYPE));
4749
d86d4aaf 4750 int pid = lwpid_of (current_inferior);
da6d8c04 4751
f0ae6fc3
PA
4752 if (len == 0)
4753 {
4754 /* Zero length write always succeeds. */
4755 return 0;
4756 }
4757
0d62e5e8
DJ
4758 if (debug_threads)
4759 {
58d6951d
DJ
4760 /* Dump up to four bytes. */
4761 unsigned int val = * (unsigned int *) myaddr;
4762 if (len == 1)
4763 val = val & 0xff;
4764 else if (len == 2)
4765 val = val & 0xffff;
4766 else if (len == 3)
4767 val = val & 0xffffff;
87ce2a04
DE
4768 debug_printf ("Writing %0*x to 0x%08lx\n", 2 * ((len < 4) ? len : 4),
4769 val, (long)memaddr);
0d62e5e8
DJ
4770 }
4771
da6d8c04
DJ
4772 /* Fill start and end extra bytes of buffer with existing memory data. */
4773
93ae6fdc 4774 errno = 0;
14ce3065
DE
4775 /* Coerce the 3rd arg to a uintptr_t first to avoid potential gcc warning
4776 about coercing an 8 byte integer to a 4 byte pointer. */
4777 buffer[0] = ptrace (PTRACE_PEEKTEXT, pid,
b8e1b30e
LM
4778 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
4779 (PTRACE_TYPE_ARG4) 0);
93ae6fdc
PA
4780 if (errno)
4781 return errno;
da6d8c04
DJ
4782
4783 if (count > 1)
4784 {
93ae6fdc 4785 errno = 0;
da6d8c04 4786 buffer[count - 1]
95954743 4787 = ptrace (PTRACE_PEEKTEXT, pid,
14ce3065
DE
4788 /* Coerce to a uintptr_t first to avoid potential gcc warning
4789 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e 4790 (PTRACE_TYPE_ARG3) (uintptr_t) (addr + (count - 1)
14ce3065 4791 * sizeof (PTRACE_XFER_TYPE)),
b8e1b30e 4792 (PTRACE_TYPE_ARG4) 0);
93ae6fdc
PA
4793 if (errno)
4794 return errno;
da6d8c04
DJ
4795 }
4796
93ae6fdc 4797 /* Copy data to be written over corresponding part of buffer. */
da6d8c04 4798
493e2a69
MS
4799 memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
4800 myaddr, len);
da6d8c04
DJ
4801
4802 /* Write the entire buffer. */
4803
4804 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
4805 {
4806 errno = 0;
14ce3065
DE
4807 ptrace (PTRACE_POKETEXT, pid,
4808 /* Coerce to a uintptr_t first to avoid potential gcc warning
4809 about coercing an 8 byte integer to a 4 byte pointer. */
b8e1b30e
LM
4810 (PTRACE_TYPE_ARG3) (uintptr_t) addr,
4811 (PTRACE_TYPE_ARG4) buffer[i]);
da6d8c04
DJ
4812 if (errno)
4813 return errno;
4814 }
4815
4816 return 0;
4817}
2f2893d9
DJ
4818
4819static void
4820linux_look_up_symbols (void)
4821{
0d62e5e8 4822#ifdef USE_THREAD_DB
95954743
PA
4823 struct process_info *proc = current_process ();
4824
cdbfd419 4825 if (proc->private->thread_db != NULL)
0d62e5e8
DJ
4826 return;
4827
96d7229d
LM
4828 /* If the kernel supports tracing clones, then we don't need to
4829 use the magic thread event breakpoint to learn about
4830 threads. */
4831 thread_db_init (!linux_supports_traceclone ());
0d62e5e8
DJ
4832#endif
4833}
4834
e5379b03 4835static void
ef57601b 4836linux_request_interrupt (void)
e5379b03 4837{
a1928bad 4838 extern unsigned long signal_pid;
e5379b03 4839
95954743
PA
4840 if (!ptid_equal (cont_thread, null_ptid)
4841 && !ptid_equal (cont_thread, minus_one_ptid))
e5379b03 4842 {
bd99dc85 4843 int lwpid;
e5379b03 4844
d86d4aaf 4845 lwpid = lwpid_of (current_inferior);
bd99dc85 4846 kill_lwp (lwpid, SIGINT);
e5379b03
DJ
4847 }
4848 else
ef57601b 4849 kill_lwp (signal_pid, SIGINT);
e5379b03
DJ
4850}
4851
aa691b87
RM
4852/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
4853 to debugger memory starting at MYADDR. */
4854
4855static int
f450004a 4856linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
aa691b87
RM
4857{
4858 char filename[PATH_MAX];
4859 int fd, n;
d86d4aaf 4860 int pid = lwpid_of (current_inferior);
aa691b87 4861
6cebaf6e 4862 xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
aa691b87
RM
4863
4864 fd = open (filename, O_RDONLY);
4865 if (fd < 0)
4866 return -1;
4867
4868 if (offset != (CORE_ADDR) 0
4869 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
4870 n = -1;
4871 else
4872 n = read (fd, myaddr, len);
4873
4874 close (fd);
4875
4876 return n;
4877}
4878
d993e290
PA
4879/* These breakpoint and watchpoint related wrapper functions simply
4880 pass on the function call if the target has registered a
4881 corresponding function. */
e013ee27
OF
4882
4883static int
802e8e6d
PA
4884linux_supports_z_point_type (char z_type)
4885{
4886 return (the_low_target.supports_z_point_type != NULL
4887 && the_low_target.supports_z_point_type (z_type));
4888}
4889
4890static int
4891linux_insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
4892 int size, struct raw_breakpoint *bp)
e013ee27 4893{
d993e290 4894 if (the_low_target.insert_point != NULL)
802e8e6d 4895 return the_low_target.insert_point (type, addr, size, bp);
e013ee27
OF
4896 else
4897 /* Unsupported (see target.h). */
4898 return 1;
4899}
4900
4901static int
802e8e6d
PA
4902linux_remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
4903 int size, struct raw_breakpoint *bp)
e013ee27 4904{
d993e290 4905 if (the_low_target.remove_point != NULL)
802e8e6d 4906 return the_low_target.remove_point (type, addr, size, bp);
e013ee27
OF
4907 else
4908 /* Unsupported (see target.h). */
4909 return 1;
4910}
4911
4912static int
4913linux_stopped_by_watchpoint (void)
4914{
c3adc08c
PA
4915 struct lwp_info *lwp = get_thread_lwp (current_inferior);
4916
4917 return lwp->stopped_by_watchpoint;
e013ee27
OF
4918}
4919
4920static CORE_ADDR
4921linux_stopped_data_address (void)
4922{
c3adc08c
PA
4923 struct lwp_info *lwp = get_thread_lwp (current_inferior);
4924
4925 return lwp->stopped_data_address;
e013ee27
OF
4926}
4927
db0dfaa0
LM
4928#if defined(__UCLIBC__) && defined(HAS_NOMMU) \
4929 && defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) \
4930 && defined(PT_TEXT_END_ADDR)
4931
4932/* This is only used for targets that define PT_TEXT_ADDR,
4933 PT_DATA_ADDR and PT_TEXT_END_ADDR. If those are not defined, supposedly
4934 the target has different ways of acquiring this information, like
4935 loadmaps. */
52fb6437
NS
4936
4937/* Under uClinux, programs are loaded at non-zero offsets, which we need
4938 to tell gdb about. */
4939
4940static int
4941linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
4942{
52fb6437 4943 unsigned long text, text_end, data;
bd99dc85 4944 int pid = lwpid_of (get_thread_lwp (current_inferior));
52fb6437
NS
4945
4946 errno = 0;
4947
b8e1b30e
LM
4948 text = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_ADDR,
4949 (PTRACE_TYPE_ARG4) 0);
4950 text_end = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_TEXT_END_ADDR,
4951 (PTRACE_TYPE_ARG4) 0);
4952 data = ptrace (PTRACE_PEEKUSER, pid, (PTRACE_TYPE_ARG3) PT_DATA_ADDR,
4953 (PTRACE_TYPE_ARG4) 0);
52fb6437
NS
4954
4955 if (errno == 0)
4956 {
4957 /* Both text and data offsets produced at compile-time (and so
1b3f6016
PA
4958 used by gdb) are relative to the beginning of the program,
4959 with the data segment immediately following the text segment.
4960 However, the actual runtime layout in memory may put the data
4961 somewhere else, so when we send gdb a data base-address, we
4962 use the real data base address and subtract the compile-time
4963 data base-address from it (which is just the length of the
4964 text segment). BSS immediately follows data in both
4965 cases. */
52fb6437
NS
4966 *text_p = text;
4967 *data_p = data - (text_end - text);
1b3f6016 4968
52fb6437
NS
4969 return 1;
4970 }
52fb6437
NS
4971 return 0;
4972}
4973#endif
4974
07e059b5
VP
4975static int
4976linux_qxfer_osdata (const char *annex,
1b3f6016
PA
4977 unsigned char *readbuf, unsigned const char *writebuf,
4978 CORE_ADDR offset, int len)
07e059b5 4979{
d26e3629 4980 return linux_common_xfer_osdata (annex, readbuf, offset, len);
07e059b5
VP
4981}
4982
d0722149
DE
4983/* Convert a native/host siginfo object, into/from the siginfo in the
4984 layout of the inferiors' architecture. */
4985
4986static void
a5362b9a 4987siginfo_fixup (siginfo_t *siginfo, void *inf_siginfo, int direction)
d0722149
DE
4988{
4989 int done = 0;
4990
4991 if (the_low_target.siginfo_fixup != NULL)
4992 done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
4993
4994 /* If there was no callback, or the callback didn't do anything,
4995 then just do a straight memcpy. */
4996 if (!done)
4997 {
4998 if (direction == 1)
a5362b9a 4999 memcpy (siginfo, inf_siginfo, sizeof (siginfo_t));
d0722149 5000 else
a5362b9a 5001 memcpy (inf_siginfo, siginfo, sizeof (siginfo_t));
d0722149
DE
5002 }
5003}
5004
4aa995e1
PA
5005static int
5006linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
5007 unsigned const char *writebuf, CORE_ADDR offset, int len)
5008{
d0722149 5009 int pid;
a5362b9a
TS
5010 siginfo_t siginfo;
5011 char inf_siginfo[sizeof (siginfo_t)];
4aa995e1
PA
5012
5013 if (current_inferior == NULL)
5014 return -1;
5015
d86d4aaf 5016 pid = lwpid_of (current_inferior);
4aa995e1
PA
5017
5018 if (debug_threads)
87ce2a04
DE
5019 debug_printf ("%s siginfo for lwp %d.\n",
5020 readbuf != NULL ? "Reading" : "Writing",
5021 pid);
4aa995e1 5022
0adea5f7 5023 if (offset >= sizeof (siginfo))
4aa995e1
PA
5024 return -1;
5025
b8e1b30e 5026 if (ptrace (PTRACE_GETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0)
4aa995e1
PA
5027 return -1;
5028
d0722149
DE
5029 /* When GDBSERVER is built as a 64-bit application, ptrace writes into
5030 SIGINFO an object with 64-bit layout. Since debugging a 32-bit
5031 inferior with a 64-bit GDBSERVER should look the same as debugging it
5032 with a 32-bit GDBSERVER, we need to convert it. */
5033 siginfo_fixup (&siginfo, inf_siginfo, 0);
5034
4aa995e1
PA
5035 if (offset + len > sizeof (siginfo))
5036 len = sizeof (siginfo) - offset;
5037
5038 if (readbuf != NULL)
d0722149 5039 memcpy (readbuf, inf_siginfo + offset, len);
4aa995e1
PA
5040 else
5041 {
d0722149
DE
5042 memcpy (inf_siginfo + offset, writebuf, len);
5043
5044 /* Convert back to ptrace layout before flushing it out. */
5045 siginfo_fixup (&siginfo, inf_siginfo, 1);
5046
b8e1b30e 5047 if (ptrace (PTRACE_SETSIGINFO, pid, (PTRACE_TYPE_ARG3) 0, &siginfo) != 0)
4aa995e1
PA
5048 return -1;
5049 }
5050
5051 return len;
5052}
5053
bd99dc85
PA
5054/* SIGCHLD handler that serves two purposes: In non-stop/async mode,
5055 so we notice when children change state; as the handler for the
5056 sigsuspend in my_waitpid. */
5057
5058static void
5059sigchld_handler (int signo)
5060{
5061 int old_errno = errno;
5062
5063 if (debug_threads)
e581f2b4
PA
5064 {
5065 do
5066 {
5067 /* fprintf is not async-signal-safe, so call write
5068 directly. */
5069 if (write (2, "sigchld_handler\n",
5070 sizeof ("sigchld_handler\n") - 1) < 0)
5071 break; /* just ignore */
5072 } while (0);
5073 }
bd99dc85
PA
5074
5075 if (target_is_async_p ())
5076 async_file_mark (); /* trigger a linux_wait */
5077
5078 errno = old_errno;
5079}
5080
5081static int
5082linux_supports_non_stop (void)
5083{
5084 return 1;
5085}
5086
5087static int
5088linux_async (int enable)
5089{
5090 int previous = (linux_event_pipe[0] != -1);
5091
8336d594 5092 if (debug_threads)
87ce2a04
DE
5093 debug_printf ("linux_async (%d), previous=%d\n",
5094 enable, previous);
8336d594 5095
bd99dc85
PA
5096 if (previous != enable)
5097 {
5098 sigset_t mask;
5099 sigemptyset (&mask);
5100 sigaddset (&mask, SIGCHLD);
5101
5102 sigprocmask (SIG_BLOCK, &mask, NULL);
5103
5104 if (enable)
5105 {
5106 if (pipe (linux_event_pipe) == -1)
5107 fatal ("creating event pipe failed.");
5108
5109 fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
5110 fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
5111
5112 /* Register the event loop handler. */
5113 add_file_handler (linux_event_pipe[0],
5114 handle_target_event, NULL);
5115
5116 /* Always trigger a linux_wait. */
5117 async_file_mark ();
5118 }
5119 else
5120 {
5121 delete_file_handler (linux_event_pipe[0]);
5122
5123 close (linux_event_pipe[0]);
5124 close (linux_event_pipe[1]);
5125 linux_event_pipe[0] = -1;
5126 linux_event_pipe[1] = -1;
5127 }
5128
5129 sigprocmask (SIG_UNBLOCK, &mask, NULL);
5130 }
5131
5132 return previous;
5133}
5134
5135static int
5136linux_start_non_stop (int nonstop)
5137{
5138 /* Register or unregister from event-loop accordingly. */
5139 linux_async (nonstop);
5140 return 0;
5141}
5142
cf8fd78b
PA
5143static int
5144linux_supports_multi_process (void)
5145{
5146 return 1;
5147}
5148
03583c20
UW
5149static int
5150linux_supports_disable_randomization (void)
5151{
5152#ifdef HAVE_PERSONALITY
5153 return 1;
5154#else
5155 return 0;
5156#endif
5157}
efcbbd14 5158
d1feda86
YQ
5159static int
5160linux_supports_agent (void)
5161{
5162 return 1;
5163}
5164
c2d6af84
PA
5165static int
5166linux_supports_range_stepping (void)
5167{
5168 if (*the_low_target.supports_range_stepping == NULL)
5169 return 0;
5170
5171 return (*the_low_target.supports_range_stepping) ();
5172}
5173
efcbbd14
UW
5174/* Enumerate spufs IDs for process PID. */
5175static int
5176spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
5177{
5178 int pos = 0;
5179 int written = 0;
5180 char path[128];
5181 DIR *dir;
5182 struct dirent *entry;
5183
5184 sprintf (path, "/proc/%ld/fd", pid);
5185 dir = opendir (path);
5186 if (!dir)
5187 return -1;
5188
5189 rewinddir (dir);
5190 while ((entry = readdir (dir)) != NULL)
5191 {
5192 struct stat st;
5193 struct statfs stfs;
5194 int fd;
5195
5196 fd = atoi (entry->d_name);
5197 if (!fd)
5198 continue;
5199
5200 sprintf (path, "/proc/%ld/fd/%d", pid, fd);
5201 if (stat (path, &st) != 0)
5202 continue;
5203 if (!S_ISDIR (st.st_mode))
5204 continue;
5205
5206 if (statfs (path, &stfs) != 0)
5207 continue;
5208 if (stfs.f_type != SPUFS_MAGIC)
5209 continue;
5210
5211 if (pos >= offset && pos + 4 <= offset + len)
5212 {
5213 *(unsigned int *)(buf + pos - offset) = fd;
5214 written += 4;
5215 }
5216 pos += 4;
5217 }
5218
5219 closedir (dir);
5220 return written;
5221}
5222
5223/* Implements the to_xfer_partial interface for the TARGET_OBJECT_SPU
5224 object type, using the /proc file system. */
5225static int
5226linux_qxfer_spu (const char *annex, unsigned char *readbuf,
5227 unsigned const char *writebuf,
5228 CORE_ADDR offset, int len)
5229{
d86d4aaf 5230 long pid = lwpid_of (current_inferior);
efcbbd14
UW
5231 char buf[128];
5232 int fd = 0;
5233 int ret = 0;
5234
5235 if (!writebuf && !readbuf)
5236 return -1;
5237
5238 if (!*annex)
5239 {
5240 if (!readbuf)
5241 return -1;
5242 else
5243 return spu_enumerate_spu_ids (pid, readbuf, offset, len);
5244 }
5245
5246 sprintf (buf, "/proc/%ld/fd/%s", pid, annex);
5247 fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
5248 if (fd <= 0)
5249 return -1;
5250
5251 if (offset != 0
5252 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
5253 {
5254 close (fd);
5255 return 0;
5256 }
5257
5258 if (writebuf)
5259 ret = write (fd, writebuf, (size_t) len);
5260 else
5261 ret = read (fd, readbuf, (size_t) len);
5262
5263 close (fd);
5264 return ret;
5265}
5266
723b724b 5267#if defined PT_GETDSBT || defined PTRACE_GETFDPIC
78d85199
YQ
5268struct target_loadseg
5269{
5270 /* Core address to which the segment is mapped. */
5271 Elf32_Addr addr;
5272 /* VMA recorded in the program header. */
5273 Elf32_Addr p_vaddr;
5274 /* Size of this segment in memory. */
5275 Elf32_Word p_memsz;
5276};
5277
723b724b 5278# if defined PT_GETDSBT
78d85199
YQ
5279struct target_loadmap
5280{
5281 /* Protocol version number, must be zero. */
5282 Elf32_Word version;
5283 /* Pointer to the DSBT table, its size, and the DSBT index. */
5284 unsigned *dsbt_table;
5285 unsigned dsbt_size, dsbt_index;
5286 /* Number of segments in this map. */
5287 Elf32_Word nsegs;
5288 /* The actual memory map. */
5289 struct target_loadseg segs[/*nsegs*/];
5290};
723b724b
MF
5291# define LINUX_LOADMAP PT_GETDSBT
5292# define LINUX_LOADMAP_EXEC PTRACE_GETDSBT_EXEC
5293# define LINUX_LOADMAP_INTERP PTRACE_GETDSBT_INTERP
5294# else
5295struct target_loadmap
5296{
5297 /* Protocol version number, must be zero. */
5298 Elf32_Half version;
5299 /* Number of segments in this map. */
5300 Elf32_Half nsegs;
5301 /* The actual memory map. */
5302 struct target_loadseg segs[/*nsegs*/];
5303};
5304# define LINUX_LOADMAP PTRACE_GETFDPIC
5305# define LINUX_LOADMAP_EXEC PTRACE_GETFDPIC_EXEC
5306# define LINUX_LOADMAP_INTERP PTRACE_GETFDPIC_INTERP
5307# endif
78d85199 5308
78d85199
YQ
5309static int
5310linux_read_loadmap (const char *annex, CORE_ADDR offset,
5311 unsigned char *myaddr, unsigned int len)
5312{
2eec7d5b 5313 int pid = lwpid_of (current_inferior);
78d85199
YQ
5314 int addr = -1;
5315 struct target_loadmap *data = NULL;
5316 unsigned int actual_length, copy_length;
5317
5318 if (strcmp (annex, "exec") == 0)
723b724b 5319 addr = (int) LINUX_LOADMAP_EXEC;
78d85199 5320 else if (strcmp (annex, "interp") == 0)
723b724b 5321 addr = (int) LINUX_LOADMAP_INTERP;
78d85199
YQ
5322 else
5323 return -1;
5324
723b724b 5325 if (ptrace (LINUX_LOADMAP, pid, addr, &data) != 0)
78d85199
YQ
5326 return -1;
5327
5328 if (data == NULL)
5329 return -1;
5330
5331 actual_length = sizeof (struct target_loadmap)
5332 + sizeof (struct target_loadseg) * data->nsegs;
5333
5334 if (offset < 0 || offset > actual_length)
5335 return -1;
5336
5337 copy_length = actual_length - offset < len ? actual_length - offset : len;
5338 memcpy (myaddr, (char *) data + offset, copy_length);
5339 return copy_length;
5340}
723b724b
MF
5341#else
5342# define linux_read_loadmap NULL
5343#endif /* defined PT_GETDSBT || defined PTRACE_GETFDPIC */
78d85199 5344
1570b33e
L
5345static void
5346linux_process_qsupported (const char *query)
5347{
5348 if (the_low_target.process_qsupported != NULL)
5349 the_low_target.process_qsupported (query);
5350}
5351
219f2f23
PA
5352static int
5353linux_supports_tracepoints (void)
5354{
5355 if (*the_low_target.supports_tracepoints == NULL)
5356 return 0;
5357
5358 return (*the_low_target.supports_tracepoints) ();
5359}
5360
5361static CORE_ADDR
5362linux_read_pc (struct regcache *regcache)
5363{
5364 if (the_low_target.get_pc == NULL)
5365 return 0;
5366
5367 return (*the_low_target.get_pc) (regcache);
5368}
5369
5370static void
5371linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
5372{
5373 gdb_assert (the_low_target.set_pc != NULL);
5374
5375 (*the_low_target.set_pc) (regcache, pc);
5376}
5377
8336d594
PA
5378static int
5379linux_thread_stopped (struct thread_info *thread)
5380{
5381 return get_thread_lwp (thread)->stopped;
5382}
5383
5384/* This exposes stop-all-threads functionality to other modules. */
5385
5386static void
7984d532 5387linux_pause_all (int freeze)
8336d594 5388{
7984d532
PA
5389 stop_all_lwps (freeze, NULL);
5390}
5391
5392/* This exposes unstop-all-threads functionality to other gdbserver
5393 modules. */
5394
5395static void
5396linux_unpause_all (int unfreeze)
5397{
5398 unstop_all_lwps (unfreeze, NULL);
8336d594
PA
5399}
5400
90d74c30
PA
5401static int
5402linux_prepare_to_access_memory (void)
5403{
5404 /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
5405 running LWP. */
5406 if (non_stop)
5407 linux_pause_all (1);
5408 return 0;
5409}
5410
5411static void
0146f85b 5412linux_done_accessing_memory (void)
90d74c30
PA
5413{
5414 /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
5415 running LWP. */
5416 if (non_stop)
5417 linux_unpause_all (1);
5418}
5419
fa593d66
PA
5420static int
5421linux_install_fast_tracepoint_jump_pad (CORE_ADDR tpoint, CORE_ADDR tpaddr,
5422 CORE_ADDR collector,
5423 CORE_ADDR lockaddr,
5424 ULONGEST orig_size,
5425 CORE_ADDR *jump_entry,
405f8e94
SS
5426 CORE_ADDR *trampoline,
5427 ULONGEST *trampoline_size,
fa593d66
PA
5428 unsigned char *jjump_pad_insn,
5429 ULONGEST *jjump_pad_insn_size,
5430 CORE_ADDR *adjusted_insn_addr,
405f8e94
SS
5431 CORE_ADDR *adjusted_insn_addr_end,
5432 char *err)
fa593d66
PA
5433{
5434 return (*the_low_target.install_fast_tracepoint_jump_pad)
5435 (tpoint, tpaddr, collector, lockaddr, orig_size,
405f8e94
SS
5436 jump_entry, trampoline, trampoline_size,
5437 jjump_pad_insn, jjump_pad_insn_size,
5438 adjusted_insn_addr, adjusted_insn_addr_end,
5439 err);
fa593d66
PA
5440}
5441
6a271cae
PA
5442static struct emit_ops *
5443linux_emit_ops (void)
5444{
5445 if (the_low_target.emit_ops != NULL)
5446 return (*the_low_target.emit_ops) ();
5447 else
5448 return NULL;
5449}
5450
405f8e94
SS
5451static int
5452linux_get_min_fast_tracepoint_insn_len (void)
5453{
5454 return (*the_low_target.get_min_fast_tracepoint_insn_len) ();
5455}
5456
2268b414
JK
5457/* Extract &phdr and num_phdr in the inferior. Return 0 on success. */
5458
5459static int
5460get_phdr_phnum_from_proc_auxv (const int pid, const int is_elf64,
5461 CORE_ADDR *phdr_memaddr, int *num_phdr)
5462{
5463 char filename[PATH_MAX];
5464 int fd;
5465 const int auxv_size = is_elf64
5466 ? sizeof (Elf64_auxv_t) : sizeof (Elf32_auxv_t);
5467 char buf[sizeof (Elf64_auxv_t)]; /* The larger of the two. */
5468
5469 xsnprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
5470
5471 fd = open (filename, O_RDONLY);
5472 if (fd < 0)
5473 return 1;
5474
5475 *phdr_memaddr = 0;
5476 *num_phdr = 0;
5477 while (read (fd, buf, auxv_size) == auxv_size
5478 && (*phdr_memaddr == 0 || *num_phdr == 0))
5479 {
5480 if (is_elf64)
5481 {
5482 Elf64_auxv_t *const aux = (Elf64_auxv_t *) buf;
5483
5484 switch (aux->a_type)
5485 {
5486 case AT_PHDR:
5487 *phdr_memaddr = aux->a_un.a_val;
5488 break;
5489 case AT_PHNUM:
5490 *num_phdr = aux->a_un.a_val;
5491 break;
5492 }
5493 }
5494 else
5495 {
5496 Elf32_auxv_t *const aux = (Elf32_auxv_t *) buf;
5497
5498 switch (aux->a_type)
5499 {
5500 case AT_PHDR:
5501 *phdr_memaddr = aux->a_un.a_val;
5502 break;
5503 case AT_PHNUM:
5504 *num_phdr = aux->a_un.a_val;
5505 break;
5506 }
5507 }
5508 }
5509
5510 close (fd);
5511
5512 if (*phdr_memaddr == 0 || *num_phdr == 0)
5513 {
5514 warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: "
5515 "phdr_memaddr = %ld, phdr_num = %d",
5516 (long) *phdr_memaddr, *num_phdr);
5517 return 2;
5518 }
5519
5520 return 0;
5521}
5522
5523/* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present. */
5524
5525static CORE_ADDR
5526get_dynamic (const int pid, const int is_elf64)
5527{
5528 CORE_ADDR phdr_memaddr, relocation;
5529 int num_phdr, i;
5530 unsigned char *phdr_buf;
5531 const int phdr_size = is_elf64 ? sizeof (Elf64_Phdr) : sizeof (Elf32_Phdr);
5532
5533 if (get_phdr_phnum_from_proc_auxv (pid, is_elf64, &phdr_memaddr, &num_phdr))
5534 return 0;
5535
5536 gdb_assert (num_phdr < 100); /* Basic sanity check. */
5537 phdr_buf = alloca (num_phdr * phdr_size);
5538
5539 if (linux_read_memory (phdr_memaddr, phdr_buf, num_phdr * phdr_size))
5540 return 0;
5541
5542 /* Compute relocation: it is expected to be 0 for "regular" executables,
5543 non-zero for PIE ones. */
5544 relocation = -1;
5545 for (i = 0; relocation == -1 && i < num_phdr; i++)
5546 if (is_elf64)
5547 {
5548 Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
5549
5550 if (p->p_type == PT_PHDR)
5551 relocation = phdr_memaddr - p->p_vaddr;
5552 }
5553 else
5554 {
5555 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
5556
5557 if (p->p_type == PT_PHDR)
5558 relocation = phdr_memaddr - p->p_vaddr;
5559 }
5560
5561 if (relocation == -1)
5562 {
e237a7e2
JK
5563 /* PT_PHDR is optional, but necessary for PIE in general. Fortunately
5564 any real world executables, including PIE executables, have always
5565 PT_PHDR present. PT_PHDR is not present in some shared libraries or
5566 in fpc (Free Pascal 2.4) binaries but neither of those have a need for
5567 or present DT_DEBUG anyway (fpc binaries are statically linked).
5568
5569 Therefore if there exists DT_DEBUG there is always also PT_PHDR.
5570
5571 GDB could find RELOCATION also from AT_ENTRY - e_entry. */
5572
2268b414
JK
5573 return 0;
5574 }
5575
5576 for (i = 0; i < num_phdr; i++)
5577 {
5578 if (is_elf64)
5579 {
5580 Elf64_Phdr *const p = (Elf64_Phdr *) (phdr_buf + i * phdr_size);
5581
5582 if (p->p_type == PT_DYNAMIC)
5583 return p->p_vaddr + relocation;
5584 }
5585 else
5586 {
5587 Elf32_Phdr *const p = (Elf32_Phdr *) (phdr_buf + i * phdr_size);
5588
5589 if (p->p_type == PT_DYNAMIC)
5590 return p->p_vaddr + relocation;
5591 }
5592 }
5593
5594 return 0;
5595}
5596
5597/* Return &_r_debug in the inferior, or -1 if not present. Return value
367ba2c2
MR
5598 can be 0 if the inferior does not yet have the library list initialized.
5599 We look for DT_MIPS_RLD_MAP first. MIPS executables use this instead of
5600 DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too. */
2268b414
JK
5601
5602static CORE_ADDR
5603get_r_debug (const int pid, const int is_elf64)
5604{
5605 CORE_ADDR dynamic_memaddr;
5606 const int dyn_size = is_elf64 ? sizeof (Elf64_Dyn) : sizeof (Elf32_Dyn);
5607 unsigned char buf[sizeof (Elf64_Dyn)]; /* The larger of the two. */
367ba2c2 5608 CORE_ADDR map = -1;
2268b414
JK
5609
5610 dynamic_memaddr = get_dynamic (pid, is_elf64);
5611 if (dynamic_memaddr == 0)
367ba2c2 5612 return map;
2268b414
JK
5613
5614 while (linux_read_memory (dynamic_memaddr, buf, dyn_size) == 0)
5615 {
5616 if (is_elf64)
5617 {
5618 Elf64_Dyn *const dyn = (Elf64_Dyn *) buf;
75f62ce7 5619#ifdef DT_MIPS_RLD_MAP
367ba2c2
MR
5620 union
5621 {
5622 Elf64_Xword map;
5623 unsigned char buf[sizeof (Elf64_Xword)];
5624 }
5625 rld_map;
5626
5627 if (dyn->d_tag == DT_MIPS_RLD_MAP)
5628 {
5629 if (linux_read_memory (dyn->d_un.d_val,
5630 rld_map.buf, sizeof (rld_map.buf)) == 0)
5631 return rld_map.map;
5632 else
5633 break;
5634 }
75f62ce7 5635#endif /* DT_MIPS_RLD_MAP */
2268b414 5636
367ba2c2
MR
5637 if (dyn->d_tag == DT_DEBUG && map == -1)
5638 map = dyn->d_un.d_val;
2268b414
JK
5639
5640 if (dyn->d_tag == DT_NULL)
5641 break;
5642 }
5643 else
5644 {
5645 Elf32_Dyn *const dyn = (Elf32_Dyn *) buf;
75f62ce7 5646#ifdef DT_MIPS_RLD_MAP
367ba2c2
MR
5647 union
5648 {
5649 Elf32_Word map;
5650 unsigned char buf[sizeof (Elf32_Word)];
5651 }
5652 rld_map;
5653
5654 if (dyn->d_tag == DT_MIPS_RLD_MAP)
5655 {
5656 if (linux_read_memory (dyn->d_un.d_val,
5657 rld_map.buf, sizeof (rld_map.buf)) == 0)
5658 return rld_map.map;
5659 else
5660 break;
5661 }
75f62ce7 5662#endif /* DT_MIPS_RLD_MAP */
2268b414 5663
367ba2c2
MR
5664 if (dyn->d_tag == DT_DEBUG && map == -1)
5665 map = dyn->d_un.d_val;
2268b414
JK
5666
5667 if (dyn->d_tag == DT_NULL)
5668 break;
5669 }
5670
5671 dynamic_memaddr += dyn_size;
5672 }
5673
367ba2c2 5674 return map;
2268b414
JK
5675}
5676
5677/* Read one pointer from MEMADDR in the inferior. */
5678
5679static int
5680read_one_ptr (CORE_ADDR memaddr, CORE_ADDR *ptr, int ptr_size)
5681{
485f1ee4
PA
5682 int ret;
5683
5684 /* Go through a union so this works on either big or little endian
5685 hosts, when the inferior's pointer size is smaller than the size
5686 of CORE_ADDR. It is assumed the inferior's endianness is the
5687 same of the superior's. */
5688 union
5689 {
5690 CORE_ADDR core_addr;
5691 unsigned int ui;
5692 unsigned char uc;
5693 } addr;
5694
5695 ret = linux_read_memory (memaddr, &addr.uc, ptr_size);
5696 if (ret == 0)
5697 {
5698 if (ptr_size == sizeof (CORE_ADDR))
5699 *ptr = addr.core_addr;
5700 else if (ptr_size == sizeof (unsigned int))
5701 *ptr = addr.ui;
5702 else
5703 gdb_assert_not_reached ("unhandled pointer size");
5704 }
5705 return ret;
2268b414
JK
5706}
5707
5708struct link_map_offsets
5709 {
5710 /* Offset and size of r_debug.r_version. */
5711 int r_version_offset;
5712
5713 /* Offset and size of r_debug.r_map. */
5714 int r_map_offset;
5715
5716 /* Offset to l_addr field in struct link_map. */
5717 int l_addr_offset;
5718
5719 /* Offset to l_name field in struct link_map. */
5720 int l_name_offset;
5721
5722 /* Offset to l_ld field in struct link_map. */
5723 int l_ld_offset;
5724
5725 /* Offset to l_next field in struct link_map. */
5726 int l_next_offset;
5727
5728 /* Offset to l_prev field in struct link_map. */
5729 int l_prev_offset;
5730 };
5731
fb723180 5732/* Construct qXfer:libraries-svr4:read reply. */
2268b414
JK
5733
5734static int
5735linux_qxfer_libraries_svr4 (const char *annex, unsigned char *readbuf,
5736 unsigned const char *writebuf,
5737 CORE_ADDR offset, int len)
5738{
5739 char *document;
5740 unsigned document_len;
5741 struct process_info_private *const priv = current_process ()->private;
5742 char filename[PATH_MAX];
5743 int pid, is_elf64;
5744
5745 static const struct link_map_offsets lmo_32bit_offsets =
5746 {
5747 0, /* r_version offset. */
5748 4, /* r_debug.r_map offset. */
5749 0, /* l_addr offset in link_map. */
5750 4, /* l_name offset in link_map. */
5751 8, /* l_ld offset in link_map. */
5752 12, /* l_next offset in link_map. */
5753 16 /* l_prev offset in link_map. */
5754 };
5755
5756 static const struct link_map_offsets lmo_64bit_offsets =
5757 {
5758 0, /* r_version offset. */
5759 8, /* r_debug.r_map offset. */
5760 0, /* l_addr offset in link_map. */
5761 8, /* l_name offset in link_map. */
5762 16, /* l_ld offset in link_map. */
5763 24, /* l_next offset in link_map. */
5764 32 /* l_prev offset in link_map. */
5765 };
5766 const struct link_map_offsets *lmo;
214d508e 5767 unsigned int machine;
b1fbec62
GB
5768 int ptr_size;
5769 CORE_ADDR lm_addr = 0, lm_prev = 0;
5770 int allocated = 1024;
5771 char *p;
5772 CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev;
5773 int header_done = 0;
2268b414
JK
5774
5775 if (writebuf != NULL)
5776 return -2;
5777 if (readbuf == NULL)
5778 return -1;
5779
d86d4aaf 5780 pid = lwpid_of (current_inferior);
2268b414 5781 xsnprintf (filename, sizeof filename, "/proc/%d/exe", pid);
214d508e 5782 is_elf64 = elf_64_file_p (filename, &machine);
2268b414 5783 lmo = is_elf64 ? &lmo_64bit_offsets : &lmo_32bit_offsets;
b1fbec62 5784 ptr_size = is_elf64 ? 8 : 4;
2268b414 5785
b1fbec62
GB
5786 while (annex[0] != '\0')
5787 {
5788 const char *sep;
5789 CORE_ADDR *addrp;
5790 int len;
2268b414 5791
b1fbec62
GB
5792 sep = strchr (annex, '=');
5793 if (sep == NULL)
5794 break;
0c5bf5a9 5795
b1fbec62
GB
5796 len = sep - annex;
5797 if (len == 5 && strncmp (annex, "start", 5) == 0)
5798 addrp = &lm_addr;
5799 else if (len == 4 && strncmp (annex, "prev", 4) == 0)
5800 addrp = &lm_prev;
5801 else
5802 {
5803 annex = strchr (sep, ';');
5804 if (annex == NULL)
5805 break;
5806 annex++;
5807 continue;
5808 }
5809
5810 annex = decode_address_to_semicolon (addrp, sep + 1);
2268b414 5811 }
b1fbec62
GB
5812
5813 if (lm_addr == 0)
2268b414 5814 {
b1fbec62
GB
5815 int r_version = 0;
5816
5817 if (priv->r_debug == 0)
5818 priv->r_debug = get_r_debug (pid, is_elf64);
5819
5820 /* We failed to find DT_DEBUG. Such situation will not change
5821 for this inferior - do not retry it. Report it to GDB as
5822 E01, see for the reasons at the GDB solib-svr4.c side. */
5823 if (priv->r_debug == (CORE_ADDR) -1)
5824 return -1;
5825
5826 if (priv->r_debug != 0)
2268b414 5827 {
b1fbec62
GB
5828 if (linux_read_memory (priv->r_debug + lmo->r_version_offset,
5829 (unsigned char *) &r_version,
5830 sizeof (r_version)) != 0
5831 || r_version != 1)
5832 {
5833 warning ("unexpected r_debug version %d", r_version);
5834 }
5835 else if (read_one_ptr (priv->r_debug + lmo->r_map_offset,
5836 &lm_addr, ptr_size) != 0)
5837 {
5838 warning ("unable to read r_map from 0x%lx",
5839 (long) priv->r_debug + lmo->r_map_offset);
5840 }
2268b414 5841 }
b1fbec62 5842 }
2268b414 5843
b1fbec62
GB
5844 document = xmalloc (allocated);
5845 strcpy (document, "<library-list-svr4 version=\"1.0\"");
5846 p = document + strlen (document);
5847
5848 while (lm_addr
5849 && read_one_ptr (lm_addr + lmo->l_name_offset,
5850 &l_name, ptr_size) == 0
5851 && read_one_ptr (lm_addr + lmo->l_addr_offset,
5852 &l_addr, ptr_size) == 0
5853 && read_one_ptr (lm_addr + lmo->l_ld_offset,
5854 &l_ld, ptr_size) == 0
5855 && read_one_ptr (lm_addr + lmo->l_prev_offset,
5856 &l_prev, ptr_size) == 0
5857 && read_one_ptr (lm_addr + lmo->l_next_offset,
5858 &l_next, ptr_size) == 0)
5859 {
5860 unsigned char libname[PATH_MAX];
5861
5862 if (lm_prev != l_prev)
2268b414 5863 {
b1fbec62
GB
5864 warning ("Corrupted shared library list: 0x%lx != 0x%lx",
5865 (long) lm_prev, (long) l_prev);
5866 break;
2268b414
JK
5867 }
5868
d878444c
JK
5869 /* Ignore the first entry even if it has valid name as the first entry
5870 corresponds to the main executable. The first entry should not be
5871 skipped if the dynamic loader was loaded late by a static executable
5872 (see solib-svr4.c parameter ignore_first). But in such case the main
5873 executable does not have PT_DYNAMIC present and this function already
5874 exited above due to failed get_r_debug. */
5875 if (lm_prev == 0)
2268b414 5876 {
d878444c
JK
5877 sprintf (p, " main-lm=\"0x%lx\"", (unsigned long) lm_addr);
5878 p = p + strlen (p);
5879 }
5880 else
5881 {
5882 /* Not checking for error because reading may stop before
5883 we've got PATH_MAX worth of characters. */
5884 libname[0] = '\0';
5885 linux_read_memory (l_name, libname, sizeof (libname) - 1);
5886 libname[sizeof (libname) - 1] = '\0';
5887 if (libname[0] != '\0')
2268b414 5888 {
d878444c
JK
5889 /* 6x the size for xml_escape_text below. */
5890 size_t len = 6 * strlen ((char *) libname);
5891 char *name;
2268b414 5892
d878444c
JK
5893 if (!header_done)
5894 {
5895 /* Terminate `<library-list-svr4'. */
5896 *p++ = '>';
5897 header_done = 1;
5898 }
2268b414 5899
d878444c
JK
5900 while (allocated < p - document + len + 200)
5901 {
5902 /* Expand to guarantee sufficient storage. */
5903 uintptr_t document_len = p - document;
2268b414 5904
d878444c
JK
5905 document = xrealloc (document, 2 * allocated);
5906 allocated *= 2;
5907 p = document + document_len;
5908 }
5909
5910 name = xml_escape_text ((char *) libname);
5911 p += sprintf (p, "<library name=\"%s\" lm=\"0x%lx\" "
5912 "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
5913 name, (unsigned long) lm_addr,
5914 (unsigned long) l_addr, (unsigned long) l_ld);
5915 free (name);
5916 }
0afae3cf 5917 }
b1fbec62
GB
5918
5919 lm_prev = lm_addr;
5920 lm_addr = l_next;
2268b414
JK
5921 }
5922
b1fbec62
GB
5923 if (!header_done)
5924 {
5925 /* Empty list; terminate `<library-list-svr4'. */
5926 strcpy (p, "/>");
5927 }
5928 else
5929 strcpy (p, "</library-list-svr4>");
5930
2268b414
JK
5931 document_len = strlen (document);
5932 if (offset < document_len)
5933 document_len -= offset;
5934 else
5935 document_len = 0;
5936 if (len > document_len)
5937 len = document_len;
5938
5939 memcpy (readbuf, document + offset, len);
5940 xfree (document);
5941
5942 return len;
5943}
5944
9accd112
MM
5945#ifdef HAVE_LINUX_BTRACE
5946
969c39fb 5947/* See to_enable_btrace target method. */
9accd112
MM
5948
5949static struct btrace_target_info *
5950linux_low_enable_btrace (ptid_t ptid)
5951{
5952 struct btrace_target_info *tinfo;
5953
5954 tinfo = linux_enable_btrace (ptid);
3aee8918 5955
9accd112 5956 if (tinfo != NULL)
3aee8918
PA
5957 {
5958 struct thread_info *thread = find_thread_ptid (ptid);
5959 struct regcache *regcache = get_thread_regcache (thread, 0);
5960
5961 tinfo->ptr_bits = register_size (regcache->tdesc, 0) * 8;
5962 }
9accd112
MM
5963
5964 return tinfo;
5965}
5966
969c39fb 5967/* See to_disable_btrace target method. */
9accd112 5968
969c39fb
MM
5969static int
5970linux_low_disable_btrace (struct btrace_target_info *tinfo)
5971{
5972 enum btrace_error err;
5973
5974 err = linux_disable_btrace (tinfo);
5975 return (err == BTRACE_ERR_NONE ? 0 : -1);
5976}
5977
5978/* See to_read_btrace target method. */
5979
5980static int
9accd112
MM
5981linux_low_read_btrace (struct btrace_target_info *tinfo, struct buffer *buffer,
5982 int type)
5983{
5984 VEC (btrace_block_s) *btrace;
5985 struct btrace_block *block;
969c39fb 5986 enum btrace_error err;
9accd112
MM
5987 int i;
5988
969c39fb
MM
5989 btrace = NULL;
5990 err = linux_read_btrace (&btrace, tinfo, type);
5991 if (err != BTRACE_ERR_NONE)
5992 {
5993 if (err == BTRACE_ERR_OVERFLOW)
5994 buffer_grow_str0 (buffer, "E.Overflow.");
5995 else
5996 buffer_grow_str0 (buffer, "E.Generic Error.");
5997
5998 return -1;
5999 }
9accd112
MM
6000
6001 buffer_grow_str (buffer, "<!DOCTYPE btrace SYSTEM \"btrace.dtd\">\n");
6002 buffer_grow_str (buffer, "<btrace version=\"1.0\">\n");
6003
6004 for (i = 0; VEC_iterate (btrace_block_s, btrace, i, block); i++)
6005 buffer_xml_printf (buffer, "<block begin=\"0x%s\" end=\"0x%s\"/>\n",
6006 paddress (block->begin), paddress (block->end));
6007
969c39fb 6008 buffer_grow_str0 (buffer, "</btrace>\n");
9accd112
MM
6009
6010 VEC_free (btrace_block_s, btrace);
969c39fb
MM
6011
6012 return 0;
9accd112
MM
6013}
6014#endif /* HAVE_LINUX_BTRACE */
6015
ce3a066d
DJ
6016static struct target_ops linux_target_ops = {
6017 linux_create_inferior,
6018 linux_attach,
6019 linux_kill,
6ad8ae5c 6020 linux_detach,
8336d594 6021 linux_mourn,
444d6139 6022 linux_join,
ce3a066d
DJ
6023 linux_thread_alive,
6024 linux_resume,
6025 linux_wait,
6026 linux_fetch_registers,
6027 linux_store_registers,
90d74c30 6028 linux_prepare_to_access_memory,
0146f85b 6029 linux_done_accessing_memory,
ce3a066d
DJ
6030 linux_read_memory,
6031 linux_write_memory,
2f2893d9 6032 linux_look_up_symbols,
ef57601b 6033 linux_request_interrupt,
aa691b87 6034 linux_read_auxv,
802e8e6d 6035 linux_supports_z_point_type,
d993e290
PA
6036 linux_insert_point,
6037 linux_remove_point,
e013ee27
OF
6038 linux_stopped_by_watchpoint,
6039 linux_stopped_data_address,
db0dfaa0
LM
6040#if defined(__UCLIBC__) && defined(HAS_NOMMU) \
6041 && defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) \
6042 && defined(PT_TEXT_END_ADDR)
52fb6437 6043 linux_read_offsets,
dae5f5cf
DJ
6044#else
6045 NULL,
6046#endif
6047#ifdef USE_THREAD_DB
6048 thread_db_get_tls_address,
6049#else
6050 NULL,
52fb6437 6051#endif
efcbbd14 6052 linux_qxfer_spu,
59a016f0 6053 hostio_last_error_from_errno,
07e059b5 6054 linux_qxfer_osdata,
4aa995e1 6055 linux_xfer_siginfo,
bd99dc85
PA
6056 linux_supports_non_stop,
6057 linux_async,
6058 linux_start_non_stop,
cdbfd419
PP
6059 linux_supports_multi_process,
6060#ifdef USE_THREAD_DB
dc146f7c 6061 thread_db_handle_monitor_command,
cdbfd419 6062#else
dc146f7c 6063 NULL,
cdbfd419 6064#endif
d26e3629 6065 linux_common_core_of_thread,
78d85199 6066 linux_read_loadmap,
219f2f23
PA
6067 linux_process_qsupported,
6068 linux_supports_tracepoints,
6069 linux_read_pc,
8336d594
PA
6070 linux_write_pc,
6071 linux_thread_stopped,
7984d532 6072 NULL,
711e434b 6073 linux_pause_all,
7984d532 6074 linux_unpause_all,
fa593d66
PA
6075 linux_cancel_breakpoints,
6076 linux_stabilize_threads,
6a271cae 6077 linux_install_fast_tracepoint_jump_pad,
03583c20
UW
6078 linux_emit_ops,
6079 linux_supports_disable_randomization,
405f8e94 6080 linux_get_min_fast_tracepoint_insn_len,
2268b414 6081 linux_qxfer_libraries_svr4,
d1feda86 6082 linux_supports_agent,
9accd112
MM
6083#ifdef HAVE_LINUX_BTRACE
6084 linux_supports_btrace,
6085 linux_low_enable_btrace,
969c39fb 6086 linux_low_disable_btrace,
9accd112
MM
6087 linux_low_read_btrace,
6088#else
6089 NULL,
6090 NULL,
6091 NULL,
6092 NULL,
9accd112 6093#endif
c2d6af84 6094 linux_supports_range_stepping,
ce3a066d
DJ
6095};
6096
0d62e5e8
DJ
6097static void
6098linux_init_signals ()
6099{
6100 /* FIXME drow/2002-06-09: As above, we should check with LinuxThreads
6101 to find what the cancel signal actually is. */
1a981360 6102#ifndef __ANDROID__ /* Bionic doesn't use SIGRTMIN the way glibc does. */
254787d4 6103 signal (__SIGRTMIN+1, SIG_IGN);
60c3d7b0 6104#endif
0d62e5e8
DJ
6105}
6106
3aee8918
PA
6107#ifdef HAVE_LINUX_REGSETS
6108void
6109initialize_regsets_info (struct regsets_info *info)
6110{
6111 for (info->num_regsets = 0;
6112 info->regsets[info->num_regsets].size >= 0;
6113 info->num_regsets++)
6114 ;
3aee8918
PA
6115}
6116#endif
6117
da6d8c04
DJ
6118void
6119initialize_low (void)
6120{
bd99dc85
PA
6121 struct sigaction sigchld_action;
6122 memset (&sigchld_action, 0, sizeof (sigchld_action));
ce3a066d 6123 set_target_ops (&linux_target_ops);
611cb4a5
DJ
6124 set_breakpoint_data (the_low_target.breakpoint,
6125 the_low_target.breakpoint_len);
0d62e5e8 6126 linux_init_signals ();
aa7c7447 6127 linux_ptrace_init_warnings ();
bd99dc85
PA
6128
6129 sigchld_action.sa_handler = sigchld_handler;
6130 sigemptyset (&sigchld_action.sa_mask);
6131 sigchld_action.sa_flags = SA_RESTART;
6132 sigaction (SIGCHLD, &sigchld_action, NULL);
3aee8918
PA
6133
6134 initialize_low_arch ();
da6d8c04 6135}
This page took 1.724549 seconds and 4 git commands to generate.