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