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