1 /* Low-level child interface to ptrace.
3 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
4 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008
5 Free Software Foundation, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
29 #include "gdb_assert.h"
30 #include "gdb_string.h"
31 #include "gdb_ptrace.h"
35 #include "inf-child.h"
36 #include "gdbthread.h"
38 /* HACK: Save the ptrace ops returned by inf_ptrace_target. */
39 static struct target_ops *ptrace_ops_hack;
42 #ifdef PT_GET_PROCESS_STATE
45 inf_ptrace_follow_fork (struct target_ops *ops, int follow_child)
49 struct thread_info *last_tp = NULL;
51 /* FIXME: kettenis/20050720: This stuff should really be passed as
52 an argument by our caller. */
55 struct target_waitstatus status;
57 get_last_target_status (&ptid, &status);
58 gdb_assert (status.kind == TARGET_WAITKIND_FORKED);
60 pid = ptid_get_pid (ptid);
61 last_tp = find_thread_pid (ptid);
64 if (ptrace (PT_GET_PROCESS_STATE, pid,
65 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
66 perror_with_name (("ptrace"));
68 gdb_assert (pe.pe_report_event == PTRACE_FORK);
69 fpid = pe.pe_other_pid;
73 /* Copy user stepping state to the new inferior thread. */
74 struct breakpoint *step_resume_breakpoint = last_tp->step_resume_breakpoint;
75 CORE_ADDR step_range_start = last_tp->step_range_start;
76 CORE_ADDR step_range_end = last_tp->step_range_end;
77 struct frame_id step_frame_id = last_tp->step_frame_id;
79 struct thread_info *tp;
81 /* Otherwise, deleting the parent would get rid of this
83 last_tp->step_resume_breakpoint = NULL;
85 /* Before detaching from the parent, remove all breakpoints from
87 detach_breakpoints (pid);
89 if (ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
90 perror_with_name (("ptrace"));
92 /* Delete the parent. */
93 delete_thread_silent (last_tp->ptid);
96 inferior_ptid = pid_to_ptid (fpid);
97 tp = add_thread_silent (inferior_ptid);
99 tp->step_resume_breakpoint = step_resume_breakpoint;
100 tp->step_range_start = step_range_start;
101 tp->step_range_end = step_range_end;
102 tp->step_frame_id = step_frame_id;
104 /* Reset breakpoints in the child as appropriate. */
105 follow_inferior_reset_breakpoints ();
109 inferior_ptid = pid_to_ptid (pid);
110 detach_breakpoints (fpid);
112 if (ptrace (PT_DETACH, fpid, (PTRACE_TYPE_ARG3)1, 0) == -1)
113 perror_with_name (("ptrace"));
119 #endif /* PT_GET_PROCESS_STATE */
122 /* Prepare to be traced. */
127 /* "Trace me, Dr. Memory!" */
128 ptrace (PT_TRACE_ME, 0, (PTRACE_TYPE_ARG3)0, 0);
131 /* Start tracing PID. */
134 inf_ptrace_him (int pid)
136 push_target (ptrace_ops_hack);
138 /* On some targets, there must be some explicit synchronization
139 between the parent and child processes after the debugger
140 forks, and before the child execs the debuggee program. This
141 call basically gives permission for the child to exec. */
143 target_acknowledge_created_inferior (pid);
145 /* START_INFERIOR_TRAPS_EXPECTED is defined in inferior.h, and will
146 be 1 or 2 depending on whether we're starting without or with a
148 startup_inferior (START_INFERIOR_TRAPS_EXPECTED);
150 /* On some targets, there must be some explicit actions taken after
151 the inferior has been started up. */
152 target_post_startup_inferior (pid_to_ptid (pid));
155 /* Start a new inferior Unix child process. EXEC_FILE is the file to
156 run, ALLARGS is a string containing the arguments to the program.
157 ENV is the environment vector to pass. If FROM_TTY is non-zero, be
161 inf_ptrace_create_inferior (char *exec_file, char *allargs, char **env,
164 fork_inferior (exec_file, allargs, env, inf_ptrace_me, inf_ptrace_him,
168 #ifdef PT_GET_PROCESS_STATE
171 inf_ptrace_post_startup_inferior (ptid_t pid)
175 /* Set the initial event mask. */
176 memset (&pe, 0, sizeof pe);
177 pe.pe_set_event |= PTRACE_FORK;
178 if (ptrace (PT_SET_EVENT_MASK, ptid_get_pid (pid),
179 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
180 perror_with_name (("ptrace"));
185 /* Clean up a rotting corpse of an inferior after it died. */
188 inf_ptrace_mourn_inferior (void)
192 /* Wait just one more time to collect the inferior's exit status.
193 Do not check whether this succeeds though, since we may be
194 dealing with a process that we attached to. Such a process will
195 only report its exit status to its original parent. */
196 waitpid (ptid_get_pid (inferior_ptid), &status, 0);
198 unpush_target (ptrace_ops_hack);
199 generic_mourn_inferior ();
202 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
203 be chatty about it. */
206 inf_ptrace_attach (char *args, int from_tty)
213 error_no_arg (_("process-id to attach"));
216 pid = strtol (args, &dummy, 0);
217 /* Some targets don't set errno on errors, grrr! */
218 if (pid == 0 && args == dummy)
219 error (_("Illegal process-id: %s."), args);
221 if (pid == getpid ()) /* Trying to masturbate? */
222 error (_("I refuse to debug myself!"));
226 exec_file = get_exec_file (0);
229 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
230 target_pid_to_str (pid_to_ptid (pid)));
232 printf_unfiltered (_("Attaching to %s\n"),
233 target_pid_to_str (pid_to_ptid (pid)));
235 gdb_flush (gdb_stdout);
240 ptrace (PT_ATTACH, pid, (PTRACE_TYPE_ARG3)0, 0);
242 perror_with_name (("ptrace"));
245 error (_("This system does not support attaching to a process"));
248 inferior_ptid = pid_to_ptid (pid);
250 /* Always add a main thread. If some target extends the ptrace
251 target, it should decorate the ptid later with more info. */
252 add_thread_silent (inferior_ptid);
254 push_target (ptrace_ops_hack);
257 #ifdef PT_GET_PROCESS_STATE
260 inf_ptrace_post_attach (int pid)
264 /* Set the initial event mask. */
265 memset (&pe, 0, sizeof pe);
266 pe.pe_set_event |= PTRACE_FORK;
267 if (ptrace (PT_SET_EVENT_MASK, pid,
268 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
269 perror_with_name (("ptrace"));
274 /* Detach from the inferior, optionally passing it the signal
275 specified by ARGS. If FROM_TTY is non-zero, be chatty about it. */
278 inf_ptrace_detach (char *args, int from_tty)
280 pid_t pid = ptid_get_pid (inferior_ptid);
285 char *exec_file = get_exec_file (0);
288 printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file,
289 target_pid_to_str (pid_to_ptid (pid)));
290 gdb_flush (gdb_stdout);
296 /* We'd better not have left any breakpoints in the program or it'll
297 die when it hits one. Also note that this may only work if we
298 previously attached to the inferior. It *might* work if we
299 started the process ourselves. */
301 ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, sig);
303 perror_with_name (("ptrace"));
306 error (_("This system does not support detaching from a process"));
309 inferior_ptid = null_ptid;
310 unpush_target (ptrace_ops_hack);
313 /* Kill the inferior. */
316 inf_ptrace_kill (void)
318 pid_t pid = ptid_get_pid (inferior_ptid);
324 ptrace (PT_KILL, pid, (PTRACE_TYPE_ARG3)0, 0);
325 waitpid (pid, &status, 0);
327 target_mourn_inferior ();
330 /* Stop the inferior. */
333 inf_ptrace_stop (ptid_t ptid)
335 /* Send a SIGINT to the process group. This acts just like the user
336 typed a ^C on the controlling terminal. Note that using a
337 negative process number in kill() is a System V-ism. The proper
338 BSD interface is killpg(). However, all modern BSDs support the
339 System V interface too. */
340 kill (-inferior_process_group, SIGINT);
343 /* Resume execution of thread PTID, or all threads if PTID is -1. If
344 STEP is nonzero, single-step it. If SIGNAL is nonzero, give it
348 inf_ptrace_resume (ptid_t ptid, int step, enum target_signal signal)
350 pid_t pid = ptid_get_pid (ptid);
351 int request = PT_CONTINUE;
354 /* Resume all threads. Traditionally ptrace() only supports
355 single-threaded processes, so simply resume the inferior. */
356 pid = ptid_get_pid (inferior_ptid);
360 /* If this system does not support PT_STEP, a higher level
361 function will have called single_step() to transmute the step
362 request into a continue request (by setting breakpoints on
363 all possible successor instructions), so we don't have to
364 worry about that here. */
368 /* An address of (PTRACE_TYPE_ARG3)1 tells ptrace to continue from
369 where it was. If GDB wanted it to start some other way, we have
370 already written a new program counter value to the child. */
372 ptrace (request, pid, (PTRACE_TYPE_ARG3)1, target_signal_to_host (signal));
374 perror_with_name (("ptrace"));
377 /* Wait for the child specified by PTID to do something. Return the
378 process ID of the child, or MINUS_ONE_PTID in case of error; store
379 the status in *OURSTATUS. */
382 inf_ptrace_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
385 int status, save_errno;
394 pid = waitpid (ptid_get_pid (ptid), &status, 0);
397 while (pid == -1 && errno == EINTR);
400 clear_sigint_trap ();
404 fprintf_unfiltered (gdb_stderr,
405 _("Child process unexpectedly missing: %s.\n"),
406 safe_strerror (save_errno));
408 /* Claim it exited with unknown signal. */
409 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
410 ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
411 return minus_one_ptid;
414 /* Ignore terminated detached child processes. */
415 if (!WIFSTOPPED (status) && pid != ptid_get_pid (inferior_ptid))
420 #ifdef PT_GET_PROCESS_STATE
421 if (WIFSTOPPED (status))
426 if (ptrace (PT_GET_PROCESS_STATE, pid,
427 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
428 perror_with_name (("ptrace"));
430 switch (pe.pe_report_event)
433 ourstatus->kind = TARGET_WAITKIND_FORKED;
434 ourstatus->value.related_pid = pid_to_ptid (pe.pe_other_pid);
436 /* Make sure the other end of the fork is stopped too. */
437 fpid = waitpid (pe.pe_other_pid, &status, 0);
439 perror_with_name (("waitpid"));
441 if (ptrace (PT_GET_PROCESS_STATE, fpid,
442 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
443 perror_with_name (("ptrace"));
445 gdb_assert (pe.pe_report_event == PTRACE_FORK);
446 gdb_assert (pe.pe_other_pid == pid);
447 if (fpid == ptid_get_pid (inferior_ptid))
449 ourstatus->value.related_pid = pid_to_ptid (pe.pe_other_pid);
450 return pid_to_ptid (fpid);
453 return pid_to_ptid (pid);
458 store_waitstatus (ourstatus, status);
459 return pid_to_ptid (pid);
462 /* Attempt a transfer all LEN bytes starting at OFFSET between the
463 inferior's OBJECT:ANNEX space and GDB's READBUF/WRITEBUF buffer.
464 Return the number of bytes actually transferred. */
467 inf_ptrace_xfer_partial (struct target_ops *ops, enum target_object object,
468 const char *annex, gdb_byte *readbuf,
469 const gdb_byte *writebuf,
470 ULONGEST offset, LONGEST len)
472 pid_t pid = ptid_get_pid (inferior_ptid);
476 case TARGET_OBJECT_MEMORY:
478 /* OpenBSD 3.1, NetBSD 1.6 and FreeBSD 5.0 have a new PT_IO
479 request that promises to be much more efficient in reading
480 and writing data in the traced process's address space. */
482 struct ptrace_io_desc piod;
484 /* NOTE: We assume that there are no distinct address spaces
485 for instruction and data. However, on OpenBSD 3.9 and
486 later, PIOD_WRITE_D doesn't allow changing memory that's
487 mapped read-only. Since most code segments will be
488 read-only, using PIOD_WRITE_D will prevent us from
489 inserting breakpoints, so we use PIOD_WRITE_I instead. */
490 piod.piod_op = writebuf ? PIOD_WRITE_I : PIOD_READ_D;
491 piod.piod_addr = writebuf ? (void *) writebuf : readbuf;
492 piod.piod_offs = (void *) (long) offset;
496 if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
497 /* Return the actual number of bytes read or written. */
498 return piod.piod_len;
499 /* If the PT_IO request is somehow not supported, fallback on
500 using PT_WRITE_D/PT_READ_D. Otherwise we will return zero
501 to indicate failure. */
509 PTRACE_TYPE_RET word;
510 gdb_byte byte[sizeof (PTRACE_TYPE_RET)];
512 ULONGEST rounded_offset;
515 /* Round the start offset down to the next long word
517 rounded_offset = offset & -(ULONGEST) sizeof (PTRACE_TYPE_RET);
519 /* Since ptrace will transfer a single word starting at that
520 rounded_offset the partial_len needs to be adjusted down to
521 that (remember this function only does a single transfer).
522 Should the required length be even less, adjust it down
524 partial_len = (rounded_offset + sizeof (PTRACE_TYPE_RET)) - offset;
525 if (partial_len > len)
530 /* If OFFSET:PARTIAL_LEN is smaller than
531 ROUNDED_OFFSET:WORDSIZE then a read/modify write will
532 be needed. Read in the entire word. */
533 if (rounded_offset < offset
534 || (offset + partial_len
535 < rounded_offset + sizeof (PTRACE_TYPE_RET)))
536 /* Need part of initial word -- fetch it. */
537 buffer.word = ptrace (PT_READ_I, pid,
538 (PTRACE_TYPE_ARG3)(uintptr_t)
541 /* Copy data to be written over corresponding part of
543 memcpy (buffer.byte + (offset - rounded_offset),
544 writebuf, partial_len);
547 ptrace (PT_WRITE_D, pid,
548 (PTRACE_TYPE_ARG3)(uintptr_t)rounded_offset,
552 /* Using the appropriate one (I or D) is necessary for
553 Gould NP1, at least. */
555 ptrace (PT_WRITE_I, pid,
556 (PTRACE_TYPE_ARG3)(uintptr_t)rounded_offset,
566 buffer.word = ptrace (PT_READ_I, pid,
567 (PTRACE_TYPE_ARG3)(uintptr_t)rounded_offset,
571 /* Copy appropriate bytes out of the buffer. */
572 memcpy (readbuf, buffer.byte + (offset - rounded_offset),
579 case TARGET_OBJECT_UNWIND_TABLE:
582 case TARGET_OBJECT_AUXV:
585 case TARGET_OBJECT_WCOOKIE:
593 /* Return non-zero if the thread specified by PTID is alive. */
596 inf_ptrace_thread_alive (ptid_t ptid)
598 /* ??? Is kill the right way to do this? */
599 return (kill (ptid_get_pid (ptid), 0) != -1);
602 /* Print status information about what we're accessing. */
605 inf_ptrace_files_info (struct target_ops *ignore)
607 printf_filtered (_("\tUsing the running image of %s %s.\n"),
608 attach_flag ? "attached" : "child",
609 target_pid_to_str (inferior_ptid));
612 /* Create a prototype ptrace target. The client can override it with
616 inf_ptrace_target (void)
618 struct target_ops *t = inf_child_target ();
620 t->to_attach = inf_ptrace_attach;
621 t->to_detach = inf_ptrace_detach;
622 t->to_resume = inf_ptrace_resume;
623 t->to_wait = inf_ptrace_wait;
624 t->to_files_info = inf_ptrace_files_info;
625 t->to_kill = inf_ptrace_kill;
626 t->to_create_inferior = inf_ptrace_create_inferior;
627 #ifdef PT_GET_PROCESS_STATE
628 t->to_follow_fork = inf_ptrace_follow_fork;
629 t->to_post_startup_inferior = inf_ptrace_post_startup_inferior;
630 t->to_post_attach = inf_ptrace_post_attach;
632 t->to_mourn_inferior = inf_ptrace_mourn_inferior;
633 t->to_thread_alive = inf_ptrace_thread_alive;
634 t->to_pid_to_str = normal_pid_to_str;
635 t->to_stop = inf_ptrace_stop;
636 t->to_xfer_partial = inf_ptrace_xfer_partial;
643 /* Pointer to a function that returns the offset within the user area
644 where a particular register is stored. */
645 static CORE_ADDR (*inf_ptrace_register_u_offset)(struct gdbarch *, int, int);
647 /* Fetch register REGNUM from the inferior. */
650 inf_ptrace_fetch_register (struct regcache *regcache, int regnum)
652 struct gdbarch *gdbarch = get_regcache_arch (regcache);
655 PTRACE_TYPE_RET *buf;
658 /* This isn't really an address, but ptrace thinks of it as one. */
659 addr = inf_ptrace_register_u_offset (gdbarch, regnum, 0);
660 if (addr == (CORE_ADDR)-1
661 || gdbarch_cannot_fetch_register (gdbarch, regnum))
663 regcache_raw_supply (regcache, regnum, NULL);
667 /* Cater for systems like GNU/Linux, that implement threads as
668 separate processes. */
669 pid = ptid_get_lwp (inferior_ptid);
671 pid = ptid_get_pid (inferior_ptid);
673 size = register_size (gdbarch, regnum);
674 gdb_assert ((size % sizeof (PTRACE_TYPE_RET)) == 0);
677 /* Read the register contents from the inferior a chunk at a time. */
678 for (i = 0; i < size / sizeof (PTRACE_TYPE_RET); i++)
681 buf[i] = ptrace (PT_READ_U, pid, (PTRACE_TYPE_ARG3)(uintptr_t)addr, 0);
683 error (_("Couldn't read register %s (#%d): %s."),
684 gdbarch_register_name (gdbarch, regnum),
685 regnum, safe_strerror (errno));
687 addr += sizeof (PTRACE_TYPE_RET);
689 regcache_raw_supply (regcache, regnum, buf);
692 /* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
693 for all registers. */
696 inf_ptrace_fetch_registers (struct regcache *regcache, int regnum)
700 regnum < gdbarch_num_regs (get_regcache_arch (regcache));
702 inf_ptrace_fetch_register (regcache, regnum);
704 inf_ptrace_fetch_register (regcache, regnum);
707 /* Store register REGNUM into the inferior. */
710 inf_ptrace_store_register (const struct regcache *regcache, int regnum)
712 struct gdbarch *gdbarch = get_regcache_arch (regcache);
715 PTRACE_TYPE_RET *buf;
718 /* This isn't really an address, but ptrace thinks of it as one. */
719 addr = inf_ptrace_register_u_offset (gdbarch, regnum, 1);
720 if (addr == (CORE_ADDR)-1
721 || gdbarch_cannot_store_register (gdbarch, regnum))
724 /* Cater for systems like GNU/Linux, that implement threads as
725 separate processes. */
726 pid = ptid_get_lwp (inferior_ptid);
728 pid = ptid_get_pid (inferior_ptid);
730 size = register_size (gdbarch, regnum);
731 gdb_assert ((size % sizeof (PTRACE_TYPE_RET)) == 0);
734 /* Write the register contents into the inferior a chunk at a time. */
735 regcache_raw_collect (regcache, regnum, buf);
736 for (i = 0; i < size / sizeof (PTRACE_TYPE_RET); i++)
739 ptrace (PT_WRITE_U, pid, (PTRACE_TYPE_ARG3)(uintptr_t)addr, buf[i]);
741 error (_("Couldn't write register %s (#%d): %s."),
742 gdbarch_register_name (gdbarch, regnum),
743 regnum, safe_strerror (errno));
745 addr += sizeof (PTRACE_TYPE_RET);
749 /* Store register REGNUM back into the inferior. If REGNUM is -1, do
750 this for all registers. */
753 inf_ptrace_store_registers (struct regcache *regcache, int regnum)
757 regnum < gdbarch_num_regs (get_regcache_arch (regcache));
759 inf_ptrace_store_register (regcache, regnum);
761 inf_ptrace_store_register (regcache, regnum);
764 /* Create a "traditional" ptrace target. REGISTER_U_OFFSET should be
765 a function returning the offset within the user area where a
766 particular register is stored. */
769 inf_ptrace_trad_target (CORE_ADDR (*register_u_offset)
770 (struct gdbarch *, int, int))
772 struct target_ops *t = inf_ptrace_target();
774 gdb_assert (register_u_offset);
775 inf_ptrace_register_u_offset = register_u_offset;
776 t->to_fetch_registers = inf_ptrace_fetch_registers;
777 t->to_store_registers = inf_ptrace_store_registers;