]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/gdbserver/linux-low.c
Decouple target code from remote protocol.
[thirdparty/binutils-gdb.git] / gdb / gdbserver / linux-low.c
CommitLineData
da6d8c04 1/* Low level interface to ptrace, for the remote server for GDB.
545587ee 2 Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
0fb0cc75 3 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
da6d8c04
DJ
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
da6d8c04
DJ
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
da6d8c04
DJ
19
20#include "server.h"
58caa3dc 21#include "linux-low.h"
da6d8c04 22
58caa3dc 23#include <sys/wait.h>
da6d8c04
DJ
24#include <stdio.h>
25#include <sys/param.h>
da6d8c04 26#include <sys/ptrace.h>
da6d8c04
DJ
27#include <signal.h>
28#include <sys/ioctl.h>
29#include <fcntl.h>
d07c63e7 30#include <string.h>
0a30fbc4
DJ
31#include <stdlib.h>
32#include <unistd.h>
fa6a77dc 33#include <errno.h>
fd500816 34#include <sys/syscall.h>
f9387fc3 35#include <sched.h>
07e059b5
VP
36#include <ctype.h>
37#include <pwd.h>
38#include <sys/types.h>
39#include <dirent.h>
da6d8c04 40
32ca6d61
DJ
41#ifndef PTRACE_GETSIGINFO
42# define PTRACE_GETSIGINFO 0x4202
43# define PTRACE_SETSIGINFO 0x4203
44#endif
45
fd462a61
DJ
46#ifndef O_LARGEFILE
47#define O_LARGEFILE 0
48#endif
49
24a09b5f
DJ
50/* If the system headers did not provide the constants, hard-code the normal
51 values. */
52#ifndef PTRACE_EVENT_FORK
53
54#define PTRACE_SETOPTIONS 0x4200
55#define PTRACE_GETEVENTMSG 0x4201
56
57/* options set using PTRACE_SETOPTIONS */
58#define PTRACE_O_TRACESYSGOOD 0x00000001
59#define PTRACE_O_TRACEFORK 0x00000002
60#define PTRACE_O_TRACEVFORK 0x00000004
61#define PTRACE_O_TRACECLONE 0x00000008
62#define PTRACE_O_TRACEEXEC 0x00000010
63#define PTRACE_O_TRACEVFORKDONE 0x00000020
64#define PTRACE_O_TRACEEXIT 0x00000040
65
66/* Wait extended result codes for the above trace options. */
67#define PTRACE_EVENT_FORK 1
68#define PTRACE_EVENT_VFORK 2
69#define PTRACE_EVENT_CLONE 3
70#define PTRACE_EVENT_EXEC 4
71#define PTRACE_EVENT_VFORK_DONE 5
72#define PTRACE_EVENT_EXIT 6
73
74#endif /* PTRACE_EVENT_FORK */
75
76/* We can't always assume that this flag is available, but all systems
77 with the ptrace event handlers also have __WALL, so it's safe to use
78 in some contexts. */
79#ifndef __WALL
80#define __WALL 0x40000000 /* Wait for any child. */
81#endif
82
42c81e2a
DJ
83#ifdef __UCLIBC__
84#if !(defined(__UCLIBC_HAS_MMU__) || defined(__ARCH_HAS_MMU__))
85#define HAS_NOMMU
86#endif
87#endif
88
24a09b5f
DJ
89/* ``all_threads'' is keyed by the LWP ID, which we use as the GDB protocol
90 representation of the thread ID.
611cb4a5 91
54a0b537 92 ``all_lwps'' is keyed by the process ID - which on Linux is (presently)
0d62e5e8
DJ
93 the same as the LWP ID. */
94
54a0b537 95struct inferior_list all_lwps;
0d62e5e8 96
24a09b5f
DJ
97/* A list of all unknown processes which receive stop signals. Some other
98 process will presumably claim each of these as forked children
99 momentarily. */
100
101struct inferior_list stopped_pids;
102
0d62e5e8
DJ
103/* FIXME this is a bit of a hack, and could be removed. */
104int stopping_threads;
105
106/* FIXME make into a target method? */
24a09b5f
DJ
107int using_threads = 1;
108static int thread_db_active;
109
110static int must_set_ptrace_flags;
0d62e5e8 111
d61ddec4
UW
112/* This flag is true iff we've just created or attached to a new inferior
113 but it has not stopped yet. As soon as it does, we need to call the
114 low target's arch_setup callback. */
115static int new_inferior;
116
54a0b537
PA
117static void linux_resume_one_lwp (struct inferior_list_entry *entry,
118 int step, int signal, siginfo_t *info);
2bd7c093 119static void linux_resume (struct thread_resume *resume_info, size_t n);
54a0b537 120static void stop_all_lwps (void);
0d62e5e8 121static int linux_wait_for_event (struct thread_info *child);
54a0b537
PA
122static int check_removed_breakpoint (struct lwp_info *event_child);
123static void *add_lwp (unsigned long pid);
97438e3f 124static int my_waitpid (int pid, int *status, int flags);
c35fafde 125static int linux_stopped_by_watchpoint (void);
0d62e5e8
DJ
126
127struct pending_signals
128{
129 int signal;
32ca6d61 130 siginfo_t info;
0d62e5e8
DJ
131 struct pending_signals *prev;
132};
611cb4a5 133
d844cde6 134#define PTRACE_ARG3_TYPE long
c6ecbae5 135#define PTRACE_XFER_TYPE long
da6d8c04 136
58caa3dc 137#ifdef HAVE_LINUX_REGSETS
52fa2412
UW
138static char *disabled_regsets;
139static int num_regsets;
58caa3dc
DJ
140#endif
141
0d62e5e8
DJ
142#define pid_of(proc) ((proc)->head.id)
143
144/* FIXME: Delete eventually. */
54a0b537 145#define inferior_pid (pid_of (get_thread_lwp (current_inferior)))
0d62e5e8 146
24a09b5f 147static void
54a0b537 148handle_extended_wait (struct lwp_info *event_child, int wstat)
24a09b5f
DJ
149{
150 int event = wstat >> 16;
54a0b537 151 struct lwp_info *new_lwp;
24a09b5f
DJ
152
153 if (event == PTRACE_EVENT_CLONE)
154 {
155 unsigned long new_pid;
836acd6d 156 int ret, status = W_STOPCODE (SIGSTOP);
24a09b5f
DJ
157
158 ptrace (PTRACE_GETEVENTMSG, inferior_pid, 0, &new_pid);
159
160 /* If we haven't already seen the new PID stop, wait for it now. */
161 if (! pull_pid_from_list (&stopped_pids, new_pid))
162 {
163 /* The new child has a pending SIGSTOP. We can't affect it until it
164 hits the SIGSTOP, but we're already attached. */
165
97438e3f 166 ret = my_waitpid (new_pid, &status, __WALL);
24a09b5f
DJ
167
168 if (ret == -1)
169 perror_with_name ("waiting for new child");
170 else if (ret != new_pid)
171 warning ("wait returned unexpected PID %d", ret);
da5898ce 172 else if (!WIFSTOPPED (status))
24a09b5f
DJ
173 warning ("wait returned unexpected status 0x%x", status);
174 }
175
176 ptrace (PTRACE_SETOPTIONS, new_pid, 0, PTRACE_O_TRACECLONE);
177
54a0b537
PA
178 new_lwp = (struct lwp_info *) add_lwp (new_pid);
179 add_thread (new_pid, new_lwp, new_pid);
180 new_thread_notify (thread_id_to_gdb_id (new_lwp->lwpid));
24a09b5f 181
da5898ce
DJ
182 /* Normally we will get the pending SIGSTOP. But in some cases
183 we might get another signal delivered to the group first.
f21cc1a2 184 If we do get another signal, be sure not to lose it. */
da5898ce
DJ
185 if (WSTOPSIG (status) == SIGSTOP)
186 {
187 if (stopping_threads)
54a0b537 188 new_lwp->stopped = 1;
da5898ce
DJ
189 else
190 ptrace (PTRACE_CONT, new_pid, 0, 0);
191 }
24a09b5f 192 else
da5898ce 193 {
54a0b537 194 new_lwp->stop_expected = 1;
da5898ce
DJ
195 if (stopping_threads)
196 {
54a0b537
PA
197 new_lwp->stopped = 1;
198 new_lwp->status_pending_p = 1;
199 new_lwp->status_pending = status;
da5898ce
DJ
200 }
201 else
202 /* Pass the signal on. This is what GDB does - except
203 shouldn't we really report it instead? */
204 ptrace (PTRACE_CONT, new_pid, 0, WSTOPSIG (status));
205 }
24a09b5f
DJ
206
207 /* Always resume the current thread. If we are stopping
208 threads, it will have a pending SIGSTOP; we may as well
209 collect it now. */
54a0b537
PA
210 linux_resume_one_lwp (&event_child->head,
211 event_child->stepping, 0, NULL);
24a09b5f
DJ
212 }
213}
214
0d62e5e8
DJ
215/* This function should only be called if the process got a SIGTRAP.
216 The SIGTRAP could mean several things.
217
218 On i386, where decr_pc_after_break is non-zero:
219 If we were single-stepping this process using PTRACE_SINGLESTEP,
220 we will get only the one SIGTRAP (even if the instruction we
221 stepped over was a breakpoint). The value of $eip will be the
222 next instruction.
223 If we continue the process using PTRACE_CONT, we will get a
224 SIGTRAP when we hit a breakpoint. The value of $eip will be
225 the instruction after the breakpoint (i.e. needs to be
226 decremented). If we report the SIGTRAP to GDB, we must also
227 report the undecremented PC. If we cancel the SIGTRAP, we
228 must resume at the decremented PC.
229
230 (Presumably, not yet tested) On a non-decr_pc_after_break machine
231 with hardware or kernel single-step:
232 If we single-step over a breakpoint instruction, our PC will
233 point at the following instruction. If we continue and hit a
234 breakpoint instruction, our PC will point at the breakpoint
235 instruction. */
236
237static CORE_ADDR
238get_stop_pc (void)
239{
240 CORE_ADDR stop_pc = (*the_low_target.get_pc) ();
241
54a0b537 242 if (get_thread_lwp (current_inferior)->stepping)
0d62e5e8
DJ
243 return stop_pc;
244 else
245 return stop_pc - the_low_target.decr_pc_after_break;
246}
ce3a066d 247
0d62e5e8 248static void *
54a0b537 249add_lwp (unsigned long pid)
611cb4a5 250{
54a0b537 251 struct lwp_info *lwp;
0d62e5e8 252
54a0b537
PA
253 lwp = (struct lwp_info *) xmalloc (sizeof (*lwp));
254 memset (lwp, 0, sizeof (*lwp));
0d62e5e8 255
54a0b537
PA
256 lwp->head.id = pid;
257 lwp->lwpid = pid;
0d62e5e8 258
54a0b537 259 add_inferior_to_list (&all_lwps, &lwp->head);
0d62e5e8 260
54a0b537 261 return lwp;
0d62e5e8 262}
611cb4a5 263
da6d8c04
DJ
264/* Start an inferior process and returns its pid.
265 ALLARGS is a vector of program-name and args. */
266
ce3a066d
DJ
267static int
268linux_create_inferior (char *program, char **allargs)
da6d8c04 269{
54a0b537 270 void *new_lwp;
da6d8c04
DJ
271 int pid;
272
42c81e2a 273#if defined(__UCLIBC__) && defined(HAS_NOMMU)
52fb6437
NS
274 pid = vfork ();
275#else
da6d8c04 276 pid = fork ();
52fb6437 277#endif
da6d8c04
DJ
278 if (pid < 0)
279 perror_with_name ("fork");
280
281 if (pid == 0)
282 {
283 ptrace (PTRACE_TRACEME, 0, 0, 0);
284
254787d4 285 signal (__SIGRTMIN + 1, SIG_DFL);
0d62e5e8 286
a9fa9f7d
DJ
287 setpgid (0, 0);
288
2b876972
DJ
289 execv (program, allargs);
290 if (errno == ENOENT)
291 execvp (program, allargs);
da6d8c04
DJ
292
293 fprintf (stderr, "Cannot exec %s: %s.\n", program,
d07c63e7 294 strerror (errno));
da6d8c04
DJ
295 fflush (stderr);
296 _exit (0177);
297 }
298
54a0b537
PA
299 new_lwp = add_lwp (pid);
300 add_thread (pid, new_lwp, pid);
24a09b5f 301 must_set_ptrace_flags = 1;
d61ddec4 302 new_inferior = 1;
611cb4a5 303
a9fa9f7d 304 return pid;
da6d8c04
DJ
305}
306
307/* Attach to an inferior process. */
308
0d62e5e8 309void
24a09b5f 310linux_attach_lwp (unsigned long pid)
da6d8c04 311{
54a0b537 312 struct lwp_info *new_lwp;
611cb4a5 313
da6d8c04
DJ
314 if (ptrace (PTRACE_ATTACH, pid, 0, 0) != 0)
315 {
2d717e4f
DJ
316 if (all_threads.head != NULL)
317 {
318 /* If we fail to attach to an LWP, just warn. */
54a0b537 319 fprintf (stderr, "Cannot attach to lwp %ld: %s (%d)\n", pid,
2d717e4f
DJ
320 strerror (errno), errno);
321 fflush (stderr);
322 return;
323 }
324 else
325 /* If we fail to attach to a process, report an error. */
326 error ("Cannot attach to process %ld: %s (%d)\n", pid,
43d5792c 327 strerror (errno), errno);
da6d8c04
DJ
328 }
329
0e21c1ec
DE
330 /* FIXME: This intermittently fails.
331 We need to wait for SIGSTOP first. */
24a09b5f
DJ
332 ptrace (PTRACE_SETOPTIONS, pid, 0, PTRACE_O_TRACECLONE);
333
54a0b537
PA
334 new_lwp = (struct lwp_info *) add_lwp (pid);
335 add_thread (pid, new_lwp, pid);
336 new_thread_notify (thread_id_to_gdb_id (new_lwp->lwpid));
0d62e5e8
DJ
337
338 /* The next time we wait for this LWP we'll see a SIGSTOP as PTRACE_ATTACH
0e21c1ec
DE
339 brings it to a halt.
340
341 There are several cases to consider here:
342
343 1) gdbserver has already attached to the process and is being notified
1b3f6016
PA
344 of a new thread that is being created.
345 In this case we should ignore that SIGSTOP and resume the process.
346 This is handled below by setting stop_expected = 1.
0e21c1ec
DE
347
348 2) This is the first thread (the process thread), and we're attaching
1b3f6016
PA
349 to it via attach_inferior.
350 In this case we want the process thread to stop.
351 This is handled by having linux_attach clear stop_expected after
352 we return.
353 ??? If the process already has several threads we leave the other
354 threads running.
0e21c1ec
DE
355
356 3) GDB is connecting to gdbserver and is requesting an enumeration of all
1b3f6016
PA
357 existing threads.
358 In this case we want the thread to stop.
359 FIXME: This case is currently not properly handled.
360 We should wait for the SIGSTOP but don't. Things work apparently
361 because enough time passes between when we ptrace (ATTACH) and when
362 gdb makes the next ptrace call on the thread.
0d62e5e8
DJ
363
364 On the other hand, if we are currently trying to stop all threads, we
365 should treat the new thread as if we had sent it a SIGSTOP. This works
54a0b537 366 because we are guaranteed that the add_lwp call above added us to the
0e21c1ec
DE
367 end of the list, and so the new thread has not yet reached
368 wait_for_sigstop (but will). */
0d62e5e8 369 if (! stopping_threads)
54a0b537 370 new_lwp->stop_expected = 1;
0d62e5e8
DJ
371}
372
373int
a1928bad 374linux_attach (unsigned long pid)
0d62e5e8 375{
54a0b537 376 struct lwp_info *lwp;
0d62e5e8 377
24a09b5f 378 linux_attach_lwp (pid);
0d62e5e8 379
ae13219e
DJ
380 /* Don't ignore the initial SIGSTOP if we just attached to this process.
381 It will be collected by wait shortly. */
54a0b537
PA
382 lwp = (struct lwp_info *) find_inferior_id (&all_lwps, pid);
383 lwp->stop_expected = 0;
0d62e5e8 384
d61ddec4
UW
385 new_inferior = 1;
386
da6d8c04
DJ
387 return 0;
388}
389
390/* Kill the inferior process. Make us have no inferior. */
391
ce3a066d 392static void
54a0b537 393linux_kill_one_lwp (struct inferior_list_entry *entry)
da6d8c04 394{
0d62e5e8 395 struct thread_info *thread = (struct thread_info *) entry;
54a0b537 396 struct lwp_info *lwp = get_thread_lwp (thread);
0d62e5e8
DJ
397 int wstat;
398
fd500816
DJ
399 /* We avoid killing the first thread here, because of a Linux kernel (at
400 least 2.6.0-test7 through 2.6.8-rc4) bug; if we kill the parent before
401 the children get a chance to be reaped, it will remain a zombie
402 forever. */
403 if (entry == all_threads.head)
404 return;
405
0d62e5e8
DJ
406 do
407 {
54a0b537 408 ptrace (PTRACE_KILL, pid_of (lwp), 0, 0);
0d62e5e8
DJ
409
410 /* Make sure it died. The loop is most likely unnecessary. */
411 wstat = linux_wait_for_event (thread);
412 } while (WIFSTOPPED (wstat));
da6d8c04
DJ
413}
414
0d62e5e8
DJ
415static void
416linux_kill (void)
417{
fd500816 418 struct thread_info *thread = (struct thread_info *) all_threads.head;
54a0b537 419 struct lwp_info *lwp;
fd500816
DJ
420 int wstat;
421
9d606399
DJ
422 if (thread == NULL)
423 return;
424
54a0b537 425 for_each_inferior (&all_threads, linux_kill_one_lwp);
fd500816 426
54a0b537 427 /* See the comment in linux_kill_one_lwp. We did not kill the first
fd500816 428 thread in the list, so do so now. */
54a0b537 429 lwp = get_thread_lwp (thread);
fd500816
DJ
430 do
431 {
54a0b537 432 ptrace (PTRACE_KILL, pid_of (lwp), 0, 0);
fd500816
DJ
433
434 /* Make sure it died. The loop is most likely unnecessary. */
435 wstat = linux_wait_for_event (thread);
436 } while (WIFSTOPPED (wstat));
2d717e4f
DJ
437
438 clear_inferiors ();
54a0b537
PA
439 free (all_lwps.head);
440 all_lwps.head = all_lwps.tail = NULL;
0d62e5e8
DJ
441}
442
6ad8ae5c 443static void
54a0b537 444linux_detach_one_lwp (struct inferior_list_entry *entry)
6ad8ae5c
DJ
445{
446 struct thread_info *thread = (struct thread_info *) entry;
54a0b537 447 struct lwp_info *lwp = get_thread_lwp (thread);
6ad8ae5c 448
ae13219e
DJ
449 /* Make sure the process isn't stopped at a breakpoint that's
450 no longer there. */
54a0b537 451 check_removed_breakpoint (lwp);
ae13219e
DJ
452
453 /* If this process is stopped but is expecting a SIGSTOP, then make
454 sure we take care of that now. This isn't absolutely guaranteed
455 to collect the SIGSTOP, but is fairly likely to. */
54a0b537 456 if (lwp->stop_expected)
ae13219e
DJ
457 {
458 /* Clear stop_expected, so that the SIGSTOP will be reported. */
54a0b537
PA
459 lwp->stop_expected = 0;
460 if (lwp->stopped)
461 linux_resume_one_lwp (&lwp->head, 0, 0, NULL);
ae13219e
DJ
462 linux_wait_for_event (thread);
463 }
464
465 /* Flush any pending changes to the process's registers. */
466 regcache_invalidate_one ((struct inferior_list_entry *)
54a0b537 467 get_lwp_thread (lwp));
ae13219e
DJ
468
469 /* Finally, let it resume. */
54a0b537 470 ptrace (PTRACE_DETACH, pid_of (lwp), 0, 0);
6ad8ae5c
DJ
471}
472
dd6953e1 473static int
6ad8ae5c
DJ
474linux_detach (void)
475{
ae13219e 476 delete_all_breakpoints ();
54a0b537 477 for_each_inferior (&all_threads, linux_detach_one_lwp);
ae13219e 478 clear_inferiors ();
54a0b537
PA
479 free (all_lwps.head);
480 all_lwps.head = all_lwps.tail = NULL;
dd6953e1 481 return 0;
6ad8ae5c
DJ
482}
483
444d6139
PA
484static void
485linux_join (void)
486{
487 extern unsigned long signal_pid;
488 int status, ret;
489
490 do {
491 ret = waitpid (signal_pid, &status, 0);
492 if (WIFEXITED (status) || WIFSIGNALED (status))
493 break;
494 } while (ret != -1 || errno != ECHILD);
495}
496
6ad8ae5c 497/* Return nonzero if the given thread is still alive. */
0d62e5e8 498static int
24a09b5f 499linux_thread_alive (unsigned long lwpid)
0d62e5e8 500{
24a09b5f 501 if (find_inferior_id (&all_threads, lwpid) != NULL)
0d62e5e8
DJ
502 return 1;
503 else
504 return 0;
505}
506
507/* Return nonzero if this process stopped at a breakpoint which
508 no longer appears to be inserted. Also adjust the PC
509 appropriately to resume where the breakpoint used to be. */
ce3a066d 510static int
54a0b537 511check_removed_breakpoint (struct lwp_info *event_child)
da6d8c04 512{
0d62e5e8
DJ
513 CORE_ADDR stop_pc;
514 struct thread_info *saved_inferior;
515
516 if (event_child->pending_is_breakpoint == 0)
517 return 0;
518
519 if (debug_threads)
54a0b537 520 fprintf (stderr, "Checking for breakpoint in lwp %ld.\n",
ae13219e 521 event_child->lwpid);
0d62e5e8
DJ
522
523 saved_inferior = current_inferior;
54a0b537 524 current_inferior = get_lwp_thread (event_child);
0d62e5e8
DJ
525
526 stop_pc = get_stop_pc ();
527
528 /* If the PC has changed since we stopped, then we shouldn't do
529 anything. This happens if, for instance, GDB handled the
530 decr_pc_after_break subtraction itself. */
531 if (stop_pc != event_child->pending_stop_pc)
532 {
533 if (debug_threads)
ae13219e
DJ
534 fprintf (stderr, "Ignoring, PC was changed. Old PC was 0x%08llx\n",
535 event_child->pending_stop_pc);
0d62e5e8
DJ
536
537 event_child->pending_is_breakpoint = 0;
538 current_inferior = saved_inferior;
539 return 0;
540 }
541
542 /* If the breakpoint is still there, we will report hitting it. */
543 if ((*the_low_target.breakpoint_at) (stop_pc))
544 {
545 if (debug_threads)
546 fprintf (stderr, "Ignoring, breakpoint is still present.\n");
547 current_inferior = saved_inferior;
548 return 0;
549 }
550
551 if (debug_threads)
552 fprintf (stderr, "Removed breakpoint.\n");
553
554 /* For decr_pc_after_break targets, here is where we perform the
555 decrement. We go immediately from this function to resuming,
556 and can not safely call get_stop_pc () again. */
557 if (the_low_target.set_pc != NULL)
558 (*the_low_target.set_pc) (stop_pc);
559
560 /* We consumed the pending SIGTRAP. */
5544ad89 561 event_child->pending_is_breakpoint = 0;
0d62e5e8
DJ
562 event_child->status_pending_p = 0;
563 event_child->status_pending = 0;
564
565 current_inferior = saved_inferior;
da6d8c04
DJ
566 return 1;
567}
568
54a0b537
PA
569/* Return 1 if this lwp has an interesting status pending. This
570 function may silently resume an inferior lwp. */
611cb4a5 571static int
0d62e5e8
DJ
572status_pending_p (struct inferior_list_entry *entry, void *dummy)
573{
54a0b537 574 struct lwp_info *lwp = (struct lwp_info *) entry;
0d62e5e8 575
54a0b537
PA
576 if (lwp->status_pending_p)
577 if (check_removed_breakpoint (lwp))
0d62e5e8
DJ
578 {
579 /* This thread was stopped at a breakpoint, and the breakpoint
580 is now gone. We were told to continue (or step...) all threads,
581 so GDB isn't trying to single-step past this breakpoint.
582 So instead of reporting the old SIGTRAP, pretend we got to
583 the breakpoint just after it was removed instead of just
584 before; resume the process. */
54a0b537 585 linux_resume_one_lwp (&lwp->head, 0, 0, NULL);
0d62e5e8
DJ
586 return 0;
587 }
588
54a0b537 589 return lwp->status_pending_p;
0d62e5e8
DJ
590}
591
592static void
54a0b537 593linux_wait_for_lwp (struct lwp_info **childp, int *wstatp)
611cb4a5 594{
0d62e5e8
DJ
595 int ret;
596 int to_wait_for = -1;
597
598 if (*childp != NULL)
599 to_wait_for = (*childp)->lwpid;
611cb4a5 600
24a09b5f 601retry:
611cb4a5
DJ
602 while (1)
603 {
0d62e5e8
DJ
604 ret = waitpid (to_wait_for, wstatp, WNOHANG);
605
606 if (ret == -1)
607 {
608 if (errno != ECHILD)
609 perror_with_name ("waitpid");
610 }
611 else if (ret > 0)
612 break;
613
614 ret = waitpid (to_wait_for, wstatp, WNOHANG | __WCLONE);
615
616 if (ret == -1)
617 {
618 if (errno != ECHILD)
619 perror_with_name ("waitpid (WCLONE)");
620 }
621 else if (ret > 0)
622 break;
623
624 usleep (1000);
625 }
626
627 if (debug_threads
628 && (!WIFSTOPPED (*wstatp)
629 || (WSTOPSIG (*wstatp) != 32
630 && WSTOPSIG (*wstatp) != 33)))
631 fprintf (stderr, "Got an event from %d (%x)\n", ret, *wstatp);
632
633 if (to_wait_for == -1)
54a0b537 634 *childp = (struct lwp_info *) find_inferior_id (&all_lwps, ret);
0d62e5e8 635
24a09b5f
DJ
636 /* If we didn't find a process, one of two things presumably happened:
637 - A process we started and then detached from has exited. Ignore it.
638 - A process we are controlling has forked and the new child's stop
639 was reported to us by the kernel. Save its PID. */
640 if (*childp == NULL && WIFSTOPPED (*wstatp))
641 {
642 add_pid_to_list (&stopped_pids, ret);
643 goto retry;
644 }
645 else if (*childp == NULL)
646 goto retry;
647
0d62e5e8
DJ
648 (*childp)->stopped = 1;
649 (*childp)->pending_is_breakpoint = 0;
650
32ca6d61
DJ
651 (*childp)->last_status = *wstatp;
652
d61ddec4
UW
653 /* Architecture-specific setup after inferior is running.
654 This needs to happen after we have attached to the inferior
655 and it is stopped for the first time, but before we access
656 any inferior registers. */
657 if (new_inferior)
658 {
659 the_low_target.arch_setup ();
52fa2412
UW
660#ifdef HAVE_LINUX_REGSETS
661 memset (disabled_regsets, 0, num_regsets);
662#endif
d61ddec4
UW
663 new_inferior = 0;
664 }
665
0d62e5e8
DJ
666 if (debug_threads
667 && WIFSTOPPED (*wstatp))
668 {
896c7fbb 669 struct thread_info *saved_inferior = current_inferior;
0d62e5e8 670 current_inferior = (struct thread_info *)
24a09b5f 671 find_inferior_id (&all_threads, (*childp)->lwpid);
0d62e5e8
DJ
672 /* For testing only; i386_stop_pc prints out a diagnostic. */
673 if (the_low_target.get_pc != NULL)
674 get_stop_pc ();
896c7fbb 675 current_inferior = saved_inferior;
0d62e5e8
DJ
676 }
677}
611cb4a5 678
0d62e5e8
DJ
679static int
680linux_wait_for_event (struct thread_info *child)
681{
682 CORE_ADDR stop_pc;
54a0b537 683 struct lwp_info *event_child;
0d62e5e8 684 int wstat;
b65d95c5 685 int bp_status;
0d62e5e8
DJ
686
687 /* Check for a process with a pending status. */
688 /* It is possible that the user changed the pending task's registers since
689 it stopped. We correctly handle the change of PC if we hit a breakpoint
e5379b03 690 (in check_removed_breakpoint); signals should be reported anyway. */
0d62e5e8
DJ
691 if (child == NULL)
692 {
54a0b537
PA
693 event_child = (struct lwp_info *)
694 find_inferior (&all_lwps, status_pending_p, NULL);
0d62e5e8 695 if (debug_threads && event_child)
a1928bad 696 fprintf (stderr, "Got a pending child %ld\n", event_child->lwpid);
0d62e5e8
DJ
697 }
698 else
699 {
54a0b537 700 event_child = get_thread_lwp (child);
0d62e5e8
DJ
701 if (event_child->status_pending_p
702 && check_removed_breakpoint (event_child))
703 event_child = NULL;
704 }
611cb4a5 705
0d62e5e8
DJ
706 if (event_child != NULL)
707 {
708 if (event_child->status_pending_p)
611cb4a5 709 {
0d62e5e8 710 if (debug_threads)
a1928bad 711 fprintf (stderr, "Got an event from pending child %ld (%04x)\n",
0d62e5e8
DJ
712 event_child->lwpid, event_child->status_pending);
713 wstat = event_child->status_pending;
714 event_child->status_pending_p = 0;
715 event_child->status_pending = 0;
54a0b537 716 current_inferior = get_lwp_thread (event_child);
0d62e5e8
DJ
717 return wstat;
718 }
719 }
720
721 /* We only enter this loop if no process has a pending wait status. Thus
722 any action taken in response to a wait status inside this loop is
723 responding as soon as we detect the status, not after any pending
724 events. */
725 while (1)
726 {
727 if (child == NULL)
728 event_child = NULL;
729 else
54a0b537 730 event_child = get_thread_lwp (child);
0d62e5e8 731
54a0b537 732 linux_wait_for_lwp (&event_child, &wstat);
0d62e5e8
DJ
733
734 if (event_child == NULL)
735 error ("event from unknown child");
611cb4a5 736
0d62e5e8 737 current_inferior = (struct thread_info *)
24a09b5f 738 find_inferior_id (&all_threads, event_child->lwpid);
0d62e5e8 739
89be2091 740 /* Check for thread exit. */
24a09b5f 741 if (! WIFSTOPPED (wstat))
0d62e5e8 742 {
89be2091 743 if (debug_threads)
24a09b5f 744 fprintf (stderr, "LWP %ld exiting\n", event_child->head.id);
89be2091
DJ
745
746 /* If the last thread is exiting, just return. */
747 if (all_threads.head == all_threads.tail)
748 return wstat;
749
24a09b5f 750 dead_thread_notify (thread_id_to_gdb_id (event_child->lwpid));
89be2091 751
54a0b537 752 remove_inferior (&all_lwps, &event_child->head);
89be2091
DJ
753 free (event_child);
754 remove_thread (current_inferior);
755 current_inferior = (struct thread_info *) all_threads.head;
756
757 /* If we were waiting for this particular child to do something...
758 well, it did something. */
759 if (child != NULL)
760 return wstat;
761
762 /* Wait for a more interesting event. */
763 continue;
764 }
765
24a09b5f 766 if (WIFSTOPPED (wstat)
89be2091
DJ
767 && WSTOPSIG (wstat) == SIGSTOP
768 && event_child->stop_expected)
769 {
770 if (debug_threads)
771 fprintf (stderr, "Expected stop.\n");
772 event_child->stop_expected = 0;
54a0b537
PA
773 linux_resume_one_lwp (&event_child->head,
774 event_child->stepping, 0, NULL);
89be2091
DJ
775 continue;
776 }
777
24a09b5f
DJ
778 if (WIFSTOPPED (wstat) && WSTOPSIG (wstat) == SIGTRAP
779 && wstat >> 16 != 0)
780 {
781 handle_extended_wait (event_child, wstat);
782 continue;
783 }
784
89be2091
DJ
785 /* If GDB is not interested in this signal, don't stop other
786 threads, and don't report it to GDB. Just resume the
787 inferior right away. We do this for threading-related
69f223ed
DJ
788 signals as well as any that GDB specifically requested we
789 ignore. But never ignore SIGSTOP if we sent it ourselves,
790 and do not ignore signals when stepping - they may require
791 special handling to skip the signal handler. */
89be2091
DJ
792 /* FIXME drow/2002-06-09: Get signal numbers from the inferior's
793 thread library? */
794 if (WIFSTOPPED (wstat)
69f223ed 795 && !event_child->stepping
24a09b5f
DJ
796 && (
797#ifdef USE_THREAD_DB
798 (thread_db_active && (WSTOPSIG (wstat) == __SIGRTMIN
799 || WSTOPSIG (wstat) == __SIGRTMIN + 1))
800 ||
801#endif
802 (pass_signals[target_signal_from_host (WSTOPSIG (wstat))]
803 && (WSTOPSIG (wstat) != SIGSTOP || !stopping_threads))))
89be2091
DJ
804 {
805 siginfo_t info, *info_p;
806
807 if (debug_threads)
24a09b5f
DJ
808 fprintf (stderr, "Ignored signal %d for LWP %ld.\n",
809 WSTOPSIG (wstat), event_child->head.id);
89be2091
DJ
810
811 if (ptrace (PTRACE_GETSIGINFO, event_child->lwpid, 0, &info) == 0)
812 info_p = &info;
813 else
814 info_p = NULL;
54a0b537
PA
815 linux_resume_one_lwp (&event_child->head,
816 event_child->stepping,
817 WSTOPSIG (wstat), info_p);
89be2091 818 continue;
0d62e5e8 819 }
611cb4a5 820
0d62e5e8
DJ
821 /* If this event was not handled above, and is not a SIGTRAP, report
822 it. */
823 if (!WIFSTOPPED (wstat) || WSTOPSIG (wstat) != SIGTRAP)
824 return wstat;
611cb4a5 825
0d62e5e8
DJ
826 /* If this target does not support breakpoints, we simply report the
827 SIGTRAP; it's of no concern to us. */
828 if (the_low_target.get_pc == NULL)
829 return wstat;
830
831 stop_pc = get_stop_pc ();
832
833 /* bp_reinsert will only be set if we were single-stepping.
834 Notice that we will resume the process after hitting
835 a gdbserver breakpoint; single-stepping to/over one
836 is not supported (yet). */
837 if (event_child->bp_reinsert != 0)
838 {
839 if (debug_threads)
840 fprintf (stderr, "Reinserted breakpoint.\n");
841 reinsert_breakpoint (event_child->bp_reinsert);
842 event_child->bp_reinsert = 0;
843
844 /* Clear the single-stepping flag and SIGTRAP as we resume. */
54a0b537 845 linux_resume_one_lwp (&event_child->head, 0, 0, NULL);
0d62e5e8
DJ
846 continue;
847 }
848
b65d95c5 849 bp_status = check_breakpoints (stop_pc);
0d62e5e8 850
b65d95c5 851 if (bp_status != 0)
0d62e5e8 852 {
b65d95c5
DJ
853 if (debug_threads)
854 fprintf (stderr, "Hit a gdbserver breakpoint.\n");
855
0d62e5e8 856 /* We hit one of our own breakpoints. We mark it as a pending
e5379b03 857 breakpoint, so that check_removed_breakpoint () will do the PC
0d62e5e8
DJ
858 adjustment for us at the appropriate time. */
859 event_child->pending_is_breakpoint = 1;
860 event_child->pending_stop_pc = stop_pc;
861
b65d95c5 862 /* We may need to put the breakpoint back. We continue in the event
0d62e5e8
DJ
863 loop instead of simply replacing the breakpoint right away,
864 in order to not lose signals sent to the thread that hit the
865 breakpoint. Unfortunately this increases the window where another
866 thread could sneak past the removed breakpoint. For the current
867 use of server-side breakpoints (thread creation) this is
868 acceptable; but it needs to be considered before this breakpoint
869 mechanism can be used in more general ways. For some breakpoints
870 it may be necessary to stop all other threads, but that should
871 be avoided where possible.
872
873 If breakpoint_reinsert_addr is NULL, that means that we can
874 use PTRACE_SINGLESTEP on this platform. Uninsert the breakpoint,
875 mark it for reinsertion, and single-step.
876
877 Otherwise, call the target function to figure out where we need
878 our temporary breakpoint, create it, and continue executing this
879 process. */
b65d95c5
DJ
880 if (bp_status == 2)
881 /* No need to reinsert. */
54a0b537 882 linux_resume_one_lwp (&event_child->head, 0, 0, NULL);
b65d95c5 883 else if (the_low_target.breakpoint_reinsert_addr == NULL)
0d62e5e8
DJ
884 {
885 event_child->bp_reinsert = stop_pc;
886 uninsert_breakpoint (stop_pc);
54a0b537 887 linux_resume_one_lwp (&event_child->head, 1, 0, NULL);
0d62e5e8
DJ
888 }
889 else
890 {
891 reinsert_breakpoint_by_bp
892 (stop_pc, (*the_low_target.breakpoint_reinsert_addr) ());
54a0b537 893 linux_resume_one_lwp (&event_child->head, 0, 0, NULL);
611cb4a5 894 }
0d62e5e8
DJ
895
896 continue;
897 }
898
b65d95c5
DJ
899 if (debug_threads)
900 fprintf (stderr, "Hit a non-gdbserver breakpoint.\n");
901
0d62e5e8 902 /* If we were single-stepping, we definitely want to report the
c35fafde
PA
903 SIGTRAP. Although the single-step operation has completed,
904 do not clear clear the stepping flag yet; we need to check it
905 in wait_for_sigstop. */
0d62e5e8 906 if (event_child->stepping)
c35fafde 907 return wstat;
0d62e5e8
DJ
908
909 /* A SIGTRAP that we can't explain. It may have been a breakpoint.
910 Check if it is a breakpoint, and if so mark the process information
911 accordingly. This will handle both the necessary fiddling with the
912 PC on decr_pc_after_break targets and suppressing extra threads
913 hitting a breakpoint if two hit it at once and then GDB removes it
914 after the first is reported. Arguably it would be better to report
915 multiple threads hitting breakpoints simultaneously, but the current
916 remote protocol does not allow this. */
917 if ((*the_low_target.breakpoint_at) (stop_pc))
918 {
919 event_child->pending_is_breakpoint = 1;
920 event_child->pending_stop_pc = stop_pc;
611cb4a5
DJ
921 }
922
923 return wstat;
924 }
0d62e5e8 925
611cb4a5
DJ
926 /* NOTREACHED */
927 return 0;
928}
929
0d62e5e8 930/* Wait for process, returns status. */
da6d8c04 931
5b1c542e
PA
932static unsigned long
933linux_wait (struct target_waitstatus *ourstatus)
da6d8c04 934{
e5f1222d 935 int w;
0d62e5e8 936 struct thread_info *child = NULL;
5b1c542e 937 struct lwp_info *lwp;
0d62e5e8
DJ
938
939retry:
940 /* If we were only supposed to resume one thread, only wait for
941 that thread - if it's still alive. If it died, however - which
942 can happen if we're coming from the thread death case below -
943 then we need to make sure we restart the other threads. We could
944 pick a thread at random or restart all; restarting all is less
945 arbitrary. */
d592fa2f 946 if (cont_thread != 0 && cont_thread != -1)
0d62e5e8
DJ
947 {
948 child = (struct thread_info *) find_inferior_id (&all_threads,
949 cont_thread);
950
951 /* No stepping, no signal - unless one is pending already, of course. */
952 if (child == NULL)
64386c31
DJ
953 {
954 struct thread_resume resume_info;
955 resume_info.thread = -1;
2bd7c093
PA
956 resume_info.step = resume_info.sig = 0;
957 linux_resume (&resume_info, 1);
64386c31 958 }
0d62e5e8 959 }
da6d8c04 960
0d62e5e8 961 w = linux_wait_for_event (child);
54a0b537 962 stop_all_lwps ();
da6d8c04 963
24a09b5f
DJ
964 if (must_set_ptrace_flags)
965 {
966 ptrace (PTRACE_SETOPTIONS, inferior_pid, 0, PTRACE_O_TRACECLONE);
967 must_set_ptrace_flags = 0;
968 }
969
5b1c542e
PA
970 lwp = get_thread_lwp (current_inferior);
971
0d62e5e8
DJ
972 /* If we are waiting for a particular child, and it exited,
973 linux_wait_for_event will return its exit status. Similarly if
974 the last child exited. If this is not the last child, however,
975 do not report it as exited until there is a 'thread exited' response
976 available in the remote protocol. Instead, just wait for another event.
977 This should be safe, because if the thread crashed we will already
978 have reported the termination signal to GDB; that should stop any
979 in-progress stepping operations, etc.
980
981 Report the exit status of the last thread to exit. This matches
982 LinuxThreads' behavior. */
983
984 if (all_threads.head == all_threads.tail)
da6d8c04 985 {
5b1c542e 986 int pid = pid_of (lwp);
0d62e5e8
DJ
987 if (WIFEXITED (w))
988 {
5b1c542e
PA
989 if (debug_threads)
990 fprintf (stderr, "\nChild exited with retcode = %x \n",
991 WEXITSTATUS (w));
992
993 ourstatus->kind = TARGET_WAITKIND_EXITED;
994 ourstatus->value.integer = WEXITSTATUS (w);
0d62e5e8 995 clear_inferiors ();
54a0b537
PA
996 free (all_lwps.head);
997 all_lwps.head = all_lwps.tail = NULL;
5b1c542e
PA
998
999 return pid;
0d62e5e8
DJ
1000 }
1001 else if (!WIFSTOPPED (w))
1002 {
5b1c542e
PA
1003 if (debug_threads)
1004 fprintf (stderr, "\nChild terminated with signal = %x \n",
1005 WTERMSIG (w));
1006
1007 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1008 ourstatus->value.sig = target_signal_from_host (WTERMSIG (w));
075b3282 1009 clear_inferiors ();
54a0b537
PA
1010 free (all_lwps.head);
1011 all_lwps.head = all_lwps.tail = NULL;
5b1c542e
PA
1012
1013 return pid;
0d62e5e8 1014 }
da6d8c04 1015 }
0d62e5e8 1016 else
da6d8c04 1017 {
0d62e5e8
DJ
1018 if (!WIFSTOPPED (w))
1019 goto retry;
da6d8c04
DJ
1020 }
1021
5b1c542e
PA
1022 ourstatus->kind = TARGET_WAITKIND_STOPPED;
1023 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (w));
1024
1025 return lwp->lwpid;
da6d8c04
DJ
1026}
1027
fd500816
DJ
1028/* Send a signal to an LWP. For LinuxThreads, kill is enough; however, if
1029 thread groups are in use, we need to use tkill. */
1030
1031static int
a1928bad 1032kill_lwp (unsigned long lwpid, int signo)
fd500816
DJ
1033{
1034 static int tkill_failed;
1035
1036 errno = 0;
1037
1038#ifdef SYS_tkill
1039 if (!tkill_failed)
1040 {
1041 int ret = syscall (SYS_tkill, lwpid, signo);
1042 if (errno != ENOSYS)
1b3f6016 1043 return ret;
fd500816
DJ
1044 errno = 0;
1045 tkill_failed = 1;
1046 }
1047#endif
1048
1049 return kill (lwpid, signo);
1050}
1051
0d62e5e8
DJ
1052static void
1053send_sigstop (struct inferior_list_entry *entry)
1054{
54a0b537 1055 struct lwp_info *lwp = (struct lwp_info *) entry;
0d62e5e8 1056
54a0b537 1057 if (lwp->stopped)
0d62e5e8
DJ
1058 return;
1059
1060 /* If we already have a pending stop signal for this process, don't
1061 send another. */
54a0b537 1062 if (lwp->stop_expected)
0d62e5e8 1063 {
ae13219e 1064 if (debug_threads)
54a0b537
PA
1065 fprintf (stderr, "Have pending sigstop for lwp %ld\n",
1066 lwp->lwpid);
ae13219e
DJ
1067
1068 /* We clear the stop_expected flag so that wait_for_sigstop
1069 will receive the SIGSTOP event (instead of silently resuming and
1070 waiting again). It'll be reset below. */
54a0b537 1071 lwp->stop_expected = 0;
0d62e5e8
DJ
1072 return;
1073 }
1074
1075 if (debug_threads)
54a0b537 1076 fprintf (stderr, "Sending sigstop to lwp %ld\n", lwp->head.id);
0d62e5e8 1077
54a0b537 1078 kill_lwp (lwp->head.id, SIGSTOP);
0d62e5e8
DJ
1079}
1080
1081static void
1082wait_for_sigstop (struct inferior_list_entry *entry)
1083{
54a0b537 1084 struct lwp_info *lwp = (struct lwp_info *) entry;
0d62e5e8 1085 struct thread_info *saved_inferior, *thread;
a1928bad
DJ
1086 int wstat;
1087 unsigned long saved_tid;
0d62e5e8 1088
54a0b537 1089 if (lwp->stopped)
0d62e5e8
DJ
1090 return;
1091
1092 saved_inferior = current_inferior;
1093 saved_tid = ((struct inferior_list_entry *) saved_inferior)->id;
1094 thread = (struct thread_info *) find_inferior_id (&all_threads,
54a0b537 1095 lwp->lwpid);
0d62e5e8
DJ
1096 wstat = linux_wait_for_event (thread);
1097
1098 /* If we stopped with a non-SIGSTOP signal, save it for later
1099 and record the pending SIGSTOP. If the process exited, just
1100 return. */
1101 if (WIFSTOPPED (wstat)
1102 && WSTOPSIG (wstat) != SIGSTOP)
1103 {
1104 if (debug_threads)
24a09b5f 1105 fprintf (stderr, "LWP %ld stopped with non-sigstop status %06x\n",
54a0b537 1106 lwp->lwpid, wstat);
c35fafde
PA
1107
1108 /* Do not leave a pending single-step finish to be reported to
1109 the client. The client will give us a new action for this
1110 thread, possibly a continue request --- otherwise, the client
1111 would consider this pending SIGTRAP reported later a spurious
1112 signal. */
1113 if (WSTOPSIG (wstat) == SIGTRAP
1114 && lwp->stepping
1115 && !linux_stopped_by_watchpoint ())
1116 {
1117 if (debug_threads)
1118 fprintf (stderr, " single-step SIGTRAP ignored\n");
1119 }
1120 else
1121 {
1122 lwp->status_pending_p = 1;
1123 lwp->status_pending = wstat;
1124 }
54a0b537 1125 lwp->stop_expected = 1;
0d62e5e8
DJ
1126 }
1127
1128 if (linux_thread_alive (saved_tid))
1129 current_inferior = saved_inferior;
1130 else
1131 {
1132 if (debug_threads)
1133 fprintf (stderr, "Previously current thread died.\n");
1134
1135 /* Set a valid thread as current. */
1136 set_desired_inferior (0);
1137 }
1138}
1139
1140static void
54a0b537 1141stop_all_lwps (void)
0d62e5e8
DJ
1142{
1143 stopping_threads = 1;
54a0b537
PA
1144 for_each_inferior (&all_lwps, send_sigstop);
1145 for_each_inferior (&all_lwps, wait_for_sigstop);
0d62e5e8
DJ
1146 stopping_threads = 0;
1147}
1148
da6d8c04
DJ
1149/* Resume execution of the inferior process.
1150 If STEP is nonzero, single-step it.
1151 If SIGNAL is nonzero, give it that signal. */
1152
ce3a066d 1153static void
54a0b537
PA
1154linux_resume_one_lwp (struct inferior_list_entry *entry,
1155 int step, int signal, siginfo_t *info)
da6d8c04 1156{
54a0b537 1157 struct lwp_info *lwp = (struct lwp_info *) entry;
0d62e5e8
DJ
1158 struct thread_info *saved_inferior;
1159
54a0b537 1160 if (lwp->stopped == 0)
0d62e5e8
DJ
1161 return;
1162
1163 /* If we have pending signals or status, and a new signal, enqueue the
1164 signal. Also enqueue the signal if we are waiting to reinsert a
1165 breakpoint; it will be picked up again below. */
1166 if (signal != 0
54a0b537
PA
1167 && (lwp->status_pending_p || lwp->pending_signals != NULL
1168 || lwp->bp_reinsert != 0))
0d62e5e8
DJ
1169 {
1170 struct pending_signals *p_sig;
bca929d3 1171 p_sig = xmalloc (sizeof (*p_sig));
54a0b537 1172 p_sig->prev = lwp->pending_signals;
0d62e5e8 1173 p_sig->signal = signal;
32ca6d61
DJ
1174 if (info == NULL)
1175 memset (&p_sig->info, 0, sizeof (siginfo_t));
1176 else
1177 memcpy (&p_sig->info, info, sizeof (siginfo_t));
54a0b537 1178 lwp->pending_signals = p_sig;
0d62e5e8
DJ
1179 }
1180
54a0b537 1181 if (lwp->status_pending_p && !check_removed_breakpoint (lwp))
0d62e5e8
DJ
1182 return;
1183
1184 saved_inferior = current_inferior;
54a0b537 1185 current_inferior = get_lwp_thread (lwp);
0d62e5e8
DJ
1186
1187 if (debug_threads)
1b3f6016
PA
1188 fprintf (stderr, "Resuming lwp %ld (%s, signal %d, stop %s)\n",
1189 inferior_pid, step ? "step" : "continue", signal,
54a0b537 1190 lwp->stop_expected ? "expected" : "not expected");
0d62e5e8
DJ
1191
1192 /* This bit needs some thinking about. If we get a signal that
1193 we must report while a single-step reinsert is still pending,
1194 we often end up resuming the thread. It might be better to
1195 (ew) allow a stack of pending events; then we could be sure that
1196 the reinsert happened right away and not lose any signals.
1197
1198 Making this stack would also shrink the window in which breakpoints are
54a0b537 1199 uninserted (see comment in linux_wait_for_lwp) but not enough for
0d62e5e8
DJ
1200 complete correctness, so it won't solve that problem. It may be
1201 worthwhile just to solve this one, however. */
54a0b537 1202 if (lwp->bp_reinsert != 0)
0d62e5e8
DJ
1203 {
1204 if (debug_threads)
54a0b537 1205 fprintf (stderr, " pending reinsert at %08lx", (long)lwp->bp_reinsert);
0d62e5e8
DJ
1206 if (step == 0)
1207 fprintf (stderr, "BAD - reinserting but not stepping.\n");
1208 step = 1;
1209
1210 /* Postpone any pending signal. It was enqueued above. */
1211 signal = 0;
1212 }
1213
54a0b537 1214 check_removed_breakpoint (lwp);
0d62e5e8 1215
aa691b87 1216 if (debug_threads && the_low_target.get_pc != NULL)
0d62e5e8
DJ
1217 {
1218 fprintf (stderr, " ");
52fb6437 1219 (*the_low_target.get_pc) ();
0d62e5e8
DJ
1220 }
1221
1222 /* If we have pending signals, consume one unless we are trying to reinsert
1223 a breakpoint. */
54a0b537 1224 if (lwp->pending_signals != NULL && lwp->bp_reinsert == 0)
0d62e5e8
DJ
1225 {
1226 struct pending_signals **p_sig;
1227
54a0b537 1228 p_sig = &lwp->pending_signals;
0d62e5e8
DJ
1229 while ((*p_sig)->prev != NULL)
1230 p_sig = &(*p_sig)->prev;
1231
1232 signal = (*p_sig)->signal;
32ca6d61 1233 if ((*p_sig)->info.si_signo != 0)
54a0b537 1234 ptrace (PTRACE_SETSIGINFO, lwp->lwpid, 0, &(*p_sig)->info);
32ca6d61 1235
0d62e5e8
DJ
1236 free (*p_sig);
1237 *p_sig = NULL;
1238 }
1239
1240 regcache_invalidate_one ((struct inferior_list_entry *)
54a0b537 1241 get_lwp_thread (lwp));
da6d8c04 1242 errno = 0;
54a0b537
PA
1243 lwp->stopped = 0;
1244 lwp->stepping = step;
1245 ptrace (step ? PTRACE_SINGLESTEP : PTRACE_CONT, lwp->lwpid, 0, signal);
0d62e5e8
DJ
1246
1247 current_inferior = saved_inferior;
da6d8c04 1248 if (errno)
3221518c
UW
1249 {
1250 /* ESRCH from ptrace either means that the thread was already
1251 running (an error) or that it is gone (a race condition). If
1252 it's gone, we will get a notification the next time we wait,
1253 so we can ignore the error. We could differentiate these
1254 two, but it's tricky without waiting; the thread still exists
1255 as a zombie, so sending it signal 0 would succeed. So just
1256 ignore ESRCH. */
1257 if (errno == ESRCH)
1258 return;
1259
1260 perror_with_name ("ptrace");
1261 }
da6d8c04
DJ
1262}
1263
2bd7c093
PA
1264struct thread_resume_array
1265{
1266 struct thread_resume *resume;
1267 size_t n;
1268};
64386c31
DJ
1269
1270/* This function is called once per thread. We look up the thread
5544ad89
DJ
1271 in RESUME_PTR, and mark the thread with a pointer to the appropriate
1272 resume request.
1273
1274 This algorithm is O(threads * resume elements), but resume elements
1275 is small (and will remain small at least until GDB supports thread
1276 suspension). */
2bd7c093
PA
1277static int
1278linux_set_resume_request (struct inferior_list_entry *entry, void *arg)
0d62e5e8 1279{
54a0b537 1280 struct lwp_info *lwp;
64386c31 1281 struct thread_info *thread;
5544ad89 1282 int ndx;
2bd7c093 1283 struct thread_resume_array *r;
64386c31
DJ
1284
1285 thread = (struct thread_info *) entry;
54a0b537 1286 lwp = get_thread_lwp (thread);
2bd7c093 1287 r = arg;
64386c31 1288
2bd7c093
PA
1289 for (ndx = 0; ndx < r->n; ndx++)
1290 if (r->resume[ndx].thread == -1 || r->resume[ndx].thread == entry->id)
1291 {
1292 lwp->resume = &r->resume[ndx];
1293 return 0;
1294 }
1295
1296 /* No resume action for this thread. */
1297 lwp->resume = NULL;
64386c31 1298
2bd7c093 1299 return 0;
5544ad89
DJ
1300}
1301
1302/* This function is called once per thread. We check the thread's resume
1303 request, which will tell us whether to resume, step, or leave the thread
1304 stopped; and what signal, if any, it should be sent. For threads which
1305 we aren't explicitly told otherwise, we preserve the stepping flag; this
1306 is used for stepping over gdbserver-placed breakpoints. */
1307
1308static void
1309linux_continue_one_thread (struct inferior_list_entry *entry)
1310{
54a0b537 1311 struct lwp_info *lwp;
5544ad89
DJ
1312 struct thread_info *thread;
1313 int step;
1314
1315 thread = (struct thread_info *) entry;
54a0b537 1316 lwp = get_thread_lwp (thread);
5544ad89 1317
2bd7c093 1318 if (lwp->resume == NULL)
64386c31
DJ
1319 return;
1320
c35fafde
PA
1321 if (lwp->resume->thread == -1
1322 && lwp->stepping
1323 && lwp->pending_is_breakpoint)
1324 step = 1;
64386c31 1325 else
54a0b537 1326 step = lwp->resume->step;
5544ad89 1327
54a0b537 1328 linux_resume_one_lwp (&lwp->head, step, lwp->resume->sig, NULL);
c6ecbae5 1329
54a0b537 1330 lwp->resume = NULL;
5544ad89
DJ
1331}
1332
1333/* This function is called once per thread. We check the thread's resume
1334 request, which will tell us whether to resume, step, or leave the thread
1335 stopped; and what signal, if any, it should be sent. We queue any needed
1336 signals, since we won't actually resume. We already have a pending event
1337 to report, so we don't need to preserve any step requests; they should
1338 be re-issued if necessary. */
1339
1340static void
1341linux_queue_one_thread (struct inferior_list_entry *entry)
1342{
54a0b537 1343 struct lwp_info *lwp;
5544ad89
DJ
1344 struct thread_info *thread;
1345
1346 thread = (struct thread_info *) entry;
54a0b537 1347 lwp = get_thread_lwp (thread);
5544ad89 1348
2bd7c093 1349 if (lwp->resume == NULL)
5544ad89
DJ
1350 return;
1351
1352 /* If we have a new signal, enqueue the signal. */
54a0b537 1353 if (lwp->resume->sig != 0)
5544ad89
DJ
1354 {
1355 struct pending_signals *p_sig;
bca929d3 1356 p_sig = xmalloc (sizeof (*p_sig));
54a0b537
PA
1357 p_sig->prev = lwp->pending_signals;
1358 p_sig->signal = lwp->resume->sig;
32ca6d61
DJ
1359 memset (&p_sig->info, 0, sizeof (siginfo_t));
1360
1361 /* If this is the same signal we were previously stopped by,
1362 make sure to queue its siginfo. We can ignore the return
1363 value of ptrace; if it fails, we'll skip
1364 PTRACE_SETSIGINFO. */
54a0b537
PA
1365 if (WIFSTOPPED (lwp->last_status)
1366 && WSTOPSIG (lwp->last_status) == lwp->resume->sig)
1367 ptrace (PTRACE_GETSIGINFO, lwp->lwpid, 0, &p_sig->info);
32ca6d61 1368
54a0b537 1369 lwp->pending_signals = p_sig;
5544ad89
DJ
1370 }
1371
54a0b537 1372 lwp->resume = NULL;
5544ad89
DJ
1373}
1374
1375/* Set DUMMY if this process has an interesting status pending. */
1376static int
1377resume_status_pending_p (struct inferior_list_entry *entry, void *flag_p)
1378{
54a0b537 1379 struct lwp_info *lwp = (struct lwp_info *) entry;
5544ad89
DJ
1380
1381 /* Processes which will not be resumed are not interesting, because
1382 we might not wait for them next time through linux_wait. */
2bd7c093 1383 if (lwp->resume == NULL)
5544ad89
DJ
1384 return 0;
1385
1386 /* If this thread has a removed breakpoint, we won't have any
1387 events to report later, so check now. check_removed_breakpoint
1388 may clear status_pending_p. We avoid calling check_removed_breakpoint
1389 for any thread that we are not otherwise going to resume - this
1390 lets us preserve stopped status when two threads hit a breakpoint.
1391 GDB removes the breakpoint to single-step a particular thread
1392 past it, then re-inserts it and resumes all threads. We want
1393 to report the second thread without resuming it in the interim. */
54a0b537
PA
1394 if (lwp->status_pending_p)
1395 check_removed_breakpoint (lwp);
5544ad89 1396
54a0b537 1397 if (lwp->status_pending_p)
5544ad89
DJ
1398 * (int *) flag_p = 1;
1399
1400 return 0;
0d62e5e8
DJ
1401}
1402
1403static void
2bd7c093 1404linux_resume (struct thread_resume *resume_info, size_t n)
0d62e5e8 1405{
5544ad89 1406 int pending_flag;
2bd7c093 1407 struct thread_resume_array array = { resume_info, n };
c6ecbae5 1408
2bd7c093 1409 find_inferior (&all_threads, linux_set_resume_request, &array);
5544ad89
DJ
1410
1411 /* If there is a thread which would otherwise be resumed, which
1412 has a pending status, then don't resume any threads - we can just
1413 report the pending status. Make sure to queue any signals
1414 that would otherwise be sent. */
1415 pending_flag = 0;
54a0b537 1416 find_inferior (&all_lwps, resume_status_pending_p, &pending_flag);
5544ad89
DJ
1417
1418 if (debug_threads)
1419 {
1420 if (pending_flag)
1421 fprintf (stderr, "Not resuming, pending status\n");
1422 else
1423 fprintf (stderr, "Resuming, no pending status\n");
1424 }
1425
1426 if (pending_flag)
1427 for_each_inferior (&all_threads, linux_queue_one_thread);
1428 else
a20d5e98 1429 for_each_inferior (&all_threads, linux_continue_one_thread);
0d62e5e8
DJ
1430}
1431
1432#ifdef HAVE_LINUX_USRREGS
da6d8c04
DJ
1433
1434int
0a30fbc4 1435register_addr (int regnum)
da6d8c04
DJ
1436{
1437 int addr;
1438
2ec06d2e 1439 if (regnum < 0 || regnum >= the_low_target.num_regs)
da6d8c04
DJ
1440 error ("Invalid register number %d.", regnum);
1441
2ec06d2e 1442 addr = the_low_target.regmap[regnum];
da6d8c04
DJ
1443
1444 return addr;
1445}
1446
58caa3dc 1447/* Fetch one register. */
da6d8c04
DJ
1448static void
1449fetch_register (int regno)
1450{
1451 CORE_ADDR regaddr;
48d93c75 1452 int i, size;
0d62e5e8 1453 char *buf;
da6d8c04 1454
2ec06d2e 1455 if (regno >= the_low_target.num_regs)
0a30fbc4 1456 return;
2ec06d2e 1457 if ((*the_low_target.cannot_fetch_register) (regno))
0a30fbc4 1458 return;
da6d8c04 1459
0a30fbc4
DJ
1460 regaddr = register_addr (regno);
1461 if (regaddr == -1)
1462 return;
1b3f6016
PA
1463 size = ((register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
1464 & - sizeof (PTRACE_XFER_TYPE));
48d93c75
UW
1465 buf = alloca (size);
1466 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
da6d8c04
DJ
1467 {
1468 errno = 0;
0d62e5e8 1469 *(PTRACE_XFER_TYPE *) (buf + i) =
da6d8c04
DJ
1470 ptrace (PTRACE_PEEKUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr, 0);
1471 regaddr += sizeof (PTRACE_XFER_TYPE);
1472 if (errno != 0)
1473 {
1474 /* Warning, not error, in case we are attached; sometimes the
1475 kernel doesn't let us at the registers. */
1476 char *err = strerror (errno);
1477 char *msg = alloca (strlen (err) + 128);
1478 sprintf (msg, "reading register %d: %s", regno, err);
1479 error (msg);
1480 goto error_exit;
1481 }
1482 }
ee1a7ae4
UW
1483
1484 if (the_low_target.supply_ptrace_register)
1485 the_low_target.supply_ptrace_register (regno, buf);
5a1f5858
DJ
1486 else
1487 supply_register (regno, buf);
0d62e5e8 1488
da6d8c04
DJ
1489error_exit:;
1490}
1491
1492/* Fetch all registers, or just one, from the child process. */
58caa3dc
DJ
1493static void
1494usr_fetch_inferior_registers (int regno)
da6d8c04
DJ
1495{
1496 if (regno == -1 || regno == 0)
2ec06d2e 1497 for (regno = 0; regno < the_low_target.num_regs; regno++)
da6d8c04
DJ
1498 fetch_register (regno);
1499 else
1500 fetch_register (regno);
1501}
1502
1503/* Store our register values back into the inferior.
1504 If REGNO is -1, do this for all registers.
1505 Otherwise, REGNO specifies which register (so we can save time). */
58caa3dc
DJ
1506static void
1507usr_store_inferior_registers (int regno)
da6d8c04
DJ
1508{
1509 CORE_ADDR regaddr;
48d93c75 1510 int i, size;
0d62e5e8 1511 char *buf;
da6d8c04
DJ
1512
1513 if (regno >= 0)
1514 {
2ec06d2e 1515 if (regno >= the_low_target.num_regs)
0a30fbc4
DJ
1516 return;
1517
bc1e36ca 1518 if ((*the_low_target.cannot_store_register) (regno) == 1)
0a30fbc4
DJ
1519 return;
1520
1521 regaddr = register_addr (regno);
1522 if (regaddr == -1)
da6d8c04 1523 return;
da6d8c04 1524 errno = 0;
48d93c75
UW
1525 size = (register_size (regno) + sizeof (PTRACE_XFER_TYPE) - 1)
1526 & - sizeof (PTRACE_XFER_TYPE);
1527 buf = alloca (size);
1528 memset (buf, 0, size);
ee1a7ae4
UW
1529
1530 if (the_low_target.collect_ptrace_register)
1531 the_low_target.collect_ptrace_register (regno, buf);
5a1f5858
DJ
1532 else
1533 collect_register (regno, buf);
ee1a7ae4 1534
48d93c75 1535 for (i = 0; i < size; i += sizeof (PTRACE_XFER_TYPE))
da6d8c04 1536 {
0a30fbc4
DJ
1537 errno = 0;
1538 ptrace (PTRACE_POKEUSER, inferior_pid, (PTRACE_ARG3_TYPE) regaddr,
2ff29de4 1539 *(PTRACE_XFER_TYPE *) (buf + i));
da6d8c04
DJ
1540 if (errno != 0)
1541 {
1b3f6016
PA
1542 /* At this point, ESRCH should mean the process is
1543 already gone, in which case we simply ignore attempts
1544 to change its registers. See also the related
1545 comment in linux_resume_one_lwp. */
3221518c
UW
1546 if (errno == ESRCH)
1547 return;
1548
bc1e36ca
DJ
1549 if ((*the_low_target.cannot_store_register) (regno) == 0)
1550 {
1551 char *err = strerror (errno);
1552 char *msg = alloca (strlen (err) + 128);
1553 sprintf (msg, "writing register %d: %s",
1554 regno, err);
1555 error (msg);
1556 return;
1557 }
da6d8c04 1558 }
2ff29de4 1559 regaddr += sizeof (PTRACE_XFER_TYPE);
da6d8c04 1560 }
da6d8c04
DJ
1561 }
1562 else
2ec06d2e 1563 for (regno = 0; regno < the_low_target.num_regs; regno++)
0d62e5e8 1564 usr_store_inferior_registers (regno);
da6d8c04 1565}
58caa3dc
DJ
1566#endif /* HAVE_LINUX_USRREGS */
1567
1568
1569
1570#ifdef HAVE_LINUX_REGSETS
1571
1572static int
0d62e5e8 1573regsets_fetch_inferior_registers ()
58caa3dc
DJ
1574{
1575 struct regset_info *regset;
e9d25b98 1576 int saw_general_regs = 0;
58caa3dc
DJ
1577
1578 regset = target_regsets;
1579
1580 while (regset->size >= 0)
1581 {
1582 void *buf;
1583 int res;
1584
52fa2412 1585 if (regset->size == 0 || disabled_regsets[regset - target_regsets])
58caa3dc
DJ
1586 {
1587 regset ++;
1588 continue;
1589 }
1590
bca929d3 1591 buf = xmalloc (regset->size);
dfb64f85 1592#ifndef __sparc__
d06f167a 1593 res = ptrace (regset->get_request, inferior_pid, 0, buf);
dfb64f85
DJ
1594#else
1595 res = ptrace (regset->get_request, inferior_pid, buf, 0);
1596#endif
58caa3dc
DJ
1597 if (res < 0)
1598 {
1599 if (errno == EIO)
1600 {
52fa2412
UW
1601 /* If we get EIO on a regset, do not try it again for
1602 this process. */
1603 disabled_regsets[regset - target_regsets] = 1;
1604 continue;
58caa3dc
DJ
1605 }
1606 else
1607 {
0d62e5e8 1608 char s[256];
a1928bad 1609 sprintf (s, "ptrace(regsets_fetch_inferior_registers) PID=%ld",
0d62e5e8
DJ
1610 inferior_pid);
1611 perror (s);
58caa3dc
DJ
1612 }
1613 }
e9d25b98
DJ
1614 else if (regset->type == GENERAL_REGS)
1615 saw_general_regs = 1;
58caa3dc
DJ
1616 regset->store_function (buf);
1617 regset ++;
1618 }
e9d25b98
DJ
1619 if (saw_general_regs)
1620 return 0;
1621 else
1622 return 1;
58caa3dc
DJ
1623}
1624
1625static int
0d62e5e8 1626regsets_store_inferior_registers ()
58caa3dc
DJ
1627{
1628 struct regset_info *regset;
e9d25b98 1629 int saw_general_regs = 0;
58caa3dc
DJ
1630
1631 regset = target_regsets;
1632
1633 while (regset->size >= 0)
1634 {
1635 void *buf;
1636 int res;
1637
52fa2412 1638 if (regset->size == 0 || disabled_regsets[regset - target_regsets])
58caa3dc
DJ
1639 {
1640 regset ++;
1641 continue;
1642 }
1643
bca929d3 1644 buf = xmalloc (regset->size);
545587ee
DJ
1645
1646 /* First fill the buffer with the current register set contents,
1647 in case there are any items in the kernel's regset that are
1648 not in gdbserver's regcache. */
dfb64f85 1649#ifndef __sparc__
545587ee 1650 res = ptrace (regset->get_request, inferior_pid, 0, buf);
dfb64f85
DJ
1651#else
1652 res = ptrace (regset->get_request, inferior_pid, buf, 0);
1653#endif
545587ee
DJ
1654
1655 if (res == 0)
1656 {
1657 /* Then overlay our cached registers on that. */
1658 regset->fill_function (buf);
1659
1660 /* Only now do we write the register set. */
dfb64f85 1661#ifndef __sparc__
1b3f6016 1662 res = ptrace (regset->set_request, inferior_pid, 0, buf);
dfb64f85 1663#else
1b3f6016 1664 res = ptrace (regset->set_request, inferior_pid, buf, 0);
dfb64f85 1665#endif
545587ee
DJ
1666 }
1667
58caa3dc
DJ
1668 if (res < 0)
1669 {
1670 if (errno == EIO)
1671 {
52fa2412
UW
1672 /* If we get EIO on a regset, do not try it again for
1673 this process. */
1674 disabled_regsets[regset - target_regsets] = 1;
1675 continue;
58caa3dc 1676 }
3221518c
UW
1677 else if (errno == ESRCH)
1678 {
1b3f6016
PA
1679 /* At this point, ESRCH should mean the process is
1680 already gone, in which case we simply ignore attempts
1681 to change its registers. See also the related
1682 comment in linux_resume_one_lwp. */
3221518c
UW
1683 return 0;
1684 }
58caa3dc
DJ
1685 else
1686 {
ce3a066d 1687 perror ("Warning: ptrace(regsets_store_inferior_registers)");
58caa3dc
DJ
1688 }
1689 }
e9d25b98
DJ
1690 else if (regset->type == GENERAL_REGS)
1691 saw_general_regs = 1;
58caa3dc 1692 regset ++;
09ec9b38 1693 free (buf);
58caa3dc 1694 }
e9d25b98
DJ
1695 if (saw_general_regs)
1696 return 0;
1697 else
1698 return 1;
ce3a066d 1699 return 0;
58caa3dc
DJ
1700}
1701
1702#endif /* HAVE_LINUX_REGSETS */
1703
1704
1705void
ce3a066d 1706linux_fetch_registers (int regno)
58caa3dc
DJ
1707{
1708#ifdef HAVE_LINUX_REGSETS
52fa2412
UW
1709 if (regsets_fetch_inferior_registers () == 0)
1710 return;
58caa3dc
DJ
1711#endif
1712#ifdef HAVE_LINUX_USRREGS
1713 usr_fetch_inferior_registers (regno);
1714#endif
1715}
1716
1717void
ce3a066d 1718linux_store_registers (int regno)
58caa3dc
DJ
1719{
1720#ifdef HAVE_LINUX_REGSETS
52fa2412
UW
1721 if (regsets_store_inferior_registers () == 0)
1722 return;
58caa3dc
DJ
1723#endif
1724#ifdef HAVE_LINUX_USRREGS
1725 usr_store_inferior_registers (regno);
1726#endif
1727}
1728
da6d8c04 1729
da6d8c04
DJ
1730/* Copy LEN bytes from inferior's memory starting at MEMADDR
1731 to debugger memory starting at MYADDR. */
1732
c3e735a6 1733static int
f450004a 1734linux_read_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
da6d8c04
DJ
1735{
1736 register int i;
1737 /* Round starting address down to longword boundary. */
1738 register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
1739 /* Round ending address up; get number of longwords that makes. */
aa691b87
RM
1740 register int count
1741 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1)
da6d8c04
DJ
1742 / sizeof (PTRACE_XFER_TYPE);
1743 /* Allocate buffer of that many longwords. */
aa691b87 1744 register PTRACE_XFER_TYPE *buffer
da6d8c04 1745 = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
fd462a61
DJ
1746 int fd;
1747 char filename[64];
1748
1749 /* Try using /proc. Don't bother for one word. */
1750 if (len >= 3 * sizeof (long))
1751 {
1752 /* We could keep this file open and cache it - possibly one per
1753 thread. That requires some juggling, but is even faster. */
1754 sprintf (filename, "/proc/%ld/mem", inferior_pid);
1755 fd = open (filename, O_RDONLY | O_LARGEFILE);
1756 if (fd == -1)
1757 goto no_proc;
1758
1759 /* If pread64 is available, use it. It's faster if the kernel
1760 supports it (only one syscall), and it's 64-bit safe even on
1761 32-bit platforms (for instance, SPARC debugging a SPARC64
1762 application). */
1763#ifdef HAVE_PREAD64
1764 if (pread64 (fd, myaddr, len, memaddr) != len)
1765#else
1766 if (lseek (fd, memaddr, SEEK_SET) == -1 || read (fd, memaddr, len) != len)
1767#endif
1768 {
1769 close (fd);
1770 goto no_proc;
1771 }
1772
1773 close (fd);
1774 return 0;
1775 }
da6d8c04 1776
fd462a61 1777 no_proc:
da6d8c04
DJ
1778 /* Read all the longwords */
1779 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
1780 {
c3e735a6 1781 errno = 0;
1b3f6016
PA
1782 buffer[i] = ptrace (PTRACE_PEEKTEXT, inferior_pid,
1783 (PTRACE_ARG3_TYPE) addr, 0);
c3e735a6
DJ
1784 if (errno)
1785 return errno;
da6d8c04
DJ
1786 }
1787
1788 /* Copy appropriate bytes out of the buffer. */
1b3f6016
PA
1789 memcpy (myaddr,
1790 (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)),
1791 len);
c3e735a6
DJ
1792
1793 return 0;
da6d8c04
DJ
1794}
1795
1796/* Copy LEN bytes of data from debugger memory at MYADDR
1797 to inferior's memory at MEMADDR.
1798 On failure (cannot write the inferior)
1799 returns the value of errno. */
1800
ce3a066d 1801static int
f450004a 1802linux_write_memory (CORE_ADDR memaddr, const unsigned char *myaddr, int len)
da6d8c04
DJ
1803{
1804 register int i;
1805 /* Round starting address down to longword boundary. */
1806 register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE);
1807 /* Round ending address up; get number of longwords that makes. */
1808 register int count
1809 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) / sizeof (PTRACE_XFER_TYPE);
1810 /* Allocate buffer of that many longwords. */
1811 register PTRACE_XFER_TYPE *buffer = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE));
da6d8c04 1812
0d62e5e8
DJ
1813 if (debug_threads)
1814 {
1815 fprintf (stderr, "Writing %02x to %08lx\n", (unsigned)myaddr[0], (long)memaddr);
1816 }
1817
da6d8c04
DJ
1818 /* Fill start and end extra bytes of buffer with existing memory data. */
1819
d844cde6
DJ
1820 buffer[0] = ptrace (PTRACE_PEEKTEXT, inferior_pid,
1821 (PTRACE_ARG3_TYPE) addr, 0);
da6d8c04
DJ
1822
1823 if (count > 1)
1824 {
1825 buffer[count - 1]
1826 = ptrace (PTRACE_PEEKTEXT, inferior_pid,
d844cde6
DJ
1827 (PTRACE_ARG3_TYPE) (addr + (count - 1)
1828 * sizeof (PTRACE_XFER_TYPE)),
1829 0);
da6d8c04
DJ
1830 }
1831
1832 /* Copy data to be written over corresponding part of buffer */
1833
1834 memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), myaddr, len);
1835
1836 /* Write the entire buffer. */
1837
1838 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE))
1839 {
1840 errno = 0;
d844cde6 1841 ptrace (PTRACE_POKETEXT, inferior_pid, (PTRACE_ARG3_TYPE) addr, buffer[i]);
da6d8c04
DJ
1842 if (errno)
1843 return errno;
1844 }
1845
1846 return 0;
1847}
2f2893d9 1848
24a09b5f
DJ
1849static int linux_supports_tracefork_flag;
1850
51c2684e 1851/* Helper functions for linux_test_for_tracefork, called via clone (). */
24a09b5f 1852
51c2684e
DJ
1853static int
1854linux_tracefork_grandchild (void *arg)
1855{
1856 _exit (0);
1857}
1858
7407e2de
AS
1859#define STACK_SIZE 4096
1860
51c2684e
DJ
1861static int
1862linux_tracefork_child (void *arg)
24a09b5f
DJ
1863{
1864 ptrace (PTRACE_TRACEME, 0, 0, 0);
1865 kill (getpid (), SIGSTOP);
7407e2de
AS
1866#ifdef __ia64__
1867 __clone2 (linux_tracefork_grandchild, arg, STACK_SIZE,
1868 CLONE_VM | SIGCHLD, NULL);
1869#else
1870 clone (linux_tracefork_grandchild, arg + STACK_SIZE,
1871 CLONE_VM | SIGCHLD, NULL);
1872#endif
24a09b5f
DJ
1873 _exit (0);
1874}
1875
1876/* Wrapper function for waitpid which handles EINTR. */
1877
1878static int
1879my_waitpid (int pid, int *status, int flags)
1880{
1881 int ret;
1882 do
1883 {
1884 ret = waitpid (pid, status, flags);
1885 }
1886 while (ret == -1 && errno == EINTR);
1887
1888 return ret;
1889}
1890
1891/* Determine if PTRACE_O_TRACEFORK can be used to follow fork events. Make
1892 sure that we can enable the option, and that it had the desired
1893 effect. */
1894
1895static void
1896linux_test_for_tracefork (void)
1897{
1898 int child_pid, ret, status;
1899 long second_pid;
bca929d3 1900 char *stack = xmalloc (STACK_SIZE * 4);
24a09b5f
DJ
1901
1902 linux_supports_tracefork_flag = 0;
1903
51c2684e 1904 /* Use CLONE_VM instead of fork, to support uClinux (no MMU). */
7407e2de
AS
1905#ifdef __ia64__
1906 child_pid = __clone2 (linux_tracefork_child, stack, STACK_SIZE,
1907 CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2);
1908#else
1909 child_pid = clone (linux_tracefork_child, stack + STACK_SIZE,
1910 CLONE_VM | SIGCHLD, stack + STACK_SIZE * 2);
1911#endif
24a09b5f 1912 if (child_pid == -1)
51c2684e 1913 perror_with_name ("clone");
24a09b5f
DJ
1914
1915 ret = my_waitpid (child_pid, &status, 0);
1916 if (ret == -1)
1917 perror_with_name ("waitpid");
1918 else if (ret != child_pid)
1919 error ("linux_test_for_tracefork: waitpid: unexpected result %d.", ret);
1920 if (! WIFSTOPPED (status))
1921 error ("linux_test_for_tracefork: waitpid: unexpected status %d.", status);
1922
1923 ret = ptrace (PTRACE_SETOPTIONS, child_pid, 0, PTRACE_O_TRACEFORK);
1924 if (ret != 0)
1925 {
1926 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
1927 if (ret != 0)
1928 {
1929 warning ("linux_test_for_tracefork: failed to kill child");
1930 return;
1931 }
1932
1933 ret = my_waitpid (child_pid, &status, 0);
1934 if (ret != child_pid)
1935 warning ("linux_test_for_tracefork: failed to wait for killed child");
1936 else if (!WIFSIGNALED (status))
1937 warning ("linux_test_for_tracefork: unexpected wait status 0x%x from "
1938 "killed child", status);
1939
1940 return;
1941 }
1942
1943 ret = ptrace (PTRACE_CONT, child_pid, 0, 0);
1944 if (ret != 0)
1945 warning ("linux_test_for_tracefork: failed to resume child");
1946
1947 ret = my_waitpid (child_pid, &status, 0);
1948
1949 if (ret == child_pid && WIFSTOPPED (status)
1950 && status >> 16 == PTRACE_EVENT_FORK)
1951 {
1952 second_pid = 0;
1953 ret = ptrace (PTRACE_GETEVENTMSG, child_pid, 0, &second_pid);
1954 if (ret == 0 && second_pid != 0)
1955 {
1956 int second_status;
1957
1958 linux_supports_tracefork_flag = 1;
1959 my_waitpid (second_pid, &second_status, 0);
1960 ret = ptrace (PTRACE_KILL, second_pid, 0, 0);
1961 if (ret != 0)
1962 warning ("linux_test_for_tracefork: failed to kill second child");
1963 my_waitpid (second_pid, &status, 0);
1964 }
1965 }
1966 else
1967 warning ("linux_test_for_tracefork: unexpected result from waitpid "
1968 "(%d, status 0x%x)", ret, status);
1969
1970 do
1971 {
1972 ret = ptrace (PTRACE_KILL, child_pid, 0, 0);
1973 if (ret != 0)
1974 warning ("linux_test_for_tracefork: failed to kill child");
1975 my_waitpid (child_pid, &status, 0);
1976 }
1977 while (WIFSTOPPED (status));
51c2684e
DJ
1978
1979 free (stack);
24a09b5f
DJ
1980}
1981
1982
2f2893d9
DJ
1983static void
1984linux_look_up_symbols (void)
1985{
0d62e5e8 1986#ifdef USE_THREAD_DB
24a09b5f 1987 if (thread_db_active)
0d62e5e8
DJ
1988 return;
1989
24a09b5f 1990 thread_db_active = thread_db_init (!linux_supports_tracefork_flag);
0d62e5e8
DJ
1991#endif
1992}
1993
e5379b03 1994static void
ef57601b 1995linux_request_interrupt (void)
e5379b03 1996{
a1928bad 1997 extern unsigned long signal_pid;
e5379b03 1998
d592fa2f 1999 if (cont_thread != 0 && cont_thread != -1)
e5379b03 2000 {
54a0b537 2001 struct lwp_info *lwp;
e5379b03 2002
54a0b537
PA
2003 lwp = get_thread_lwp (current_inferior);
2004 kill_lwp (lwp->lwpid, SIGINT);
e5379b03
DJ
2005 }
2006 else
ef57601b 2007 kill_lwp (signal_pid, SIGINT);
e5379b03
DJ
2008}
2009
aa691b87
RM
2010/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
2011 to debugger memory starting at MYADDR. */
2012
2013static int
f450004a 2014linux_read_auxv (CORE_ADDR offset, unsigned char *myaddr, unsigned int len)
aa691b87
RM
2015{
2016 char filename[PATH_MAX];
2017 int fd, n;
2018
a1928bad 2019 snprintf (filename, sizeof filename, "/proc/%ld/auxv", inferior_pid);
aa691b87
RM
2020
2021 fd = open (filename, O_RDONLY);
2022 if (fd < 0)
2023 return -1;
2024
2025 if (offset != (CORE_ADDR) 0
2026 && lseek (fd, (off_t) offset, SEEK_SET) != (off_t) offset)
2027 n = -1;
2028 else
2029 n = read (fd, myaddr, len);
2030
2031 close (fd);
2032
2033 return n;
2034}
2035
e013ee27
OF
2036/* These watchpoint related wrapper functions simply pass on the function call
2037 if the target has registered a corresponding function. */
2038
2039static int
2040linux_insert_watchpoint (char type, CORE_ADDR addr, int len)
2041{
2042 if (the_low_target.insert_watchpoint != NULL)
2043 return the_low_target.insert_watchpoint (type, addr, len);
2044 else
2045 /* Unsupported (see target.h). */
2046 return 1;
2047}
2048
2049static int
2050linux_remove_watchpoint (char type, CORE_ADDR addr, int len)
2051{
2052 if (the_low_target.remove_watchpoint != NULL)
2053 return the_low_target.remove_watchpoint (type, addr, len);
2054 else
2055 /* Unsupported (see target.h). */
2056 return 1;
2057}
2058
2059static int
2060linux_stopped_by_watchpoint (void)
2061{
2062 if (the_low_target.stopped_by_watchpoint != NULL)
2063 return the_low_target.stopped_by_watchpoint ();
2064 else
2065 return 0;
2066}
2067
2068static CORE_ADDR
2069linux_stopped_data_address (void)
2070{
2071 if (the_low_target.stopped_data_address != NULL)
2072 return the_low_target.stopped_data_address ();
2073 else
2074 return 0;
2075}
2076
42c81e2a 2077#if defined(__UCLIBC__) && defined(HAS_NOMMU)
52fb6437
NS
2078#if defined(__mcoldfire__)
2079/* These should really be defined in the kernel's ptrace.h header. */
2080#define PT_TEXT_ADDR 49*4
2081#define PT_DATA_ADDR 50*4
2082#define PT_TEXT_END_ADDR 51*4
2083#endif
2084
2085/* Under uClinux, programs are loaded at non-zero offsets, which we need
2086 to tell gdb about. */
2087
2088static int
2089linux_read_offsets (CORE_ADDR *text_p, CORE_ADDR *data_p)
2090{
2091#if defined(PT_TEXT_ADDR) && defined(PT_DATA_ADDR) && defined(PT_TEXT_END_ADDR)
2092 unsigned long text, text_end, data;
54a0b537 2093 int pid = get_thread_lwp (current_inferior)->head.id;
52fb6437
NS
2094
2095 errno = 0;
2096
2097 text = ptrace (PTRACE_PEEKUSER, pid, (long)PT_TEXT_ADDR, 0);
2098 text_end = ptrace (PTRACE_PEEKUSER, pid, (long)PT_TEXT_END_ADDR, 0);
2099 data = ptrace (PTRACE_PEEKUSER, pid, (long)PT_DATA_ADDR, 0);
2100
2101 if (errno == 0)
2102 {
2103 /* Both text and data offsets produced at compile-time (and so
1b3f6016
PA
2104 used by gdb) are relative to the beginning of the program,
2105 with the data segment immediately following the text segment.
2106 However, the actual runtime layout in memory may put the data
2107 somewhere else, so when we send gdb a data base-address, we
2108 use the real data base address and subtract the compile-time
2109 data base-address from it (which is just the length of the
2110 text segment). BSS immediately follows data in both
2111 cases. */
52fb6437
NS
2112 *text_p = text;
2113 *data_p = data - (text_end - text);
1b3f6016 2114
52fb6437
NS
2115 return 1;
2116 }
2117#endif
2118 return 0;
2119}
2120#endif
2121
07e059b5
VP
2122static int
2123linux_qxfer_osdata (const char *annex,
1b3f6016
PA
2124 unsigned char *readbuf, unsigned const char *writebuf,
2125 CORE_ADDR offset, int len)
07e059b5
VP
2126{
2127 /* We make the process list snapshot when the object starts to be
2128 read. */
2129 static const char *buf;
2130 static long len_avail = -1;
2131 static struct buffer buffer;
2132
2133 DIR *dirp;
2134
2135 if (strcmp (annex, "processes") != 0)
2136 return 0;
2137
2138 if (!readbuf || writebuf)
2139 return 0;
2140
2141 if (offset == 0)
2142 {
2143 if (len_avail != -1 && len_avail != 0)
2144 buffer_free (&buffer);
2145 len_avail = 0;
2146 buf = NULL;
2147 buffer_init (&buffer);
2148 buffer_grow_str (&buffer, "<osdata type=\"processes\">");
2149
2150 dirp = opendir ("/proc");
2151 if (dirp)
2152 {
1b3f6016
PA
2153 struct dirent *dp;
2154 while ((dp = readdir (dirp)) != NULL)
2155 {
2156 struct stat statbuf;
2157 char procentry[sizeof ("/proc/4294967295")];
2158
2159 if (!isdigit (dp->d_name[0])
2160 || strlen (dp->d_name) > sizeof ("4294967295") - 1)
2161 continue;
2162
2163 sprintf (procentry, "/proc/%s", dp->d_name);
2164 if (stat (procentry, &statbuf) == 0
2165 && S_ISDIR (statbuf.st_mode))
2166 {
2167 char pathname[128];
2168 FILE *f;
2169 char cmd[MAXPATHLEN + 1];
2170 struct passwd *entry;
2171
2172 sprintf (pathname, "/proc/%s/cmdline", dp->d_name);
2173 entry = getpwuid (statbuf.st_uid);
2174
2175 if ((f = fopen (pathname, "r")) != NULL)
2176 {
2177 size_t len = fread (cmd, 1, sizeof (cmd) - 1, f);
2178 if (len > 0)
2179 {
2180 int i;
2181 for (i = 0; i < len; i++)
2182 if (cmd[i] == '\0')
2183 cmd[i] = ' ';
2184 cmd[len] = '\0';
2185
2186 buffer_xml_printf (
07e059b5
VP
2187 &buffer,
2188 "<item>"
2189 "<column name=\"pid\">%s</column>"
2190 "<column name=\"user\">%s</column>"
2191 "<column name=\"command\">%s</column>"
2192 "</item>",
2193 dp->d_name,
2194 entry ? entry->pw_name : "?",
2195 cmd);
1b3f6016
PA
2196 }
2197 fclose (f);
2198 }
2199 }
2200 }
07e059b5 2201
1b3f6016 2202 closedir (dirp);
07e059b5
VP
2203 }
2204 buffer_grow_str0 (&buffer, "</osdata>\n");
2205 buf = buffer_finish (&buffer);
2206 len_avail = strlen (buf);
2207 }
2208
2209 if (offset >= len_avail)
2210 {
2211 /* Done. Get rid of the data. */
2212 buffer_free (&buffer);
2213 buf = NULL;
2214 len_avail = 0;
2215 return 0;
2216 }
2217
2218 if (len > len_avail - offset)
2219 len = len_avail - offset;
2220 memcpy (readbuf, buf + offset, len);
2221
2222 return len;
2223}
2224
4aa995e1
PA
2225static int
2226linux_xfer_siginfo (const char *annex, unsigned char *readbuf,
2227 unsigned const char *writebuf, CORE_ADDR offset, int len)
2228{
2229 struct siginfo siginfo;
2230 long pid = -1;
2231
2232 if (current_inferior == NULL)
2233 return -1;
2234
54a0b537 2235 pid = pid_of (get_thread_lwp (current_inferior));
4aa995e1
PA
2236
2237 if (debug_threads)
2238 fprintf (stderr, "%s siginfo for lwp %ld.\n",
2239 readbuf != NULL ? "Reading" : "Writing",
2240 pid);
2241
2242 if (offset > sizeof (siginfo))
2243 return -1;
2244
2245 if (ptrace (PTRACE_GETSIGINFO, pid, 0, &siginfo) != 0)
2246 return -1;
2247
2248 if (offset + len > sizeof (siginfo))
2249 len = sizeof (siginfo) - offset;
2250
2251 if (readbuf != NULL)
2252 memcpy (readbuf, (char *) &siginfo + offset, len);
2253 else
2254 {
2255 memcpy ((char *) &siginfo + offset, writebuf, len);
2256 if (ptrace (PTRACE_SETSIGINFO, pid, 0, &siginfo) != 0)
2257 return -1;
2258 }
2259
2260 return len;
2261}
2262
ce3a066d
DJ
2263static struct target_ops linux_target_ops = {
2264 linux_create_inferior,
2265 linux_attach,
2266 linux_kill,
6ad8ae5c 2267 linux_detach,
444d6139 2268 linux_join,
ce3a066d
DJ
2269 linux_thread_alive,
2270 linux_resume,
2271 linux_wait,
2272 linux_fetch_registers,
2273 linux_store_registers,
2274 linux_read_memory,
2275 linux_write_memory,
2f2893d9 2276 linux_look_up_symbols,
ef57601b 2277 linux_request_interrupt,
aa691b87 2278 linux_read_auxv,
e013ee27
OF
2279 linux_insert_watchpoint,
2280 linux_remove_watchpoint,
2281 linux_stopped_by_watchpoint,
2282 linux_stopped_data_address,
42c81e2a 2283#if defined(__UCLIBC__) && defined(HAS_NOMMU)
52fb6437 2284 linux_read_offsets,
dae5f5cf
DJ
2285#else
2286 NULL,
2287#endif
2288#ifdef USE_THREAD_DB
2289 thread_db_get_tls_address,
2290#else
2291 NULL,
52fb6437 2292#endif
59a016f0
PA
2293 NULL,
2294 hostio_last_error_from_errno,
07e059b5 2295 linux_qxfer_osdata,
4aa995e1 2296 linux_xfer_siginfo,
ce3a066d
DJ
2297};
2298
0d62e5e8
DJ
2299static void
2300linux_init_signals ()
2301{
2302 /* FIXME drow/2002-06-09: As above, we should check with LinuxThreads
2303 to find what the cancel signal actually is. */
254787d4 2304 signal (__SIGRTMIN+1, SIG_IGN);
0d62e5e8
DJ
2305}
2306
da6d8c04
DJ
2307void
2308initialize_low (void)
2309{
24a09b5f 2310 thread_db_active = 0;
ce3a066d 2311 set_target_ops (&linux_target_ops);
611cb4a5
DJ
2312 set_breakpoint_data (the_low_target.breakpoint,
2313 the_low_target.breakpoint_len);
0d62e5e8 2314 linux_init_signals ();
24a09b5f 2315 linux_test_for_tracefork ();
52fa2412
UW
2316#ifdef HAVE_LINUX_REGSETS
2317 for (num_regsets = 0; target_regsets[num_regsets].size >= 0; num_regsets++)
2318 ;
bca929d3 2319 disabled_regsets = xmalloc (num_regsets);
52fa2412 2320#endif
da6d8c04 2321}