Update copyright year in most headers.
[deliverable/binutils-gdb.git] / gdb / gdbserver / linux-low.c
1 /* Low level interface to ptrace, for the remote server for GDB.
2 Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
3 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "server.h"
21 #include "linux-low.h"
22
23 #include <sys/wait.h>
24 #include <stdio.h>
25 #include <sys/param.h>
26 #include <sys/ptrace.h>
27 #include <signal.h>
28 #include <sys/ioctl.h>
29 #include <fcntl.h>
30 #include <string.h>
31 #include <stdlib.h>
32 #include <unistd.h>
33 #include <errno.h>
34 #include <sys/syscall.h>
35 #include <sched.h>
36 #include <ctype.h>
37 #include <pwd.h>
38 #include <sys/types.h>
39 #include <dirent.h>
40 #include <sys/stat.h>
41 #include <sys/vfs.h>
42 #ifndef ELFMAG0
43 /* Don't include <linux/elf.h> here. If it got included by gdb_proc_service.h
44 then ELFMAG0 will have been defined. If it didn't get included by
45 gdb_proc_service.h then including it will likely introduce a duplicate
46 definition of elf_fpregset_t. */
47 #include <elf.h>
48 #endif
49
50 #ifndef SPUFS_MAGIC
51 #define SPUFS_MAGIC 0x23c9b64e
52 #endif
53
54 #ifndef PTRACE_GETSIGINFO
55 # define PTRACE_GETSIGINFO 0x4202
56 # define PTRACE_SETSIGINFO 0x4203
57 #endif
58
59 #ifndef O_LARGEFILE
60 #define O_LARGEFILE 0
61 #endif
62
63 /* If the system headers did not provide the constants, hard-code the normal
64 values. */
65 #ifndef PTRACE_EVENT_FORK
66
67 #define PTRACE_SETOPTIONS 0x4200
68 #define PTRACE_GETEVENTMSG 0x4201
69
70 /* options set using PTRACE_SETOPTIONS */
71 #define PTRACE_O_TRACESYSGOOD 0x00000001
72 #define PTRACE_O_TRACEFORK 0x00000002
73 #define PTRACE_O_TRACEVFORK 0x00000004
74 #define PTRACE_O_TRACECLONE 0x00000008
75 #define PTRACE_O_TRACEEXEC 0x00000010
76 #define PTRACE_O_TRACEVFORKDONE 0x00000020
77 #define PTRACE_O_TRACEEXIT 0x00000040
78
79 /* Wait extended result codes for the above trace options. */
80 #define PTRACE_EVENT_FORK 1
81 #define PTRACE_EVENT_VFORK 2
82 #define PTRACE_EVENT_CLONE 3
83 #define PTRACE_EVENT_EXEC 4
84 #define PTRACE_EVENT_VFORK_DONE 5
85 #define PTRACE_EVENT_EXIT 6
86
87 #endif /* PTRACE_EVENT_FORK */
88
89 /* We can't always assume that this flag is available, but all systems
90 with the ptrace event handlers also have __WALL, so it's safe to use
91 in some contexts. */
92 #ifndef __WALL
93 #define __WALL 0x40000000 /* Wait for any child. */
94 #endif
95
96 #ifdef __UCLIBC__
97 #if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
98 #define HAS_NOMMU
99 #endif
100 #endif
101
102 /* ``all_threads'' is keyed by the LWP ID, which we use as the GDB protocol
103 representation of the thread ID.
104
105 ``all_lwps'' is keyed by the process ID - which on Linux is (presently)
106 the same as the LWP ID.
107
108 ``all_processes'' is keyed by the "overall process ID", which
109 GNU/Linux calls tgid, "thread group ID". */
110
111 struct inferior_list all_lwps;
112
113 /* A list of all unknown processes which receive stop signals. Some other
114 process will presumably claim each of these as forked children
115 momentarily. */
116
117 struct inferior_list stopped_pids;
118
119 /* FIXME this is a bit of a hack, and could be removed. */
120 int stopping_threads;
121
122 /* FIXME make into a target method? */
123 int using_threads = 1;
124
125 /* This flag is true iff we've just created or attached to our first
126 inferior but it has not stopped yet. As soon as it does, we need
127 to call the low target's arch_setup callback. Doing this only on
128 the first inferior avoids reinializing the architecture on every
129 inferior, and avoids messing with the register caches of the
130 already running inferiors. NOTE: this assumes all inferiors under
131 control of gdbserver have the same architecture. */
132 static int new_inferior;
133
134 static void linux_resume_one_lwp (struct lwp_info *lwp,
135 int step, int signal, siginfo_t *info);
136 static void linux_resume (struct thread_resume *resume_info, size_t n);
137 static void stop_all_lwps (void);
138 static int linux_wait_for_event (ptid_t ptid, int *wstat, int options);
139 static int check_removed_breakpoint (struct lwp_info *event_child);
140 static void *add_lwp (ptid_t ptid);
141 static int linux_stopped_by_watchpoint (void);
142 static void mark_lwp_dead (struct lwp_info *lwp, int wstat);
143
144 struct pending_signals
145 {
146 int signal;
147 siginfo_t info;
148 struct pending_signals *prev;
149 };
150
151 #define PTRACE_ARG3_TYPE long
152 #define PTRACE_XFER_TYPE long
153
154 #ifdef HAVE_LINUX_REGSETS
155 static char *disabled_regsets;
156 static int num_regsets;
157 #endif
158
159 /* The read/write ends of the pipe registered as waitable file in the
160 event loop. */
161 static int linux_event_pipe[2] = { -1, -1 };
162
163 /* True if we're currently in async mode. */
164 #define target_is_async_p() (linux_event_pipe[0] != -1)
165
166 static void send_sigstop (struct inferior_list_entry *entry);
167 static void wait_for_sigstop (struct inferior_list_entry *entry);
168
169 /* Accepts an integer PID; Returns a string representing a file that
170 can be opened to get info for the child process.
171 Space for the result is malloc'd, caller must free. */
172
173 char *
174 linux_child_pid_to_exec_file (int pid)
175 {
176 char *name1, *name2;
177
178 name1 = xmalloc (MAXPATHLEN);
179 name2 = xmalloc (MAXPATHLEN);
180 memset (name2, 0, MAXPATHLEN);
181
182 sprintf (name1, "/proc/%d/exe", pid);
183 if (readlink (name1, name2, MAXPATHLEN) > 0)
184 {
185 free (name1);
186 return name2;
187 }
188 else
189 {
190 free (name2);
191 return name1;
192 }
193 }
194
195 /* Return non-zero if HEADER is a 64-bit ELF file. */
196
197 static int
198 elf_64_header_p (const Elf64_Ehdr *header)
199 {
200 return (header->e_ident[EI_MAG0] == ELFMAG0
201 && header->e_ident[EI_MAG1] == ELFMAG1
202 && header->e_ident[EI_MAG2] == ELFMAG2
203 && header->e_ident[EI_MAG3] == ELFMAG3
204 && header->e_ident[EI_CLASS] == ELFCLASS64);
205 }
206
207 /* Return non-zero if FILE is a 64-bit ELF file,
208 zero if the file is not a 64-bit ELF file,
209 and -1 if the file is not accessible or doesn't exist. */
210
211 int
212 elf_64_file_p (const char *file)
213 {
214 Elf64_Ehdr header;
215 int fd;
216
217 fd = open (file, O_RDONLY);
218 if (fd < 0)
219 return -1;
220
221 if (read (fd, &header, sizeof (header)) != sizeof (header))
222 {
223 close (fd);
224 return 0;
225 }
226 close (fd);
227
228 return elf_64_header_p (&header);
229 }
230
231 static void
232 delete_lwp (struct lwp_info *lwp)
233 {
234 remove_thread (get_lwp_thread (lwp));
235 remove_inferior (&all_lwps, &lwp->head);
236 free (lwp->arch_private);
237 free (lwp);
238 }
239
240 /* Add a process to the common process list, and set its private
241 data. */
242
243 static struct process_info *
244 linux_add_process (int pid, int attached)
245 {
246 struct process_info *proc;
247
248 /* Is this the first process? If so, then set the arch. */
249 if (all_processes.head == NULL)
250 new_inferior = 1;
251
252 proc = add_process (pid, attached);
253 proc->private = xcalloc (1, sizeof (*proc->private));
254
255 if (the_low_target.new_process != NULL)
256 proc->private->arch_private = the_low_target.new_process ();
257
258 return proc;
259 }
260
261 /* Remove a process from the common process list,
262 also freeing all private data. */
263
264 static void
265 linux_remove_process (struct process_info *process)
266 {
267 struct process_info_private *priv = process->private;
268
269 free (priv->arch_private);
270 free (priv);
271 remove_process (process);
272 }
273
274 /* Wrapper function for waitpid which handles EINTR, and emulates
275 __WALL for systems where that is not available. */
276
277 static int
278 my_waitpid (int pid, int *status, int flags)
279 {
280 int ret, out_errno;
281
282 if (debug_threads)
283 fprintf (stderr, "my_waitpid (%d, 0x%x)\n", pid, flags);
284
285 if (flags & __WALL)
286 {
287 sigset_t block_mask, org_mask, wake_mask;
288 int wnohang;
289
290 wnohang = (flags & WNOHANG) != 0;
291 flags &= ~(__WALL | __WCLONE);
292 flags |= WNOHANG;
293
294 /* Block all signals while here. This avoids knowing about
295 LinuxThread's signals. */
296 sigfillset (&block_mask);
297 sigprocmask (SIG_BLOCK, &block_mask, &org_mask);
298
299 /* ... except during the sigsuspend below. */
300 sigemptyset (&wake_mask);
301
302 while (1)
303 {
304 /* Since all signals are blocked, there's no need to check
305 for EINTR here. */
306 ret = waitpid (pid, status, flags);
307 out_errno = errno;
308
309 if (ret == -1 && out_errno != ECHILD)
310 break;
311 else if (ret > 0)
312 break;
313
314 if (flags & __WCLONE)
315 {
316 /* We've tried both flavors now. If WNOHANG is set,
317 there's nothing else to do, just bail out. */
318 if (wnohang)
319 break;
320
321 if (debug_threads)
322 fprintf (stderr, "blocking\n");
323
324 /* Block waiting for signals. */
325 sigsuspend (&wake_mask);
326 }
327
328 flags ^= __WCLONE;
329 }
330
331 sigprocmask (SIG_SETMASK, &org_mask, NULL);
332 }
333 else
334 {
335 do
336 ret = waitpid (pid, status, flags);
337 while (ret == -1 && errno == EINTR);
338 out_errno = errno;
339 }
340
341 if (debug_threads)
342 fprintf (stderr, "my_waitpid (%d, 0x%x): status(%x), %d\n",
343 pid, flags, status ? *status : -1, ret);
344
345 errno = out_errno;
346 return ret;
347 }
348
349 /* Handle a GNU/Linux extended wait response. If we see a clone
350 event, we need to add the new LWP to our list (and not report the
351 trap to higher layers). */
352
353 static void
354 handle_extended_wait (struct lwp_info *event_child, int wstat)
355 {
356 int event = wstat >> 16;
357 struct lwp_info *new_lwp;
358
359 if (event == PTRACE_EVENT_CLONE)
360 {
361 ptid_t ptid;
362 unsigned long new_pid;
363 int ret, status = W_STOPCODE (SIGSTOP);
364
365 ptrace (PTRACE_GETEVENTMSG, lwpid_of (event_child), 0, &new_pid);
366
367 /* If we haven't already seen the new PID stop, wait for it now. */
368 if (! pull_pid_from_list (&stopped_pids, new_pid))
369 {
370 /* The new child has a pending SIGSTOP. We can't affect it until it
371 hits the SIGSTOP, but we're already attached. */
372
373 ret = my_waitpid (new_pid, &status, __WALL);
374
375 if (ret == -1)
376 perror_with_name ("waiting for new child");
377 else if (ret != new_pid)
378 warning ("wait returned unexpected PID %d", ret);
379 else if (!WIFSTOPPED (status))
380 warning ("wait returned unexpected status 0x%x", status);
381 }
382
383 ptrace (PTRACE_SETOPTIONS, new_pid, 0, PTRACE_O_TRACECLONE);
384
385 ptid = ptid_build (pid_of (event_child), new_pid, 0);
386 new_lwp = (struct lwp_info *) add_lwp (ptid);
387 add_thread (ptid, new_lwp);
388
389 /* Either we're going to immediately resume the new thread
390 or leave it stopped. linux_resume_one_lwp is a nop if it
391 thinks the thread is currently running, so set this first
392 before calling linux_resume_one_lwp. */
393 new_lwp->stopped = 1;
394
395 /* Normally we will get the pending SIGSTOP. But in some cases
396 we might get another signal delivered to the group first.
397 If we do get another signal, be sure not to lose it. */
398 if (WSTOPSIG (status) == SIGSTOP)
399 {
400 if (! stopping_threads)
401 linux_resume_one_lwp (new_lwp, 0, 0, NULL);
402 }
403 else
404 {
405 new_lwp->stop_expected = 1;
406 if (stopping_threads)
407 {
408 new_lwp->status_pending_p = 1;
409 new_lwp->status_pending = status;
410 }
411 else
412 /* Pass the signal on. This is what GDB does - except
413 shouldn't we really report it instead? */
414 linux_resume_one_lwp (new_lwp, 0, WSTOPSIG (status), NULL);
415 }
416
417 /* Always resume the current thread. If we are stopping
418 threads, it will have a pending SIGSTOP; we may as well
419 collect it now. */
420 linux_resume_one_lwp (event_child, event_child->stepping, 0, NULL);
421 }
422 }
423
424 /* This function should only be called if the process got a SIGTRAP.
425 The SIGTRAP could mean several things.
426
427 On i386, where decr_pc_after_break is non-zero:
428 If we were single-stepping this process using PTRACE_SINGLESTEP,
429 we will get only the one SIGTRAP (even if the instruction we
430 stepped over was a breakpoint). The value of $eip will be the
431 next instruction.
432 If we continue the process using PTRACE_CONT, we will get a
433 SIGTRAP when we hit a breakpoint. The value of $eip will be
434 the instruction after the breakpoint (i.e. needs to be
435 decremented). If we report the SIGTRAP to GDB, we must also
436 report the undecremented PC. If we cancel the SIGTRAP, we
437 must resume at the decremented PC.
438
439 (Presumably, not yet tested) On a non-decr_pc_after_break machine
440 with hardware or kernel single-step:
441 If we single-step over a breakpoint instruction, our PC will
442 point at the following instruction. If we continue and hit a
443 breakpoint instruction, our PC will point at the breakpoint
444 instruction. */
445
446 static CORE_ADDR
447 get_stop_pc (void)
448 {
449 CORE_ADDR stop_pc = (*the_low_target.get_pc) ();
450
451 if (! get_thread_lwp (current_inferior)->stepping)
452 stop_pc -= the_low_target.decr_pc_after_break;
453
454 if (debug_threads)
455 fprintf (stderr, "stop pc is 0x%lx\n", (long) stop_pc);
456
457 return stop_pc;
458 }
459
460 static void *
461 add_lwp (ptid_t ptid)
462 {
463 struct lwp_info *lwp;
464
465 lwp = (struct lwp_info *) xmalloc (sizeof (*lwp));
466 memset (lwp, 0, sizeof (*lwp));
467
468 lwp->head.id = ptid;
469
470 if (the_low_target.new_thread != NULL)
471 lwp->arch_private = the_low_target.new_thread ();
472
473 add_inferior_to_list (&all_lwps, &lwp->head);
474
475 return lwp;
476 }
477
478 /* Start an inferior process and returns its pid.
479 ALLARGS is a vector of program-name and args. */
480
481 static int
482 linux_create_inferior (char *program, char **allargs)
483 {
484 struct lwp_info *new_lwp;
485 int pid;
486 ptid_t ptid;
487
488 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
489 pid = vfork ();
490 #else
491 pid = fork ();
492 #endif
493 if (pid < 0)
494 perror_with_name ("fork");
495
496 if (pid == 0)
497 {
498 ptrace (PTRACE_TRACEME, 0, 0, 0);
499
500 signal (__SIGRTMIN + 1, SIG_DFL);
501
502 setpgid (0, 0);
503
504 execv (program, allargs);
505 if (errno == ENOENT)
506 execvp (program, allargs);
507
508 fprintf (stderr, "Cannot exec %s: %s.\n", program,
509 strerror (errno));
510 fflush (stderr);
511 _exit (0177);
512 }
513
514 linux_add_process (pid, 0);
515
516 ptid = ptid_build (pid, pid, 0);
517 new_lwp = add_lwp (ptid);
518 add_thread (ptid, new_lwp);
519 new_lwp->must_set_ptrace_flags = 1;
520
521 return pid;
522 }
523
524 /* Attach to an inferior process. */
525
526 static void
527 linux_attach_lwp_1 (unsigned long lwpid, int initial)
528 {
529 ptid_t ptid;
530 struct lwp_info *new_lwp;
531
532 if (ptrace (PTRACE_ATTACH, lwpid, 0, 0) != 0)
533 {
534 if (!initial)
535 {
536 /* If we fail to attach to an LWP, just warn. */
537 fprintf (stderr, "Cannot attach to lwp %ld: %s (%d)\n", lwpid,
538 strerror (errno), errno);
539 fflush (stderr);
540 return;
541 }
542 else
543 /* If we fail to attach to a process, report an error. */
544 error ("Cannot attach to lwp %ld: %s (%d)\n", lwpid,
545 strerror (errno), errno);
546 }
547
548 if (initial)
549 /* NOTE/FIXME: This lwp might have not been the tgid. */
550 ptid = ptid_build (lwpid, lwpid, 0);
551 else
552 {
553 /* Note that extracting the pid from the current inferior is
554 safe, since we're always called in the context of the same
555 process as this new thread. */
556 int pid = pid_of (get_thread_lwp (current_inferior));
557 ptid = ptid_build (pid, lwpid, 0);
558 }
559
560 new_lwp = (struct lwp_info *) add_lwp (ptid);
561 add_thread (ptid, new_lwp);
562
563 /* We need to wait for SIGSTOP before being able to make the next
564 ptrace call on this LWP. */
565 new_lwp->must_set_ptrace_flags = 1;
566
567 /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
568 brings it to a halt.
569
570 There are several cases to consider here:
571
572 1) gdbserver has already attached to the process and is being notified
573 of a new thread that is being created.
574 In this case we should ignore that SIGSTOP and resume the process.
575 This is handled below by setting stop_expected = 1.
576
577 2) This is the first thread (the process thread), and we're attaching
578 to it via attach_inferior.
579 In this case we want the process thread to stop.
580 This is handled by having linux_attach clear stop_expected after
581 we return.
582 ??? If the process already has several threads we leave the other
583 threads running.
584
585 3) GDB is connecting to gdbserver and is requesting an enumeration of all
586 existing threads.
587 In this case we want the thread to stop.
588 FIXME: This case is currently not properly handled.
589 We should wait for the SIGSTOP but don't. Things work apparently
590 because enough time passes between when we ptrace (ATTACH) and when
591 gdb makes the next ptrace call on the thread.
592
593 On the other hand, if we are currently trying to stop all threads, we
594 should treat the new thread as if we had sent it a SIGSTOP. This works
595 because we are guaranteed that the add_lwp call above added us to the
596 end of the list, and so the new thread has not yet reached
597 wait_for_sigstop (but will). */
598 if (! stopping_threads)
599 new_lwp->stop_expected = 1;
600 }
601
602 void
603 linux_attach_lwp (unsigned long lwpid)
604 {
605 linux_attach_lwp_1 (lwpid, 0);
606 }
607
608 int
609 linux_attach (unsigned long pid)
610 {
611 struct lwp_info *lwp;
612
613 linux_attach_lwp_1 (pid, 1);
614
615 linux_add_process (pid, 1);
616
617 if (!non_stop)
618 {
619 /* Don't ignore the initial SIGSTOP if we just attached to this
620 process. It will be collected by wait shortly. */
621 lwp = (struct lwp_info *) find_inferior_id (&all_lwps,
622 ptid_build (pid, pid, 0));
623 lwp->stop_expected = 0;
624 }
625
626 return 0;
627 }
628
629 struct counter
630 {
631 int pid;
632 int count;
633 };
634
635 static int
636 second_thread_of_pid_p (struct inferior_list_entry *entry, void *args)
637 {
638 struct counter *counter = args;
639
640 if (ptid_get_pid (entry->id) == counter->pid)
641 {
642 if (++counter->count > 1)
643 return 1;
644 }
645
646 return 0;
647 }
648
649 static int
650 last_thread_of_process_p (struct thread_info *thread)
651 {
652 ptid_t ptid = ((struct inferior_list_entry *)thread)->id;
653 int pid = ptid_get_pid (ptid);
654 struct counter counter = { pid , 0 };
655
656 return (find_inferior (&all_threads,
657 second_thread_of_pid_p, &counter) == NULL);
658 }
659
660 /* Kill the inferior lwp. */
661
662 static int
663 linux_kill_one_lwp (struct inferior_list_entry *entry, void *args)
664 {
665 struct thread_info *thread = (struct thread_info *) entry;
666 struct lwp_info *lwp = get_thread_lwp (thread);
667 int wstat;
668 int pid = * (int *) args;
669
670 if (ptid_get_pid (entry->id) != pid)
671 return 0;
672
673 /* We avoid killing the first thread here, because of a Linux kernel (at
674 least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
675 the children get a chance to be reaped, it will remain a zombie
676 forever. */
677
678 if (lwpid_of (lwp) == pid)
679 {
680 if (debug_threads)
681 fprintf (stderr, "lkop: is last of process %s\n",
682 target_pid_to_str (entry->id));
683 return 0;
684 }
685
686 /* If we're killing a running inferior, make sure it is stopped
687 first, as PTRACE_KILL will not work otherwise. */
688 if (!lwp->stopped)
689 send_sigstop (&lwp->head);
690
691 do
692 {
693 ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0);
694
695 /* Make sure it died. The loop is most likely unnecessary. */
696 pid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
697 } while (pid > 0 && WIFSTOPPED (wstat));
698
699 return 0;
700 }
701
702 static int
703 linux_kill (int pid)
704 {
705 struct process_info *process;
706 struct lwp_info *lwp;
707 struct thread_info *thread;
708 int wstat;
709 int lwpid;
710
711 process = find_process_pid (pid);
712 if (process == NULL)
713 return -1;
714
715 find_inferior (&all_threads, linux_kill_one_lwp, &pid);
716
717 /* See the comment in linux_kill_one_lwp. We did not kill the first
718 thread in the list, so do so now. */
719 lwp = find_lwp_pid (pid_to_ptid (pid));
720 thread = get_lwp_thread (lwp);
721
722 if (debug_threads)
723 fprintf (stderr, "lk_1: killing lwp %ld, for pid: %d\n",
724 lwpid_of (lwp), pid);
725
726 /* If we're killing a running inferior, make sure it is stopped
727 first, as PTRACE_KILL will not work otherwise. */
728 if (!lwp->stopped)
729 send_sigstop (&lwp->head);
730
731 do
732 {
733 ptrace (PTRACE_KILL, lwpid_of (lwp), 0, 0);
734
735 /* Make sure it died. The loop is most likely unnecessary. */
736 lwpid = linux_wait_for_event (lwp->head.id, &wstat, __WALL);
737 } while (lwpid > 0 && WIFSTOPPED (wstat));
738
739 #ifdef USE_THREAD_DB
740 thread_db_free (process, 0);
741 #endif
742 delete_lwp (lwp);
743 linux_remove_process (process);
744 return 0;
745 }
746
747 static int
748 linux_detach_one_lwp (struct inferior_list_entry *entry, void *args)
749 {
750 struct thread_info *thread = (struct thread_info *) entry;
751 struct lwp_info *lwp = get_thread_lwp (thread);
752 int pid = * (int *) args;
753
754 if (ptid_get_pid (entry->id) != pid)
755 return 0;
756
757 /* If we're detaching from a running inferior, make sure it is
758 stopped first, as PTRACE_DETACH will not work otherwise. */
759 if (!lwp->stopped)
760 {
761 int lwpid = lwpid_of (lwp);
762
763 stopping_threads = 1;
764 send_sigstop (&lwp->head);
765
766 /* If this detects a new thread through a clone event, the new
767 thread is appended to the end of the lwp list, so we'll
768 eventually detach from it. */
769 wait_for_sigstop (&lwp->head);
770 stopping_threads = 0;
771
772 /* If LWP exits while we're trying to stop it, there's nothing
773 left to do. */
774 lwp = find_lwp_pid (pid_to_ptid (lwpid));
775 if (lwp == NULL)
776 return 0;
777 }
778
779 /* Make sure the process isn't stopped at a breakpoint that's
780 no longer there. */
781 check_removed_breakpoint (lwp);
782
783 /* If this process is stopped but is expecting a SIGSTOP, then make
784 sure we take care of that now. This isn't absolutely guaranteed
785 to collect the SIGSTOP, but is fairly likely to. */
786 if (lwp->stop_expected)
787 {
788 int wstat;
789 /* Clear stop_expected, so that the SIGSTOP will be reported. */
790 lwp->stop_expected = 0;
791 if (lwp->stopped)
792 linux_resume_one_lwp (lwp, 0, 0, NULL);
793 linux_wait_for_event (lwp->head.id, &wstat, __WALL);
794 }
795
796 /* Flush any pending changes to the process's registers. */
797 regcache_invalidate_one ((struct inferior_list_entry *)
798 get_lwp_thread (lwp));
799
800 /* Finally, let it resume. */
801 ptrace (PTRACE_DETACH, lwpid_of (lwp), 0, 0);
802
803 delete_lwp (lwp);
804 return 0;
805 }
806
807 static int
808 any_thread_of (struct inferior_list_entry *entry, void *args)
809 {
810 int *pid_p = args;
811
812 if (ptid_get_pid (entry->id) == *pid_p)
813 return 1;
814
815 return 0;
816 }
817
818 static int
819 linux_detach (int pid)
820 {
821 struct process_info *process;
822
823 process = find_process_pid (pid);
824 if (process == NULL)
825 return -1;
826
827 #ifdef USE_THREAD_DB
828 thread_db_free (process, 1);
829 #endif
830
831 current_inferior =
832 (struct thread_info *) find_inferior (&all_threads, any_thread_of, &pid);
833
834 delete_all_breakpoints ();
835 find_inferior (&all_threads, linux_detach_one_lwp, &pid);
836 linux_remove_process (process);
837 return 0;
838 }
839
840 static void
841 linux_join (int pid)
842 {
843 int status, ret;
844 struct process_info *process;
845
846 process = find_process_pid (pid);
847 if (process == NULL)
848 return;
849
850 do {
851 ret = my_waitpid (pid, &status, 0);
852 if (WIFEXITED (status) || WIFSIGNALED (status))
853 break;
854 } while (ret != -1 || errno != ECHILD);
855 }
856
857 /* Return nonzero if the given thread is still alive. */
858 static int
859 linux_thread_alive (ptid_t ptid)
860 {
861 struct lwp_info *lwp = find_lwp_pid (ptid);
862
863 /* We assume we always know if a thread exits. If a whole process
864 exited but we still haven't been able to report it to GDB, we'll
865 hold on to the last lwp of the dead process. */
866 if (lwp != NULL)
867 return !lwp->dead;
868 else
869 return 0;
870 }
871
872 /* Return nonzero if this process stopped at a breakpoint which
873 no longer appears to be inserted. Also adjust the PC
874 appropriately to resume where the breakpoint used to be. */
875 static int
876 check_removed_breakpoint (struct lwp_info *event_child)
877 {
878 CORE_ADDR stop_pc;
879 struct thread_info *saved_inferior;
880
881 if (event_child->pending_is_breakpoint == 0)
882 return 0;
883
884 if (debug_threads)
885 fprintf (stderr, "Checking for breakpoint in lwp %ld.\n",
886 lwpid_of (event_child));
887
888 saved_inferior = current_inferior;
889 current_inferior = get_lwp_thread (event_child);
890
891 stop_pc = get_stop_pc ();
892
893 /* If the PC has changed since we stopped, then we shouldn't do
894 anything. This happens if, for instance, GDB handled the
895 decr_pc_after_break subtraction itself. */
896 if (stop_pc != event_child->pending_stop_pc)
897 {
898 if (debug_threads)
899 fprintf (stderr, "Ignoring, PC was changed. Old PC was 0x%08llx\n",
900 event_child->pending_stop_pc);
901
902 event_child->pending_is_breakpoint = 0;
903 current_inferior = saved_inferior;
904 return 0;
905 }
906
907 /* If the breakpoint is still there, we will report hitting it. */
908 if ((*the_low_target.breakpoint_at) (stop_pc))
909 {
910 if (debug_threads)
911 fprintf (stderr, "Ignoring, breakpoint is still present.\n");
912 current_inferior = saved_inferior;
913 return 0;
914 }
915
916 if (debug_threads)
917 fprintf (stderr, "Removed breakpoint.\n");
918
919 /* For decr_pc_after_break targets, here is where we perform the
920 decrement. We go immediately from this function to resuming,
921 and can not safely call get_stop_pc () again. */
922 if (the_low_target.set_pc != NULL)
923 {
924 if (debug_threads)
925 fprintf (stderr, "Set pc to 0x%lx\n", (long) stop_pc);
926 (*the_low_target.set_pc) (stop_pc);
927 }
928
929 /* We consumed the pending SIGTRAP. */
930 event_child->pending_is_breakpoint = 0;
931 event_child->status_pending_p = 0;
932 event_child->status_pending = 0;
933
934 current_inferior = saved_inferior;
935 return 1;
936 }
937
938 /* Return 1 if this lwp has an interesting status pending. This
939 function may silently resume an inferior lwp. */
940 static int
941 status_pending_p (struct inferior_list_entry *entry, void *arg)
942 {
943 struct lwp_info *lwp = (struct lwp_info *) entry;
944 ptid_t ptid = * (ptid_t *) arg;
945
946 /* Check if we're only interested in events from a specific process
947 or its lwps. */
948 if (!ptid_equal (minus_one_ptid, ptid)
949 && ptid_get_pid (ptid) != ptid_get_pid (lwp->head.id))
950 return 0;
951
952 if (lwp->status_pending_p && !lwp->suspended)
953 if (check_removed_breakpoint (lwp))
954 {
955 /* This thread was stopped at a breakpoint, and the breakpoint
956 is now gone. We were told to continue (or step...) all threads,
957 so GDB isn't trying to single-step past this breakpoint.
958 So instead of reporting the old SIGTRAP, pretend we got to
959 the breakpoint just after it was removed instead of just
960 before; resume the process. */
961 linux_resume_one_lwp (lwp, 0, 0, NULL);
962 return 0;
963 }
964
965 return (lwp->status_pending_p && !lwp->suspended);
966 }
967
968 static int
969 same_lwp (struct inferior_list_entry *entry, void *data)
970 {
971 ptid_t ptid = *(ptid_t *) data;
972 int lwp;
973
974 if (ptid_get_lwp (ptid) != 0)
975 lwp = ptid_get_lwp (ptid);
976 else
977 lwp = ptid_get_pid (ptid);
978
979 if (ptid_get_lwp (entry->id) == lwp)
980 return 1;
981
982 return 0;
983 }
984
985 struct lwp_info *
986 find_lwp_pid (ptid_t ptid)
987 {
988 return (struct lwp_info*) find_inferior (&all_lwps, same_lwp, &ptid);
989 }
990
991 static struct lwp_info *
992 linux_wait_for_lwp (ptid_t ptid, int *wstatp, int options)
993 {
994 int ret;
995 int to_wait_for = -1;
996 struct lwp_info *child = NULL;
997
998 if (debug_threads)
999 fprintf (stderr, "linux_wait_for_lwp: %s\n", target_pid_to_str (ptid));
1000
1001 if (ptid_equal (ptid, minus_one_ptid))
1002 to_wait_for = -1; /* any child */
1003 else
1004 to_wait_for = ptid_get_lwp (ptid); /* this lwp only */
1005
1006 options |= __WALL;
1007
1008 retry:
1009
1010 ret = my_waitpid (to_wait_for, wstatp, options);
1011 if (ret == 0 || (ret == -1 && errno == ECHILD && (options & WNOHANG)))
1012 return NULL;
1013 else if (ret == -1)
1014 perror_with_name ("waitpid");
1015
1016 if (debug_threads
1017 && (!WIFSTOPPED (*wstatp)
1018 || (WSTOPSIG (*wstatp) != 32
1019 && WSTOPSIG (*wstatp) != 33)))
1020 fprintf (stderr, "Got an event from %d (%x)\n", ret, *wstatp);
1021
1022 child = find_lwp_pid (pid_to_ptid (ret));
1023
1024 /* If we didn't find a process, one of two things presumably happened:
1025 - A process we started and then detached from has exited. Ignore it.
1026 - A process we are controlling has forked and the new child's stop
1027 was reported to us by the kernel. Save its PID. */
1028 if (child == NULL && WIFSTOPPED (*wstatp))
1029 {
1030 add_pid_to_list (&stopped_pids, ret);
1031 goto retry;
1032 }
1033 else if (child == NULL)
1034 goto retry;
1035
1036 child->stopped = 1;
1037 child->pending_is_breakpoint = 0;
1038
1039 child->last_status = *wstatp;
1040
1041 /* Architecture-specific setup after inferior is running.
1042 This needs to happen after we have attached to the inferior
1043 and it is stopped for the first time, but before we access
1044 any inferior registers. */
1045 if (new_inferior)
1046 {
1047 the_low_target.arch_setup ();
1048 #ifdef HAVE_LINUX_REGSETS
1049 memset (disabled_regsets, 0, num_regsets);
1050 #endif
1051 new_inferior = 0;
1052 }
1053
1054 if (debug_threads
1055 && WIFSTOPPED (*wstatp)
1056 && the_low_target.get_pc != NULL)
1057 {
1058 struct thread_info *saved_inferior = current_inferior;
1059 CORE_ADDR pc;
1060
1061 current_inferior = (struct thread_info *)
1062 find_inferior_id (&all_threads, child->head.id);
1063 pc = (*the_low_target.get_pc) ();
1064 fprintf (stderr, "linux_wait_for_lwp: pc is 0x%lx\n", (long) pc);
1065 current_inferior = saved_inferior;
1066 }
1067
1068 return child;
1069 }
1070
1071 /* Wait for an event from child PID. If PID is -1, wait for any
1072 child. Store the stop status through the status pointer WSTAT.
1073 OPTIONS is passed to the waitpid call. Return 0 if no child stop
1074 event was found and OPTIONS contains WNOHANG. Return the PID of
1075 the stopped child otherwise. */
1076
1077 static int
1078 linux_wait_for_event_1 (ptid_t ptid, int *wstat, int options)
1079 {
1080 CORE_ADDR stop_pc;
1081 struct lwp_info *event_child = NULL;
1082 int bp_status;
1083 struct lwp_info *requested_child = NULL;
1084
1085 /* Check for a lwp with a pending status. */
1086 /* It is possible that the user changed the pending task's registers since
1087 it stopped. We correctly handle the change of PC if we hit a breakpoint
1088 (in check_removed_breakpoint); signals should be reported anyway. */
1089
1090 if (ptid_equal (ptid, minus_one_ptid)
1091 || ptid_equal (pid_to_ptid (ptid_get_pid (ptid)), ptid))
1092 {
1093 event_child = (struct lwp_info *)
1094 find_inferior (&all_lwps, status_pending_p, &ptid);
1095 if (debug_threads && event_child)
1096 fprintf (stderr, "Got a pending child %ld\n", lwpid_of (event_child));
1097 }
1098 else
1099 {
1100 requested_child = find_lwp_pid (ptid);
1101 if (requested_child->status_pending_p
1102 && !check_removed_breakpoint (requested_child))
1103 event_child = requested_child;
1104 }
1105
1106 if (event_child != NULL)
1107 {
1108 if (debug_threads)
1109 fprintf (stderr, "Got an event from pending child %ld (%04x)\n",
1110 lwpid_of (event_child), event_child->status_pending);
1111 *wstat = event_child->status_pending;
1112 event_child->status_pending_p = 0;
1113 event_child->status_pending = 0;
1114 current_inferior = get_lwp_thread (event_child);
1115 return lwpid_of (event_child);
1116 }
1117
1118 /* We only enter this loop if no process has a pending wait status. Thus
1119 any action taken in response to a wait status inside this loop is
1120 responding as soon as we detect the status, not after any pending
1121 events. */
1122 while (1)
1123 {
1124 event_child = linux_wait_for_lwp (ptid, wstat, options);
1125
1126 if ((options & WNOHANG) && event_child == NULL)
1127 return 0;
1128
1129 if (event_child == NULL)
1130 error ("event from unknown child");
1131
1132 current_inferior = get_lwp_thread (event_child);
1133
1134 /* Check for thread exit. */
1135 if (! WIFSTOPPED (*wstat))
1136 {
1137 if (debug_threads)
1138 fprintf (stderr, "LWP %ld exiting\n", lwpid_of (event_child));
1139
1140 /* If the last thread is exiting, just return. */
1141 if (last_thread_of_process_p (current_inferior))
1142 {
1143 if (debug_threads)
1144 fprintf (stderr, "LWP %ld is last lwp of process\n",
1145 lwpid_of (event_child));
1146 return lwpid_of (event_child);
1147 }
1148
1149 delete_lwp (event_child);
1150
1151 if (!non_stop)
1152 {
1153 current_inferior = (struct thread_info *) all_threads.head;
1154 if (debug_threads)
1155 fprintf (stderr, "Current inferior is now %ld\n",
1156 lwpid_of (get_thread_lwp (current_inferior)));
1157 }
1158 else
1159 {
1160 current_inferior = NULL;
1161 if (debug_threads)
1162 fprintf (stderr, "Current inferior is now <NULL>\n");
1163 }
1164
1165 /* If we were waiting for this particular child to do something...
1166 well, it did something. */
1167 if (requested_child != NULL)
1168 return lwpid_of (event_child);
1169
1170 /* Wait for a more interesting event. */
1171 continue;
1172 }
1173
1174 if (event_child->must_set_ptrace_flags)
1175 {
1176 ptrace (PTRACE_SETOPTIONS, lwpid_of (event_child),
1177 0, PTRACE_O_TRACECLONE);
1178 event_child->must_set_ptrace_flags = 0;
1179 }
1180
1181 if (WIFSTOPPED (*wstat)
1182 && WSTOPSIG (*wstat) == SIGSTOP
1183 && event_child->stop_expected)
1184 {
1185 if (debug_threads)
1186 fprintf (stderr, "Expected stop.\n");
1187 event_child->stop_expected = 0;
1188 linux_resume_one_lwp (event_child, event_child->stepping, 0, NULL);
1189 continue;
1190 }
1191
1192 if (WIFSTOPPED (*wstat) && WSTOPSIG (*wstat) == SIGTRAP
1193 && *wstat >> 16 != 0)
1194 {
1195 handle_extended_wait (event_child, *wstat);
1196 continue;
1197 }
1198
1199 /* If GDB is not interested in this signal, don't stop other
1200 threads, and don't report it to GDB. Just resume the
1201 inferior right away. We do this for threading-related
1202 signals as well as any that GDB specifically requested we
1203 ignore. But never ignore SIGSTOP if we sent it ourselves,
1204 and do not ignore signals when stepping - they may require
1205 special handling to skip the signal handler. */
1206 /* FIXME drow/2002-06-09: Get signal numbers from the inferior's
1207 thread library? */
1208 if (WIFSTOPPED (*wstat)
1209 && !event_child->stepping
1210 && (
1211 #ifdef USE_THREAD_DB
1212 (current_process ()->private->thread_db != NULL
1213 && (WSTOPSIG (*wstat) == __SIGRTMIN
1214 || WSTOPSIG (*wstat) == __SIGRTMIN + 1))
1215 ||
1216 #endif
1217 (pass_signals[target_signal_from_host (WSTOPSIG (*wstat))]
1218 && (WSTOPSIG (*wstat) != SIGSTOP || !stopping_threads))))
1219 {
1220 siginfo_t info, *info_p;
1221
1222 if (debug_threads)
1223 fprintf (stderr, "Ignored signal %d for LWP %ld.\n",
1224 WSTOPSIG (*wstat), lwpid_of (event_child));
1225
1226 if (ptrace (PTRACE_GETSIGINFO, lwpid_of (event_child), 0, &info) == 0)
1227 info_p = &info;
1228 else
1229 info_p = NULL;
1230 linux_resume_one_lwp (event_child,
1231 event_child->stepping,
1232 WSTOPSIG (*wstat), info_p);
1233 continue;
1234 }
1235
1236 /* If this event was not handled above, and is not a SIGTRAP, report
1237 it. */
1238 if (!WIFSTOPPED (*wstat) || WSTOPSIG (*wstat) != SIGTRAP)
1239 return lwpid_of (event_child);
1240
1241 /* If this target does not support breakpoints, we simply report the
1242 SIGTRAP; it's of no concern to us. */
1243 if (the_low_target.get_pc == NULL)
1244 return lwpid_of (event_child);
1245
1246 stop_pc = get_stop_pc ();
1247
1248 /* bp_reinsert will only be set if we were single-stepping.
1249 Notice that we will resume the process after hitting
1250 a gdbserver breakpoint; single-stepping to/over one
1251 is not supported (yet). */
1252 if (event_child->bp_reinsert != 0)
1253 {
1254 if (debug_threads)
1255 fprintf (stderr, "Reinserted breakpoint.\n");
1256 reinsert_breakpoint (event_child->bp_reinsert);
1257 event_child->bp_reinsert = 0;
1258
1259 /* Clear the single-stepping flag and SIGTRAP as we resume. */
1260 linux_resume_one_lwp (event_child, 0, 0, NULL);
1261 continue;
1262 }
1263
1264 bp_status = check_breakpoints (stop_pc);
1265
1266 if (bp_status != 0)
1267 {
1268 if (debug_threads)
1269 fprintf (stderr, "Hit a gdbserver breakpoint.\n");
1270
1271 /* We hit one of our own breakpoints. We mark it as a pending
1272 breakpoint, so that check_removed_breakpoint () will do the PC
1273 adjustment for us at the appropriate time. */
1274 event_child->pending_is_breakpoint = 1;
1275 event_child->pending_stop_pc = stop_pc;
1276
1277 /* We may need to put the breakpoint back. We continue in the event
1278 loop instead of simply replacing the breakpoint right away,
1279 in order to not lose signals sent to the thread that hit the
1280 breakpoint. Unfortunately this increases the window where another
1281 thread could sneak past the removed breakpoint. For the current
1282 use of server-side breakpoints (thread creation) this is
1283 acceptable; but it needs to be considered before this breakpoint
1284 mechanism can be used in more general ways. For some breakpoints
1285 it may be necessary to stop all other threads, but that should
1286 be avoided where possible.
1287
1288 If breakpoint_reinsert_addr is NULL, that means that we can
1289 use PTRACE_SINGLESTEP on this platform. Uninsert the breakpoint,
1290 mark it for reinsertion, and single-step.
1291
1292 Otherwise, call the target function to figure out where we need
1293 our temporary breakpoint, create it, and continue executing this
1294 process. */
1295
1296 /* NOTE: we're lifting breakpoints in non-stop mode. This
1297 is currently only used for thread event breakpoints, so
1298 it isn't that bad as long as we have PTRACE_EVENT_CLONE
1299 events. */
1300 if (bp_status == 2)
1301 /* No need to reinsert. */
1302 linux_resume_one_lwp (event_child, 0, 0, NULL);
1303 else if (the_low_target.breakpoint_reinsert_addr == NULL)
1304 {
1305 event_child->bp_reinsert = stop_pc;
1306 uninsert_breakpoint (stop_pc);
1307 linux_resume_one_lwp (event_child, 1, 0, NULL);
1308 }
1309 else
1310 {
1311 reinsert_breakpoint_by_bp
1312 (stop_pc, (*the_low_target.breakpoint_reinsert_addr) ());
1313 linux_resume_one_lwp (event_child, 0, 0, NULL);
1314 }
1315
1316 continue;
1317 }
1318
1319 if (debug_threads)
1320 fprintf (stderr, "Hit a non-gdbserver breakpoint.\n");
1321
1322 /* If we were single-stepping, we definitely want to report the
1323 SIGTRAP. Although the single-step operation has completed,
1324 do not clear clear the stepping flag yet; we need to check it
1325 in wait_for_sigstop. */
1326 if (event_child->stepping)
1327 return lwpid_of (event_child);
1328
1329 /* A SIGTRAP that we can't explain. It may have been a breakpoint.
1330 Check if it is a breakpoint, and if so mark the process information
1331 accordingly. This will handle both the necessary fiddling with the
1332 PC on decr_pc_after_break targets and suppressing extra threads
1333 hitting a breakpoint if two hit it at once and then GDB removes it
1334 after the first is reported. Arguably it would be better to report
1335 multiple threads hitting breakpoints simultaneously, but the current
1336 remote protocol does not allow this. */
1337 if ((*the_low_target.breakpoint_at) (stop_pc))
1338 {
1339 event_child->pending_is_breakpoint = 1;
1340 event_child->pending_stop_pc = stop_pc;
1341 }
1342
1343 return lwpid_of (event_child);
1344 }
1345
1346 /* NOTREACHED */
1347 return 0;
1348 }
1349
1350 static int
1351 linux_wait_for_event (ptid_t ptid, int *wstat, int options)
1352 {
1353 ptid_t wait_ptid;
1354
1355 if (ptid_is_pid (ptid))
1356 {
1357 /* A request to wait for a specific tgid. This is not possible
1358 with waitpid, so instead, we wait for any child, and leave
1359 children we're not interested in right now with a pending
1360 status to report later. */
1361 wait_ptid = minus_one_ptid;
1362 }
1363 else
1364 wait_ptid = ptid;
1365
1366 while (1)
1367 {
1368 int event_pid;
1369
1370 event_pid = linux_wait_for_event_1 (wait_ptid, wstat, options);
1371
1372 if (event_pid > 0
1373 && ptid_is_pid (ptid) && ptid_get_pid (ptid) != event_pid)
1374 {
1375 struct lwp_info *event_child = find_lwp_pid (pid_to_ptid (event_pid));
1376
1377 if (! WIFSTOPPED (*wstat))
1378 mark_lwp_dead (event_child, *wstat);
1379 else
1380 {
1381 event_child->status_pending_p = 1;
1382 event_child->status_pending = *wstat;
1383 }
1384 }
1385 else
1386 return event_pid;
1387 }
1388 }
1389
1390 /* Wait for process, returns status. */
1391
1392 static ptid_t
1393 linux_wait_1 (ptid_t ptid,
1394 struct target_waitstatus *ourstatus, int target_options)
1395 {
1396 int w;
1397 struct thread_info *thread = NULL;
1398 struct lwp_info *lwp = NULL;
1399 int options;
1400 int pid;
1401
1402 /* Translate generic target options into linux options. */
1403 options = __WALL;
1404 if (target_options & TARGET_WNOHANG)
1405 options |= WNOHANG;
1406
1407 retry:
1408 ourstatus->kind = TARGET_WAITKIND_IGNORE;
1409
1410 /* If we were only supposed to resume one thread, only wait for
1411 that thread - if it's still alive. If it died, however - which
1412 can happen if we're coming from the thread death case below -
1413 then we need to make sure we restart the other threads. We could
1414 pick a thread at random or restart all; restarting all is less
1415 arbitrary. */
1416 if (!non_stop
1417 && !ptid_equal (cont_thread, null_ptid)
1418 && !ptid_equal (cont_thread, minus_one_ptid))
1419 {
1420 thread = (struct thread_info *) find_inferior_id (&all_threads,
1421 cont_thread);
1422
1423 /* No stepping, no signal - unless one is pending already, of course. */
1424 if (thread == NULL)
1425 {
1426 struct thread_resume resume_info;
1427 resume_info.thread = minus_one_ptid;
1428 resume_info.kind = resume_continue;
1429 resume_info.sig = 0;
1430 linux_resume (&resume_info, 1);
1431 }
1432 else
1433 ptid = cont_thread;
1434 }
1435
1436 pid = linux_wait_for_event (ptid, &w, options);
1437 if (pid == 0) /* only if TARGET_WNOHANG */
1438 return null_ptid;
1439
1440 lwp = get_thread_lwp (current_inferior);
1441
1442 /* If we are waiting for a particular child, and it exited,
1443 linux_wait_for_event will return its exit status. Similarly if
1444 the last child exited. If this is not the last child, however,
1445 do not report it as exited until there is a 'thread exited' response
1446 available in the remote protocol. Instead, just wait for another event.
1447 This should be safe, because if the thread crashed we will already
1448 have reported the termination signal to GDB; that should stop any
1449 in-progress stepping operations, etc.
1450
1451 Report the exit status of the last thread to exit. This matches
1452 LinuxThreads' behavior. */
1453
1454 if (last_thread_of_process_p (current_inferior))
1455 {
1456 if (WIFEXITED (w) || WIFSIGNALED (w))
1457 {
1458 int pid = pid_of (lwp);
1459 struct process_info *process = find_process_pid (pid);
1460
1461 #ifdef USE_THREAD_DB
1462 thread_db_free (process, 0);
1463 #endif
1464 delete_lwp (lwp);
1465 linux_remove_process (process);
1466
1467 current_inferior = NULL;
1468
1469 if (WIFEXITED (w))
1470 {
1471 ourstatus->kind = TARGET_WAITKIND_EXITED;
1472 ourstatus->value.integer = WEXITSTATUS (w);
1473
1474 if (debug_threads)
1475 fprintf (stderr, "\nChild exited with retcode = %x \n", WEXITSTATUS (w));
1476 }
1477 else
1478 {
1479 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1480 ourstatus->value.sig = target_signal_from_host (WTERMSIG (w));
1481
1482 if (debug_threads)
1483 fprintf (stderr, "\nChild terminated with signal = %x \n", WTERMSIG (w));
1484
1485 }
1486
1487 return pid_to_ptid (pid);
1488 }
1489 }
1490 else
1491 {
1492 if (!WIFSTOPPED (w))
1493 goto retry;
1494 }
1495
1496 /* In all-stop, stop all threads. Be careful to only do this if
1497 we're about to report an event to GDB. */
1498 if (!non_stop)
1499 stop_all_lwps ();
1500
1501 ourstatus->kind = TARGET_WAITKIND_STOPPED;
1502
1503 if (lwp->suspended && WSTOPSIG (w) == SIGSTOP)
1504 {
1505 /* A thread that has been requested to stop by GDB with vCont;t,
1506 and it stopped cleanly, so report as SIG0. The use of
1507 SIGSTOP is an implementation detail. */
1508 ourstatus->value.sig = TARGET_SIGNAL_0;
1509 }
1510 else if (lwp->suspended && WSTOPSIG (w) != SIGSTOP)
1511 {
1512 /* A thread that has been requested to stop by GDB with vCont;t,
1513 but, it stopped for other reasons. Set stop_expected so the
1514 pending SIGSTOP is ignored and the LWP is resumed. */
1515 lwp->stop_expected = 1;
1516 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
1517 }
1518 else
1519 {
1520 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
1521 }
1522
1523 if (debug_threads)
1524 fprintf (stderr, "linux_wait ret = %s, %d, %d\n",
1525 target_pid_to_str (lwp->head.id),
1526 ourstatus->kind,
1527 ourstatus->value.sig);
1528
1529 return lwp->head.id;
1530 }
1531
1532 /* Get rid of any pending event in the pipe. */
1533 static void
1534 async_file_flush (void)
1535 {
1536 int ret;
1537 char buf;
1538
1539 do
1540 ret = read (linux_event_pipe[0], &buf, 1);
1541 while (ret >= 0 || (ret == -1 && errno == EINTR));
1542 }
1543
1544 /* Put something in the pipe, so the event loop wakes up. */
1545 static void
1546 async_file_mark (void)
1547 {
1548 int ret;
1549
1550 async_file_flush ();
1551
1552 do
1553 ret = write (linux_event_pipe[1], "+", 1);
1554 while (ret == 0 || (ret == -1 && errno == EINTR));
1555
1556 /* Ignore EAGAIN. If the pipe is full, the event loop will already
1557 be awakened anyway. */
1558 }
1559
1560 static ptid_t
1561 linux_wait (ptid_t ptid,
1562 struct target_waitstatus *ourstatus, int target_options)
1563 {
1564 ptid_t event_ptid;
1565
1566 if (debug_threads)
1567 fprintf (stderr, "linux_wait: [%s]\n", target_pid_to_str (ptid));
1568
1569 /* Flush the async file first. */
1570 if (target_is_async_p ())
1571 async_file_flush ();
1572
1573 event_ptid = linux_wait_1 (ptid, ourstatus, target_options);
1574
1575 /* If at least one stop was reported, there may be more. A single
1576 SIGCHLD can signal more than one child stop. */
1577 if (target_is_async_p ()
1578 && (target_options & TARGET_WNOHANG) != 0
1579 && !ptid_equal (event_ptid, null_ptid))
1580 async_file_mark ();
1581
1582 return event_ptid;
1583 }
1584
1585 /* Send a signal to an LWP. */
1586
1587 static int
1588 kill_lwp (unsigned long lwpid, int signo)
1589 {
1590 /* Use tkill, if possible, in case we are using nptl threads. If tkill
1591 fails, then we are not using nptl threads and we should be using kill. */
1592
1593 #ifdef __NR_tkill
1594 {
1595 static int tkill_failed;
1596
1597 if (!tkill_failed)
1598 {
1599 int ret;
1600
1601 errno = 0;
1602 ret = syscall (__NR_tkill, lwpid, signo);
1603 if (errno != ENOSYS)
1604 return ret;
1605 tkill_failed = 1;
1606 }
1607 }
1608 #endif
1609
1610 return kill (lwpid, signo);
1611 }
1612
1613 static void
1614 send_sigstop (struct inferior_list_entry *entry)
1615 {
1616 struct lwp_info *lwp = (struct lwp_info *) entry;
1617 int pid;
1618
1619 if (lwp->stopped)
1620 return;
1621
1622 pid = lwpid_of (lwp);
1623
1624 /* If we already have a pending stop signal for this process, don't
1625 send another. */
1626 if (lwp->stop_expected)
1627 {
1628 if (debug_threads)
1629 fprintf (stderr, "Have pending sigstop for lwp %d\n", pid);
1630
1631 /* We clear the stop_expected flag so that wait_for_sigstop
1632 will receive the SIGSTOP event (instead of silently resuming and
1633 waiting again). It'll be reset below. */
1634 lwp->stop_expected = 0;
1635 return;
1636 }
1637
1638 if (debug_threads)
1639 fprintf (stderr, "Sending sigstop to lwp %d\n", pid);
1640
1641 kill_lwp (pid, SIGSTOP);
1642 }
1643
1644 static void
1645 mark_lwp_dead (struct lwp_info *lwp, int wstat)
1646 {
1647 /* It's dead, really. */
1648 lwp->dead = 1;
1649
1650 /* Store the exit status for later. */
1651 lwp->status_pending_p = 1;
1652 lwp->status_pending = wstat;
1653
1654 /* So that check_removed_breakpoint doesn't try to figure out if
1655 this is stopped at a breakpoint. */
1656 lwp->pending_is_breakpoint = 0;
1657
1658 /* Prevent trying to stop it. */
1659 lwp->stopped = 1;
1660
1661 /* No further stops are expected from a dead lwp. */
1662 lwp->stop_expected = 0;
1663 }
1664
1665 static void
1666 wait_for_sigstop (struct inferior_list_entry *entry)
1667 {
1668 struct lwp_info *lwp = (struct lwp_info *) entry;
1669 struct thread_info *saved_inferior;
1670 int wstat;
1671 ptid_t saved_tid;
1672 ptid_t ptid;
1673
1674 if (lwp->stopped)
1675 return;
1676
1677 saved_inferior = current_inferior;
1678 if (saved_inferior != NULL)
1679 saved_tid = ((struct inferior_list_entry *) saved_inferior)->id;
1680 else
1681 saved_tid = null_ptid; /* avoid bogus unused warning */
1682
1683 ptid = lwp->head.id;
1684
1685 linux_wait_for_event (ptid, &wstat, __WALL);
1686
1687 /* If we stopped with a non-SIGSTOP signal, save it for later
1688 and record the pending SIGSTOP. If the process exited, just
1689 return. */
1690 if (WIFSTOPPED (wstat)
1691 && WSTOPSIG (wstat) != SIGSTOP)
1692 {
1693 if (debug_threads)
1694 fprintf (stderr, "LWP %ld stopped with non-sigstop status %06x\n",
1695 lwpid_of (lwp), wstat);
1696
1697 /* Do not leave a pending single-step finish to be reported to
1698 the client. The client will give us a new action for this
1699 thread, possibly a continue request --- otherwise, the client
1700 would consider this pending SIGTRAP reported later a spurious
1701 signal. */
1702 if (WSTOPSIG (wstat) == SIGTRAP
1703 && lwp->stepping
1704 && !linux_stopped_by_watchpoint ())
1705 {
1706 if (debug_threads)
1707 fprintf (stderr, " single-step SIGTRAP ignored\n");
1708 }
1709 else
1710 {
1711 lwp->status_pending_p = 1;
1712 lwp->status_pending = wstat;
1713 }
1714 lwp->stop_expected = 1;
1715 }
1716 else if (!WIFSTOPPED (wstat))
1717 {
1718 if (debug_threads)
1719 fprintf (stderr, "Process %ld exited while stopping LWPs\n",
1720 lwpid_of (lwp));
1721
1722 /* Leave this status pending for the next time we're able to
1723 report it. In the mean time, we'll report this lwp as dead
1724 to GDB, so GDB doesn't try to read registers and memory from
1725 it. */
1726 mark_lwp_dead (lwp, wstat);
1727 }
1728
1729 if (saved_inferior == NULL || linux_thread_alive (saved_tid))
1730 current_inferior = saved_inferior;
1731 else
1732 {
1733 if (debug_threads)
1734 fprintf (stderr, "Previously current thread died.\n");
1735
1736 if (non_stop)
1737 {
1738 /* We can't change the current inferior behind GDB's back,
1739 otherwise, a subsequent command may apply to the wrong
1740 process. */
1741 current_inferior = NULL;
1742 }
1743 else
1744 {
1745 /* Set a valid thread as current. */
1746 set_desired_inferior (0);
1747 }
1748 }
1749 }
1750
1751 static void
1752 stop_all_lwps (void)
1753 {
1754 stopping_threads = 1;
1755 for_each_inferior (&all_lwps, send_sigstop);
1756 for_each_inferior (&all_lwps, wait_for_sigstop);
1757 stopping_threads = 0;
1758 }
1759
1760 /* Resume execution of the inferior process.
1761 If STEP is nonzero, single-step it.
1762 If SIGNAL is nonzero, give it that signal. */
1763
1764 static void
1765 linux_resume_one_lwp (struct lwp_info *lwp,
1766 int step, int signal, siginfo_t *info)
1767 {
1768 struct thread_info *saved_inferior;
1769
1770 if (lwp->stopped == 0)
1771 return;
1772
1773 /* If we have pending signals or status, and a new signal, enqueue the
1774 signal. Also enqueue the signal if we are waiting to reinsert a
1775 breakpoint; it will be picked up again below. */
1776 if (signal != 0
1777 && (lwp->status_pending_p || lwp->pending_signals != NULL
1778 || lwp->bp_reinsert != 0))
1779 {
1780 struct pending_signals *p_sig;
1781 p_sig = xmalloc (sizeof (*p_sig));
1782 p_sig->prev = lwp->pending_signals;
1783 p_sig->signal = signal;
1784 if (info == NULL)
1785 memset (&p_sig->info, 0, sizeof (siginfo_t));
1786 else
1787 memcpy (&p_sig->info, info, sizeof (siginfo_t));
1788 lwp->pending_signals = p_sig;
1789 }
1790
1791 if (lwp->status_pending_p && !check_removed_breakpoint (lwp))
1792 return;
1793
1794 saved_inferior = current_inferior;
1795 current_inferior = get_lwp_thread (lwp);
1796
1797 if (debug_threads)
1798 fprintf (stderr, "Resuming lwp %ld (%s, signal %d, stop %s)\n",
1799 lwpid_of (lwp), step ? "step" : "continue", signal,
1800 lwp->stop_expected ? "expected" : "not expected");
1801
1802 /* This bit needs some thinking about. If we get a signal that
1803 we must report while a single-step reinsert is still pending,
1804 we often end up resuming the thread. It might be better to
1805 (ew) allow a stack of pending events; then we could be sure that
1806 the reinsert happened right away and not lose any signals.
1807
1808 Making this stack would also shrink the window in which breakpoints are
1809 uninserted (see comment in linux_wait_for_lwp) but not enough for
1810 complete correctness, so it won't solve that problem. It may be
1811 worthwhile just to solve this one, however. */
1812 if (lwp->bp_reinsert != 0)
1813 {
1814 if (debug_threads)
1815 fprintf (stderr, " pending reinsert at %08lx", (long)lwp->bp_reinsert);
1816 if (step == 0)
1817 fprintf (stderr, "BAD - reinserting but not stepping.\n");
1818 step = 1;
1819
1820 /* Postpone any pending signal. It was enqueued above. */
1821 signal = 0;
1822 }
1823
1824 check_removed_breakpoint (lwp);
1825
1826 if (debug_threads && the_low_target.get_pc != NULL)
1827 {
1828 CORE_ADDR pc = (*the_low_target.get_pc) ();
1829 fprintf (stderr, " resuming from pc 0x%lx\n", (long) pc);
1830 }
1831
1832 /* If we have pending signals, consume one unless we are trying to reinsert
1833 a breakpoint. */
1834 if (lwp->pending_signals != NULL && lwp->bp_reinsert == 0)
1835 {
1836 struct pending_signals **p_sig;
1837
1838 p_sig = &lwp->pending_signals;
1839 while ((*p_sig)->prev != NULL)
1840 p_sig = &(*p_sig)->prev;
1841
1842 signal = (*p_sig)->signal;
1843 if ((*p_sig)->info.si_signo != 0)
1844 ptrace (PTRACE_SETSIGINFO, lwpid_of (lwp), 0, &(*p_sig)->info);
1845
1846 free (*p_sig);
1847 *p_sig = NULL;
1848 }
1849
1850 if (the_low_target.prepare_to_resume != NULL)
1851 the_low_target.prepare_to_resume (lwp);
1852
1853 regcache_invalidate_one ((struct inferior_list_entry *)
1854 get_lwp_thread (lwp));
1855 errno = 0;
1856 lwp->stopped = 0;
1857 lwp->stepping = step;
1858 ptrace (step ? PTRACE_SINGLESTEP : PTRACE_CONT, lwpid_of (lwp), 0, signal);
1859
1860 current_inferior = saved_inferior;
1861 if (errno)
1862 {
1863 /* ESRCH from ptrace either means that the thread was already
1864 running (an error) or that it is gone (a race condition). If
1865 it's gone, we will get a notification the next time we wait,
1866 so we can ignore the error. We could differentiate these
1867 two, but it's tricky without waiting; the thread still exists
1868 as a zombie, so sending it signal 0 would succeed. So just
1869 ignore ESRCH. */
1870 if (errno == ESRCH)
1871 return;
1872
1873 perror_with_name ("ptrace");
1874 }
1875 }
1876
1877 struct thread_resume_array
1878 {
1879 struct thread_resume *resume;
1880 size_t n;
1881 };
1882
1883 /* This function is called once per thread. We look up the thread
1884 in RESUME_PTR, and mark the thread with a pointer to the appropriate
1885 resume request.
1886
1887 This algorithm is O(threads * resume elements), but resume elements
1888 is small (and will remain small at least until GDB supports thread
1889 suspension). */
1890 static int
1891 linux_set_resume_request (struct inferior_list_entry *entry, void *arg)
1892 {
1893 struct lwp_info *lwp;
1894 struct thread_info *thread;
1895 int ndx;
1896 struct thread_resume_array *r;
1897
1898 thread = (struct thread_info *) entry;
1899 lwp = get_thread_lwp (thread);
1900 r = arg;
1901
1902 for (ndx = 0; ndx < r->n; ndx++)
1903 {
1904 ptid_t ptid = r->resume[ndx].thread;
1905 if (ptid_equal (ptid, minus_one_ptid)
1906 || ptid_equal (ptid, entry->id)
1907 || (ptid_is_pid (ptid)
1908 && (ptid_get_pid (ptid) == pid_of (lwp)))
1909 || (ptid_get_lwp (ptid) == -1
1910 && (ptid_get_pid (ptid) == pid_of (lwp))))
1911 {
1912 lwp->resume = &r->resume[ndx];
1913 return 0;
1914 }
1915 }
1916
1917 /* No resume action for this thread. */
1918 lwp->resume = NULL;
1919
1920 return 0;
1921 }
1922
1923
1924 /* Set *FLAG_P if this lwp has an interesting status pending. */
1925 static int
1926 resume_status_pending_p (struct inferior_list_entry *entry, void *flag_p)
1927 {
1928 struct lwp_info *lwp = (struct lwp_info *) entry;
1929
1930 /* LWPs which will not be resumed are not interesting, because
1931 we might not wait for them next time through linux_wait. */
1932 if (lwp->resume == NULL)
1933 return 0;
1934
1935 /* If this thread has a removed breakpoint, we won't have any
1936 events to report later, so check now. check_removed_breakpoint
1937 may clear status_pending_p. We avoid calling check_removed_breakpoint
1938 for any thread that we are not otherwise going to resume - this
1939 lets us preserve stopped status when two threads hit a breakpoint.
1940 GDB removes the breakpoint to single-step a particular thread
1941 past it, then re-inserts it and resumes all threads. We want
1942 to report the second thread without resuming it in the interim. */
1943 if (lwp->status_pending_p)
1944 check_removed_breakpoint (lwp);
1945
1946 if (lwp->status_pending_p)
1947 * (int *) flag_p = 1;
1948
1949 return 0;
1950 }
1951
1952 /* This function is called once per thread. We check the thread's resume
1953 request, which will tell us whether to resume, step, or leave the thread
1954 stopped; and what signal, if any, it should be sent.
1955
1956 For threads which we aren't explicitly told otherwise, we preserve
1957 the stepping flag; this is used for stepping over gdbserver-placed
1958 breakpoints.
1959
1960 If pending_flags was set in any thread, we queue any needed
1961 signals, since we won't actually resume. We already have a pending
1962 event to report, so we don't need to preserve any step requests;
1963 they should be re-issued if necessary. */
1964
1965 static int
1966 linux_resume_one_thread (struct inferior_list_entry *entry, void *arg)
1967 {
1968 struct lwp_info *lwp;
1969 struct thread_info *thread;
1970 int step;
1971 int pending_flag = * (int *) arg;
1972
1973 thread = (struct thread_info *) entry;
1974 lwp = get_thread_lwp (thread);
1975
1976 if (lwp->resume == NULL)
1977 return 0;
1978
1979 if (lwp->resume->kind == resume_stop)
1980 {
1981 if (debug_threads)
1982 fprintf (stderr, "suspending LWP %ld\n", lwpid_of (lwp));
1983
1984 if (!lwp->stopped)
1985 {
1986 if (debug_threads)
1987 fprintf (stderr, "running -> suspending LWP %ld\n", lwpid_of (lwp));
1988
1989 lwp->suspended = 1;
1990 send_sigstop (&lwp->head);
1991 }
1992 else
1993 {
1994 if (debug_threads)
1995 {
1996 if (lwp->suspended)
1997 fprintf (stderr, "already stopped/suspended LWP %ld\n",
1998 lwpid_of (lwp));
1999 else
2000 fprintf (stderr, "already stopped/not suspended LWP %ld\n",
2001 lwpid_of (lwp));
2002 }
2003
2004 /* Make sure we leave the LWP suspended, so we don't try to
2005 resume it without GDB telling us to. FIXME: The LWP may
2006 have been stopped in an internal event that was not meant
2007 to be notified back to GDB (e.g., gdbserver breakpoint),
2008 so we should be reporting a stop event in that case
2009 too. */
2010 lwp->suspended = 1;
2011 }
2012
2013 /* For stop requests, we're done. */
2014 lwp->resume = NULL;
2015 return 0;
2016 }
2017 else
2018 lwp->suspended = 0;
2019
2020 /* If this thread which is about to be resumed has a pending status,
2021 then don't resume any threads - we can just report the pending
2022 status. Make sure to queue any signals that would otherwise be
2023 sent. In all-stop mode, we do this decision based on if *any*
2024 thread has a pending status. */
2025 if (non_stop)
2026 resume_status_pending_p (&lwp->head, &pending_flag);
2027
2028 if (!pending_flag)
2029 {
2030 if (debug_threads)
2031 fprintf (stderr, "resuming LWP %ld\n", lwpid_of (lwp));
2032
2033 if (ptid_equal (lwp->resume->thread, minus_one_ptid)
2034 && lwp->stepping
2035 && lwp->pending_is_breakpoint)
2036 step = 1;
2037 else
2038 step = (lwp->resume->kind == resume_step);
2039
2040 linux_resume_one_lwp (lwp, step, lwp->resume->sig, NULL);
2041 }
2042 else
2043 {
2044 if (debug_threads)
2045 fprintf (stderr, "leaving LWP %ld stopped\n", lwpid_of (lwp));
2046
2047 /* If we have a new signal, enqueue the signal. */
2048 if (lwp->resume->sig != 0)
2049 {
2050 struct pending_signals *p_sig;
2051 p_sig = xmalloc (sizeof (*p_sig));
2052 p_sig->prev = lwp->pending_signals;
2053 p_sig->signal = lwp->resume->sig;
2054 memset (&p_sig->info, 0, sizeof (siginfo_t));
2055
2056 /* If this is the same signal we were previously stopped by,
2057 make sure to queue its siginfo. We can ignore the return
2058 value of ptrace; if it fails, we'll skip
2059 PTRACE_SETSIGINFO. */
2060 if (WIFSTOPPED (lwp->last_status)
2061 && WSTOPSIG (lwp->last_status) == lwp->resume->sig)
2062 ptrace (PTRACE_GETSIGINFO, lwpid_of (lwp), 0, &p_sig->info);
2063
2064 lwp->pending_signals = p_sig;
2065 }
2066 }
2067
2068 lwp->resume = NULL;
2069 return 0;
2070 }
2071
2072 static void
2073 linux_resume (struct thread_resume *resume_info, size_t n)
2074 {
2075 int pending_flag;
2076 struct thread_resume_array array = { resume_info, n };
2077
2078 find_inferior (&all_threads, linux_set_resume_request, &array);
2079
2080 /* If there is a thread which would otherwise be resumed, which
2081 has a pending status, then don't resume any threads - we can just
2082 report the pending status. Make sure to queue any signals
2083 that would otherwise be sent. In non-stop mode, we'll apply this
2084 logic to each thread individually. */
2085 pending_flag = 0;
2086 if (!non_stop)
2087 find_inferior (&all_lwps, resume_status_pending_p, &pending_flag);
2088
2089 if (debug_threads)
2090 {
2091 if (pending_flag)
2092 fprintf (stderr, "Not resuming, pending status\n");
2093 else
2094 fprintf (stderr, "Resuming, no pending status\n");
2095 }
2096
2097 find_inferior (&all_threads, linux_resume_one_thread, &pending_flag);
2098 }
2099
2100 #ifdef HAVE_LINUX_USRREGS
2101
2102 int
2103 register_addr (int regnum)
2104 {
2105 int addr;
2106
2107 if (regnum < 0 || regnum >= the_low_target.num_regs)
2108 error ("Invalid register number %d.", regnum);
2109
2110 addr = the_low_target.regmap[regnum];
2111
2112 return addr;
2113 }
2114
2115 /* Fetch one register. */
2116 static void
2117 fetch_register (int regno)
2118 {
2119 CORE_ADDR regaddr;
2120 int i, size;
2121 char *buf;
2122 int pid;
2123
2124 if (regno >= the_low_target.num_regs)
2125 return;
2126 if ((*the_low_target.cannot_fetch_register) (regno))
2127 return;
2128
2129 regaddr = register_addr (regno);
2130 if (regaddr == -1)
2131 return;
2132
2133 pid = lwpid_of (get_thread_lwp (current_inferior));
2134 size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
2135 & - sizeof (PTRACE_XFER_TYPE));
2136 buf = alloca (size);
2137 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
2138 {
2139 errno = 0;
2140 *(PTRACE_XFER_TYPE *) (buf + i) =
2141 ptrace (PTRACE_PEEKUSER, pid, (PTRACE_ARG3_TYPE) regaddr, 0);
2142 regaddr += sizeof (PTRACE_XFER_TYPE);
2143 if (errno != 0)
2144 {
2145 /* Warning, not error, in case we are attached; sometimes the
2146 kernel doesn't let us at the registers. */
2147 char *err = strerror (errno);
2148 char *msg = alloca (strlen (err) + 128);
2149 sprintf (msg, "reading register %d: %s", regno, err);
2150 error (msg);
2151 goto error_exit;
2152 }
2153 }
2154
2155 if (the_low_target.supply_ptrace_register)
2156 the_low_target.supply_ptrace_register (regno, buf);
2157 else
2158 supply_register (regno, buf);
2159
2160 error_exit:;
2161 }
2162
2163 /* Fetch all registers, or just one, from the child process. */
2164 static void
2165 usr_fetch_inferior_registers (int regno)
2166 {
2167 if (regno == -1)
2168 for (regno = 0; regno < the_low_target.num_regs; regno++)
2169 fetch_register (regno);
2170 else
2171 fetch_register (regno);
2172 }
2173
2174 /* Store our register values back into the inferior.
2175 If REGNO is -1, do this for all registers.
2176 Otherwise, REGNO specifies which register (so we can save time). */
2177 static void
2178 usr_store_inferior_registers (int regno)
2179 {
2180 CORE_ADDR regaddr;
2181 int i, size;
2182 char *buf;
2183 int pid;
2184
2185 if (regno >= 0)
2186 {
2187 if (regno >= the_low_target.num_regs)
2188 return;
2189
2190 if ((*the_low_target.cannot_store_register) (regno) == 1)
2191 return;
2192
2193 regaddr = register_addr (regno);
2194 if (regaddr == -1)
2195 return;
2196 errno = 0;
2197 size = (register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
2198 & - sizeof (PTRACE_XFER_TYPE);
2199 buf = alloca (size);
2200 memset (buf, 0, size);
2201
2202 if (the_low_target.collect_ptrace_register)
2203 the_low_target.collect_ptrace_register (regno, buf);
2204 else
2205 collect_register (regno, buf);
2206
2207 pid = lwpid_of (get_thread_lwp (current_inferior));
2208 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
2209 {
2210 errno = 0;
2211 ptrace (PTRACE_POKEUSER, pid, (PTRACE_ARG3_TYPE) regaddr,
2212 *(PTRACE_XFER_TYPE *) (buf + i));
2213 if (errno != 0)
2214 {
2215 /* At this point, ESRCH should mean the process is
2216 already gone, in which case we simply ignore attempts
2217 to change its registers. See also the related
2218 comment in linux_resume_one_lwp. */
2219 if (errno == ESRCH)
2220 return;
2221
2222 if ((*the_low_target.cannot_store_register) (regno) == 0)
2223 {
2224 char *err = strerror (errno);
2225 char *msg = alloca (strlen (err) + 128);
2226 sprintf (msg, "writing register %d: %s",
2227 regno, err);
2228 error (msg);
2229 return;
2230 }
2231 }
2232 regaddr += sizeof (PTRACE_XFER_TYPE);
2233 }
2234 }
2235 else
2236 for (regno = 0; regno < the_low_target.num_regs; regno++)
2237 usr_store_inferior_registers (regno);
2238 }
2239 #endif /* HAVE_LINUX_USRREGS */
2240
2241
2242
2243 #ifdef HAVE_LINUX_REGSETS
2244
2245 static int
2246 regsets_fetch_inferior_registers ()
2247 {
2248 struct regset_info *regset;
2249 int saw_general_regs = 0;
2250 int pid;
2251
2252 regset = target_regsets;
2253
2254 pid = lwpid_of (get_thread_lwp (current_inferior));
2255 while (regset->size >= 0)
2256 {
2257 void *buf;
2258 int res;
2259
2260 if (regset->size == 0 || disabled_regsets[regset - target_regsets])
2261 {
2262 regset ++;
2263 continue;
2264 }
2265
2266 buf = xmalloc (regset->size);
2267 #ifndef __sparc__
2268 res = ptrace (regset->get_request, pid, 0, buf);
2269 #else
2270 res = ptrace (regset->get_request, pid, buf, 0);
2271 #endif
2272 if (res < 0)
2273 {
2274 if (errno == EIO)
2275 {
2276 /* If we get EIO on a regset, do not try it again for
2277 this process. */
2278 disabled_regsets[regset - target_regsets] = 1;
2279 free (buf);
2280 continue;
2281 }
2282 else
2283 {
2284 char s[256];
2285 sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%d",
2286 pid);
2287 perror (s);
2288 }
2289 }
2290 else if (regset->type == GENERAL_REGS)
2291 saw_general_regs = 1;
2292 regset->store_function (buf);
2293 regset ++;
2294 free (buf);
2295 }
2296 if (saw_general_regs)
2297 return 0;
2298 else
2299 return 1;
2300 }
2301
2302 static int
2303 regsets_store_inferior_registers ()
2304 {
2305 struct regset_info *regset;
2306 int saw_general_regs = 0;
2307 int pid;
2308
2309 regset = target_regsets;
2310
2311 pid = lwpid_of (get_thread_lwp (current_inferior));
2312 while (regset->size >= 0)
2313 {
2314 void *buf;
2315 int res;
2316
2317 if (regset->size == 0 || disabled_regsets[regset - target_regsets])
2318 {
2319 regset ++;
2320 continue;
2321 }
2322
2323 buf = xmalloc (regset->size);
2324
2325 /* First fill the buffer with the current register set contents,
2326 in case there are any items in the kernel's regset that are
2327 not in gdbserver's regcache. */
2328 #ifndef __sparc__
2329 res = ptrace (regset->get_request, pid, 0, buf);
2330 #else
2331 res = ptrace (regset->get_request, pid, buf, 0);
2332 #endif
2333
2334 if (res == 0)
2335 {
2336 /* Then overlay our cached registers on that. */
2337 regset->fill_function (buf);
2338
2339 /* Only now do we write the register set. */
2340 #ifndef __sparc__
2341 res = ptrace (regset->set_request, pid, 0, buf);
2342 #else
2343 res = ptrace (regset->set_request, pid, buf, 0);
2344 #endif
2345 }
2346
2347 if (res < 0)
2348 {
2349 if (errno == EIO)
2350 {
2351 /* If we get EIO on a regset, do not try it again for
2352 this process. */
2353 disabled_regsets[regset - target_regsets] = 1;
2354 free (buf);
2355 continue;
2356 }
2357 else if (errno == ESRCH)
2358 {
2359 /* At this point, ESRCH should mean the process is
2360 already gone, in which case we simply ignore attempts
2361 to change its registers. See also the related
2362 comment in linux_resume_one_lwp. */
2363 free (buf);
2364 return 0;
2365 }
2366 else
2367 {
2368 perror ("Warning: ptrace(regsets_store_inferior_registers)");
2369 }
2370 }
2371 else if (regset->type == GENERAL_REGS)
2372 saw_general_regs = 1;
2373 regset ++;
2374 free (buf);
2375 }
2376 if (saw_general_regs)
2377 return 0;
2378 else
2379 return 1;
2380 return 0;
2381 }
2382
2383 #endif /* HAVE_LINUX_REGSETS */
2384
2385
2386 void
2387 linux_fetch_registers (int regno)
2388 {
2389 #ifdef HAVE_LINUX_REGSETS
2390 if (regsets_fetch_inferior_registers () == 0)
2391 return;
2392 #endif
2393 #ifdef HAVE_LINUX_USRREGS
2394 usr_fetch_inferior_registers (regno);
2395 #endif
2396 }
2397
2398 void
2399 linux_store_registers (int regno)
2400 {
2401 #ifdef HAVE_LINUX_REGSETS
2402 if (regsets_store_inferior_registers () == 0)
2403 return;
2404 #endif
2405 #ifdef HAVE_LINUX_USRREGS
2406 usr_store_inferior_registers (regno);
2407 #endif
2408 }
2409
2410
2411 /* Copy LEN bytes from inferior's memory starting at MEMADDR
2412 to debugger memory starting at MYADDR. */
2413
2414 static int
2415 linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
2416 {
2417 register int i;
2418 /* Round starting address down to longword boundary. */
2419 register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
2420 /* Round ending address up; get number of longwords that makes. */
2421 register int count
2422 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
2423 / sizeof (PTRACE_XFER_TYPE);
2424 /* Allocate buffer of that many longwords. */
2425 register PTRACE_XFER_TYPE *buffer
2426 = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
2427 int fd;
2428 char filename[64];
2429 int pid = lwpid_of (get_thread_lwp (current_inferior));
2430
2431 /* Try using /proc. Don't bother for one word. */
2432 if (len >= 3 * sizeof (long))
2433 {
2434 /* We could keep this file open and cache it - possibly one per
2435 thread. That requires some juggling, but is even faster. */
2436 sprintf (filename, "/proc/%d/mem", pid);
2437 fd = open (filename, O_RDONLY | O_LARGEFILE);
2438 if (fd == -1)
2439 goto no_proc;
2440
2441 /* If pread64 is available, use it. It's faster if the kernel
2442 supports it (only one syscall), and it's 64-bit safe even on
2443 32-bit platforms (for instance, SPARC debugging a SPARC64
2444 application). */
2445 #ifdef HAVE_PREAD64
2446 if (pread64 (fd, myaddr, len, memaddr) != len)
2447 #else
2448 if (lseek (fd, memaddr, SEEK_SET) == -1 || read (fd, myaddr, len) != len)
2449 #endif
2450 {
2451 close (fd);
2452 goto no_proc;
2453 }
2454
2455 close (fd);
2456 return 0;
2457 }
2458
2459 no_proc:
2460 /* Read all the longwords */
2461 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
2462 {
2463 errno = 0;
2464 buffer[i] = ptrace (PTRACE_PEEKTEXT, pid, (PTRACE_ARG3_TYPE) addr, 0);
2465 if (errno)
2466 return errno;
2467 }
2468
2469 /* Copy appropriate bytes out of the buffer. */
2470 memcpy (myaddr,
2471 (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
2472 len);
2473
2474 return 0;
2475 }
2476
2477 /* Copy LEN bytes of data from debugger memory at MYADDR
2478 to inferior's memory at MEMADDR.
2479 On failure (cannot write the inferior)
2480 returns the value of errno. */
2481
2482 static int
2483 linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
2484 {
2485 register int i;
2486 /* Round starting address down to longword boundary. */
2487 register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
2488 /* Round ending address up; get number of longwords that makes. */
2489 register int count
2490 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) / sizeof (PTRACE_XFER_TYPE);
2491 /* Allocate buffer of that many longwords. */
2492 register PTRACE_XFER_TYPE *buffer = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
2493 int pid = lwpid_of (get_thread_lwp (current_inferior));
2494
2495 if (debug_threads)
2496 {
2497 /* Dump up to four bytes. */
2498 unsigned int val = * (unsigned int *) myaddr;
2499 if (len == 1)
2500 val = val & 0xff;
2501 else if (len == 2)
2502 val = val & 0xffff;
2503 else if (len == 3)
2504 val = val & 0xffffff;
2505 fprintf (stderr, "Writing %0*x to 0x%08lx\n", 2 * ((len < 4) ? len : 4),
2506 val, (long)memaddr);
2507 }
2508
2509 /* Fill start and end extra bytes of buffer with existing memory data. */
2510
2511 buffer[0] = ptrace (PTRACE_PEEKTEXT, pid, (PTRACE_ARG3_TYPE) addr, 0);
2512
2513 if (count > 1)
2514 {
2515 buffer[count - 1]
2516 = ptrace (PTRACE_PEEKTEXT, pid,
2517 (PTRACE_ARG3_TYPE) (addr + (count - 1)
2518 * sizeof (PTRACE_XFER_TYPE)),
2519 0);
2520 }
2521
2522 /* Copy data to be written over corresponding part of buffer */
2523
2524 memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), myaddr, len);
2525
2526 /* Write the entire buffer. */
2527
2528 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
2529 {
2530 errno = 0;
2531 ptrace (PTRACE_POKETEXT, pid, (PTRACE_ARG3_TYPE) addr, buffer[i]);
2532 if (errno)
2533 return errno;
2534 }
2535
2536 return 0;
2537 }
2538
2539 static int linux_supports_tracefork_flag;
2540
2541 /* Helper functions for linux_test_for_tracefork, called via clone (). */
2542
2543 static int
2544 linux_tracefork_grandchild (void *arg)
2545 {
2546 _exit (0);
2547 }
2548
2549 #define STACK_SIZE 4096
2550
2551 static int
2552 linux_tracefork_child (void *arg)
2553 {
2554 ptrace (PTRACE_TRACEME, 0, 0, 0);
2555 kill (getpid (), SIGSTOP);
2556 #ifdef __ia64__
2557 __clone2 (linux_tracefork_grandchild, arg, STACK_SIZE,
2558 CLONE_VM | SIGCHLD, NULL);
2559 #else
2560 clone (linux_tracefork_grandchild, arg + STACK_SIZE,
2561 CLONE_VM | SIGCHLD, NULL);
2562 #endif
2563 _exit (0);
2564 }
2565
2566 /* Determine if PTRACE_O_TRACEFORK can be used to follow fork events. Make
2567 sure that we can enable the option, and that it had the desired
2568 effect. */
2569
2570 static void
2571 linux_test_for_tracefork (void)
2572 {
2573 int child_pid, ret, status;
2574 long second_pid;
2575 char *stack = xmalloc (STACK_SIZE * 4);
2576
2577 linux_supports_tracefork_flag = 0;
2578
2579 /* Use CLONE_VM instead of fork, to support uClinux (no MMU). */
2580 #ifdef __ia64__
2581 child_pid = __clone2 (linux_tracefork_child, stack, STACK_SIZE,
2582 CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2);
2583 #else
2584 child_pid = clone (linux_tracefork_child, stack + STACK_SIZE,
2585 CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2);
2586 #endif
2587 if (child_pid == -1)
2588 perror_with_name ("clone");
2589
2590 ret = my_waitpid (child_pid, &status, 0);
2591 if (ret == -1)
2592 perror_with_name ("waitpid");
2593 else if (ret != child_pid)
2594 error ("linux_test_for_tracefork: waitpid: unexpected result %d.", ret);
2595 if (! WIFSTOPPED (status))
2596 error ("linux_test_for_tracefork: waitpid: unexpected status %d.", status);
2597
2598 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
2599 if (ret != 0)
2600 {
2601 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
2602 if (ret != 0)
2603 {
2604 warning ("linux_test_for_tracefork: failed to kill child");
2605 return;
2606 }
2607
2608 ret = my_waitpid (child_pid, &status, 0);
2609 if (ret != child_pid)
2610 warning ("linux_test_for_tracefork: failed to wait for killed child");
2611 else if (!WIFSIGNALED (status))
2612 warning ("linux_test_for_tracefork: unexpected wait status 0x%x from "
2613 "killed child", status);
2614
2615 return;
2616 }
2617
2618 ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
2619 if (ret != 0)
2620 warning ("linux_test_for_tracefork: failed to resume child");
2621
2622 ret = my_waitpid (child_pid, &status, 0);
2623
2624 if (ret == child_pid && WIFSTOPPED (status)
2625 && status >> 16 == PTRACE_EVENT_FORK)
2626 {
2627 second_pid = 0;
2628 ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
2629 if (ret == 0 && second_pid != 0)
2630 {
2631 int second_status;
2632
2633 linux_supports_tracefork_flag = 1;
2634 my_waitpid (second_pid, &second_status, 0);
2635 ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
2636 if (ret != 0)
2637 warning ("linux_test_for_tracefork: failed to kill second child");
2638 my_waitpid (second_pid, &status, 0);
2639 }
2640 }
2641 else
2642 warning ("linux_test_for_tracefork: unexpected result from waitpid "
2643 "(%d, status 0x%x)", ret, status);
2644
2645 do
2646 {
2647 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
2648 if (ret != 0)
2649 warning ("linux_test_for_tracefork: failed to kill child");
2650 my_waitpid (child_pid, &status, 0);
2651 }
2652 while (WIFSTOPPED (status));
2653
2654 free (stack);
2655 }
2656
2657
2658 static void
2659 linux_look_up_symbols (void)
2660 {
2661 #ifdef USE_THREAD_DB
2662 struct process_info *proc = current_process ();
2663
2664 if (proc->private->thread_db != NULL)
2665 return;
2666
2667 thread_db_init (!linux_supports_tracefork_flag);
2668 #endif
2669 }
2670
2671 static void
2672 linux_request_interrupt (void)
2673 {
2674 extern unsigned long signal_pid;
2675
2676 if (!ptid_equal (cont_thread, null_ptid)
2677 && !ptid_equal (cont_thread, minus_one_ptid))
2678 {
2679 struct lwp_info *lwp;
2680 int lwpid;
2681
2682 lwp = get_thread_lwp (current_inferior);
2683 lwpid = lwpid_of (lwp);
2684 kill_lwp (lwpid, SIGINT);
2685 }
2686 else
2687 kill_lwp (signal_pid, SIGINT);
2688 }
2689
2690 /* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
2691 to debugger memory starting at MYADDR. */
2692
2693 static int
2694 linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
2695 {
2696 char filename[PATH_MAX];
2697 int fd, n;
2698 int pid = lwpid_of (get_thread_lwp (current_inferior));
2699
2700 snprintf (filename, sizeof filename, "/proc/%d/auxv", pid);
2701
2702 fd = open (filename, O_RDONLY);
2703 if (fd < 0)
2704 return -1;
2705
2706 if (offset != (CORE_ADDR) 0
2707 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
2708 n = -1;
2709 else
2710 n = read (fd, myaddr, len);
2711
2712 close (fd);
2713
2714 return n;
2715 }
2716
2717 /* These breakpoint and watchpoint related wrapper functions simply
2718 pass on the function call if the target has registered a
2719 corresponding function. */
2720
2721 static int
2722 linux_insert_point (char type, CORE_ADDR addr, int len)
2723 {
2724 if (the_low_target.insert_point != NULL)
2725 return the_low_target.insert_point (type, addr, len);
2726 else
2727 /* Unsupported (see target.h). */
2728 return 1;
2729 }
2730
2731 static int
2732 linux_remove_point (char type, CORE_ADDR addr, int len)
2733 {
2734 if (the_low_target.remove_point != NULL)
2735 return the_low_target.remove_point (type, addr, len);
2736 else
2737 /* Unsupported (see target.h). */
2738 return 1;
2739 }
2740
2741 static int
2742 linux_stopped_by_watchpoint (void)
2743 {
2744 if (the_low_target.stopped_by_watchpoint != NULL)
2745 return the_low_target.stopped_by_watchpoint ();
2746 else
2747 return 0;
2748 }
2749
2750 static CORE_ADDR
2751 linux_stopped_data_address (void)
2752 {
2753 if (the_low_target.stopped_data_address != NULL)
2754 return the_low_target.stopped_data_address ();
2755 else
2756 return 0;
2757 }
2758
2759 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
2760 #if defined(__mcoldfire__)
2761 /* These should really be defined in the kernel's ptrace.h header. */
2762 #define PT_TEXT_ADDR 49*4
2763 #define PT_DATA_ADDR 50*4
2764 #define PT_TEXT_END_ADDR 51*4
2765 #endif
2766
2767 /* Under uClinux, programs are loaded at non-zero offsets, which we need
2768 to tell gdb about. */
2769
2770 static int
2771 linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
2772 {
2773 #if defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) && defined(PT_TEXT_END_ADDR)
2774 unsigned long text, text_end, data;
2775 int pid = lwpid_of (get_thread_lwp (current_inferior));
2776
2777 errno = 0;
2778
2779 text = ptrace (PTRACE_PEEKUSER, pid, (long)PT_TEXT_ADDR, 0);
2780 text_end = ptrace (PTRACE_PEEKUSER, pid, (long)PT_TEXT_END_ADDR, 0);
2781 data = ptrace (PTRACE_PEEKUSER, pid, (long)PT_DATA_ADDR, 0);
2782
2783 if (errno == 0)
2784 {
2785 /* Both text and data offsets produced at compile-time (and so
2786 used by gdb) are relative to the beginning of the program,
2787 with the data segment immediately following the text segment.
2788 However, the actual runtime layout in memory may put the data
2789 somewhere else, so when we send gdb a data base-address, we
2790 use the real data base address and subtract the compile-time
2791 data base-address from it (which is just the length of the
2792 text segment). BSS immediately follows data in both
2793 cases. */
2794 *text_p = text;
2795 *data_p = data - (text_end - text);
2796
2797 return 1;
2798 }
2799 #endif
2800 return 0;
2801 }
2802 #endif
2803
2804 static int
2805 linux_qxfer_osdata (const char *annex,
2806 unsigned char *readbuf, unsigned const char *writebuf,
2807 CORE_ADDR offset, int len)
2808 {
2809 /* We make the process list snapshot when the object starts to be
2810 read. */
2811 static const char *buf;
2812 static long len_avail = -1;
2813 static struct buffer buffer;
2814
2815 DIR *dirp;
2816
2817 if (strcmp (annex, "processes") != 0)
2818 return 0;
2819
2820 if (!readbuf || writebuf)
2821 return 0;
2822
2823 if (offset == 0)
2824 {
2825 if (len_avail != -1 && len_avail != 0)
2826 buffer_free (&buffer);
2827 len_avail = 0;
2828 buf = NULL;
2829 buffer_init (&buffer);
2830 buffer_grow_str (&buffer, "<osdata type=\"processes\">");
2831
2832 dirp = opendir ("/proc");
2833 if (dirp)
2834 {
2835 struct dirent *dp;
2836 while ((dp = readdir (dirp)) != NULL)
2837 {
2838 struct stat statbuf;
2839 char procentry[sizeof ("/proc/4294967295")];
2840
2841 if (!isdigit (dp->d_name[0])
2842 || strlen (dp->d_name) > sizeof ("4294967295") - 1)
2843 continue;
2844
2845 sprintf (procentry, "/proc/%s", dp->d_name);
2846 if (stat (procentry, &statbuf) == 0
2847 && S_ISDIR (statbuf.st_mode))
2848 {
2849 char pathname[128];
2850 FILE *f;
2851 char cmd[MAXPATHLEN + 1];
2852 struct passwd *entry;
2853
2854 sprintf (pathname, "/proc/%s/cmdline", dp->d_name);
2855 entry = getpwuid (statbuf.st_uid);
2856
2857 if ((f = fopen (pathname, "r")) != NULL)
2858 {
2859 size_t len = fread (cmd, 1, sizeof (cmd) - 1, f);
2860 if (len > 0)
2861 {
2862 int i;
2863 for (i = 0; i < len; i++)
2864 if (cmd[i] == '\0')
2865 cmd[i] = ' ';
2866 cmd[len] = '\0';
2867
2868 buffer_xml_printf (
2869 &buffer,
2870 "<item>"
2871 "<column name=\"pid\">%s</column>"
2872 "<column name=\"user\">%s</column>"
2873 "<column name=\"command\">%s</column>"
2874 "</item>",
2875 dp->d_name,
2876 entry ? entry->pw_name : "?",
2877 cmd);
2878 }
2879 fclose (f);
2880 }
2881 }
2882 }
2883
2884 closedir (dirp);
2885 }
2886 buffer_grow_str0 (&buffer, "</osdata>\n");
2887 buf = buffer_finish (&buffer);
2888 len_avail = strlen (buf);
2889 }
2890
2891 if (offset >= len_avail)
2892 {
2893 /* Done. Get rid of the data. */
2894 buffer_free (&buffer);
2895 buf = NULL;
2896 len_avail = 0;
2897 return 0;
2898 }
2899
2900 if (len > len_avail - offset)
2901 len = len_avail - offset;
2902 memcpy (readbuf, buf + offset, len);
2903
2904 return len;
2905 }
2906
2907 /* Convert a native/host siginfo object, into/from the siginfo in the
2908 layout of the inferiors' architecture. */
2909
2910 static void
2911 siginfo_fixup (struct siginfo *siginfo, void *inf_siginfo, int direction)
2912 {
2913 int done = 0;
2914
2915 if (the_low_target.siginfo_fixup != NULL)
2916 done = the_low_target.siginfo_fixup (siginfo, inf_siginfo, direction);
2917
2918 /* If there was no callback, or the callback didn't do anything,
2919 then just do a straight memcpy. */
2920 if (!done)
2921 {
2922 if (direction == 1)
2923 memcpy (siginfo, inf_siginfo, sizeof (struct siginfo));
2924 else
2925 memcpy (inf_siginfo, siginfo, sizeof (struct siginfo));
2926 }
2927 }
2928
2929 static int
2930 linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
2931 unsigned const char *writebuf, CORE_ADDR offset, int len)
2932 {
2933 int pid;
2934 struct siginfo siginfo;
2935 char inf_siginfo[sizeof (struct siginfo)];
2936
2937 if (current_inferior == NULL)
2938 return -1;
2939
2940 pid = lwpid_of (get_thread_lwp (current_inferior));
2941
2942 if (debug_threads)
2943 fprintf (stderr, "%s siginfo for lwp %d.\n",
2944 readbuf != NULL ? "Reading" : "Writing",
2945 pid);
2946
2947 if (offset > sizeof (siginfo))
2948 return -1;
2949
2950 if (ptrace (PTRACE_GETSIGINFO, pid, 0, &siginfo) != 0)
2951 return -1;
2952
2953 /* When GDBSERVER is built as a 64-bit application, ptrace writes into
2954 SIGINFO an object with 64-bit layout. Since debugging a 32-bit
2955 inferior with a 64-bit GDBSERVER should look the same as debugging it
2956 with a 32-bit GDBSERVER, we need to convert it. */
2957 siginfo_fixup (&siginfo, inf_siginfo, 0);
2958
2959 if (offset + len > sizeof (siginfo))
2960 len = sizeof (siginfo) - offset;
2961
2962 if (readbuf != NULL)
2963 memcpy (readbuf, inf_siginfo + offset, len);
2964 else
2965 {
2966 memcpy (inf_siginfo + offset, writebuf, len);
2967
2968 /* Convert back to ptrace layout before flushing it out. */
2969 siginfo_fixup (&siginfo, inf_siginfo, 1);
2970
2971 if (ptrace (PTRACE_SETSIGINFO, pid, 0, &siginfo) != 0)
2972 return -1;
2973 }
2974
2975 return len;
2976 }
2977
2978 /* SIGCHLD handler that serves two purposes: In non-stop/async mode,
2979 so we notice when children change state; as the handler for the
2980 sigsuspend in my_waitpid. */
2981
2982 static void
2983 sigchld_handler (int signo)
2984 {
2985 int old_errno = errno;
2986
2987 if (debug_threads)
2988 /* fprintf is not async-signal-safe, so call write directly. */
2989 write (2, "sigchld_handler\n", sizeof ("sigchld_handler\n") - 1);
2990
2991 if (target_is_async_p ())
2992 async_file_mark (); /* trigger a linux_wait */
2993
2994 errno = old_errno;
2995 }
2996
2997 static int
2998 linux_supports_non_stop (void)
2999 {
3000 return 1;
3001 }
3002
3003 static int
3004 linux_async (int enable)
3005 {
3006 int previous = (linux_event_pipe[0] != -1);
3007
3008 if (previous != enable)
3009 {
3010 sigset_t mask;
3011 sigemptyset (&mask);
3012 sigaddset (&mask, SIGCHLD);
3013
3014 sigprocmask (SIG_BLOCK, &mask, NULL);
3015
3016 if (enable)
3017 {
3018 if (pipe (linux_event_pipe) == -1)
3019 fatal ("creating event pipe failed.");
3020
3021 fcntl (linux_event_pipe[0], F_SETFL, O_NONBLOCK);
3022 fcntl (linux_event_pipe[1], F_SETFL, O_NONBLOCK);
3023
3024 /* Register the event loop handler. */
3025 add_file_handler (linux_event_pipe[0],
3026 handle_target_event, NULL);
3027
3028 /* Always trigger a linux_wait. */
3029 async_file_mark ();
3030 }
3031 else
3032 {
3033 delete_file_handler (linux_event_pipe[0]);
3034
3035 close (linux_event_pipe[0]);
3036 close (linux_event_pipe[1]);
3037 linux_event_pipe[0] = -1;
3038 linux_event_pipe[1] = -1;
3039 }
3040
3041 sigprocmask (SIG_UNBLOCK, &mask, NULL);
3042 }
3043
3044 return previous;
3045 }
3046
3047 static int
3048 linux_start_non_stop (int nonstop)
3049 {
3050 /* Register or unregister from event-loop accordingly. */
3051 linux_async (nonstop);
3052 return 0;
3053 }
3054
3055 static int
3056 linux_supports_multi_process (void)
3057 {
3058 return 1;
3059 }
3060
3061
3062 /* Enumerate spufs IDs for process PID. */
3063 static int
3064 spu_enumerate_spu_ids (long pid, unsigned char *buf, CORE_ADDR offset, int len)
3065 {
3066 int pos = 0;
3067 int written = 0;
3068 char path[128];
3069 DIR *dir;
3070 struct dirent *entry;
3071
3072 sprintf (path, "/proc/%ld/fd", pid);
3073 dir = opendir (path);
3074 if (!dir)
3075 return -1;
3076
3077 rewinddir (dir);
3078 while ((entry = readdir (dir)) != NULL)
3079 {
3080 struct stat st;
3081 struct statfs stfs;
3082 int fd;
3083
3084 fd = atoi (entry->d_name);
3085 if (!fd)
3086 continue;
3087
3088 sprintf (path, "/proc/%ld/fd/%d", pid, fd);
3089 if (stat (path, &st) != 0)
3090 continue;
3091 if (!S_ISDIR (st.st_mode))
3092 continue;
3093
3094 if (statfs (path, &stfs) != 0)
3095 continue;
3096 if (stfs.f_type != SPUFS_MAGIC)
3097 continue;
3098
3099 if (pos >= offset && pos + 4 <= offset + len)
3100 {
3101 *(unsigned int *)(buf + pos - offset) = fd;
3102 written += 4;
3103 }
3104 pos += 4;
3105 }
3106
3107 closedir (dir);
3108 return written;
3109 }
3110
3111 /* Implements the to_xfer_partial interface for the TARGET_OBJECT_SPU
3112 object type, using the /proc file system. */
3113 static int
3114 linux_qxfer_spu (const char *annex, unsigned char *readbuf,
3115 unsigned const char *writebuf,
3116 CORE_ADDR offset, int len)
3117 {
3118 long pid = lwpid_of (get_thread_lwp (current_inferior));
3119 char buf[128];
3120 int fd = 0;
3121 int ret = 0;
3122
3123 if (!writebuf && !readbuf)
3124 return -1;
3125
3126 if (!*annex)
3127 {
3128 if (!readbuf)
3129 return -1;
3130 else
3131 return spu_enumerate_spu_ids (pid, readbuf, offset, len);
3132 }
3133
3134 sprintf (buf, "/proc/%ld/fd/%s", pid, annex);
3135 fd = open (buf, writebuf? O_WRONLY : O_RDONLY);
3136 if (fd <= 0)
3137 return -1;
3138
3139 if (offset != 0
3140 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
3141 {
3142 close (fd);
3143 return 0;
3144 }
3145
3146 if (writebuf)
3147 ret = write (fd, writebuf, (size_t) len);
3148 else
3149 ret = read (fd, readbuf, (size_t) len);
3150
3151 close (fd);
3152 return ret;
3153 }
3154
3155 static struct target_ops linux_target_ops = {
3156 linux_create_inferior,
3157 linux_attach,
3158 linux_kill,
3159 linux_detach,
3160 linux_join,
3161 linux_thread_alive,
3162 linux_resume,
3163 linux_wait,
3164 linux_fetch_registers,
3165 linux_store_registers,
3166 linux_read_memory,
3167 linux_write_memory,
3168 linux_look_up_symbols,
3169 linux_request_interrupt,
3170 linux_read_auxv,
3171 linux_insert_point,
3172 linux_remove_point,
3173 linux_stopped_by_watchpoint,
3174 linux_stopped_data_address,
3175 #if defined(__UCLIBC__) && defined(HAS_NOMMU)
3176 linux_read_offsets,
3177 #else
3178 NULL,
3179 #endif
3180 #ifdef USE_THREAD_DB
3181 thread_db_get_tls_address,
3182 #else
3183 NULL,
3184 #endif
3185 linux_qxfer_spu,
3186 hostio_last_error_from_errno,
3187 linux_qxfer_osdata,
3188 linux_xfer_siginfo,
3189 linux_supports_non_stop,
3190 linux_async,
3191 linux_start_non_stop,
3192 linux_supports_multi_process,
3193 #ifdef USE_THREAD_DB
3194 thread_db_handle_monitor_command
3195 #else
3196 NULL
3197 #endif
3198 };
3199
3200 static void
3201 linux_init_signals ()
3202 {
3203 /* FIXME drow/2002-06-09: As above, we should check with LinuxThreads
3204 to find what the cancel signal actually is. */
3205 signal (__SIGRTMIN+1, SIG_IGN);
3206 }
3207
3208 void
3209 initialize_low (void)
3210 {
3211 struct sigaction sigchld_action;
3212 memset (&sigchld_action, 0, sizeof (sigchld_action));
3213 set_target_ops (&linux_target_ops);
3214 set_breakpoint_data (the_low_target.breakpoint,
3215 the_low_target.breakpoint_len);
3216 linux_init_signals ();
3217 linux_test_for_tracefork ();
3218 #ifdef HAVE_LINUX_REGSETS
3219 for (num_regsets = 0; target_regsets[num_regsets].size >= 0; num_regsets++)
3220 ;
3221 disabled_regsets = xmalloc (num_regsets);
3222 #endif
3223
3224 sigchld_action.sa_handler = sigchld_handler;
3225 sigemptyset (&sigchld_action.sa_mask);
3226 sigchld_action.sa_flags = SA_RESTART;
3227 sigaction (SIGCHLD, &sigchld_action, NULL);
3228 }
This page took 0.14535 seconds and 4 git commands to generate.