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