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