1 /* Low-level child interface to ptrace.
3 Copyright (C) 1988-2018 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
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.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
27 #include "nat/gdb_ptrace.h"
31 #include "inf-ptrace.h"
32 #include "inf-child.h"
33 #include "gdbthread.h"
34 #include "nat/fork-inferior.h"
39 /* A unique_ptr helper to unpush a target. */
41 struct target_unpusher
43 void operator() (struct target_ops *ops) const
49 /* A unique_ptr that unpushes a target on destruction. */
51 typedef std::unique_ptr<struct target_ops, target_unpusher> target_unpush_up;
55 inf_ptrace_target::~inf_ptrace_target ()
58 #ifdef PT_GET_PROCESS_STATE
60 /* Target hook for follow_fork. On entry and at return inferior_ptid is
61 the ptid of the followed inferior. */
64 inf_ptrace_target::follow_fork (int follow_child, int detach_fork)
68 struct thread_info *tp = inferior_thread ();
69 pid_t child_pid = tp->pending_follow.value.related_pid.pid ();
71 /* Breakpoints have already been detached from the child by
74 if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
75 perror_with_name (("ptrace"));
82 inf_ptrace_target::insert_fork_catchpoint (int pid)
88 inf_ptrace_target::remove_fork_catchpoint (int pid)
93 #endif /* PT_GET_PROCESS_STATE */
96 /* Prepare to be traced. */
101 /* "Trace me, Dr. Memory!" */
102 if (ptrace (PT_TRACE_ME, 0, (PTRACE_TYPE_ARG3) 0, 0) < 0)
103 trace_start_error_with_name ("ptrace");
106 /* Start a new inferior Unix child process. EXEC_FILE is the file to
107 run, ALLARGS is a string containing the arguments to the program.
108 ENV is the environment vector to pass. If FROM_TTY is non-zero, be
112 inf_ptrace_target::create_inferior (const char *exec_file,
113 const std::string &allargs,
114 char **env, int from_tty)
119 /* Do not change either targets above or the same target if already present.
120 The reason is the target stack is shared across multiple inferiors. */
121 int ops_already_pushed = target_is_pushed (this);
123 target_unpush_up unpusher;
124 if (! ops_already_pushed)
126 /* Clear possible core file with its process_stratum. */
128 unpusher.reset (this);
131 pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL,
135 /* We have something that executes now. We'll be running through
136 the shell at this point (if startup-with-shell is true), but the
137 pid shouldn't change. */
138 add_thread_silent (ptid);
142 gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED);
144 /* On some targets, there must be some explicit actions taken after
145 the inferior has been started up. */
146 target_post_startup_inferior (ptid);
149 #ifdef PT_GET_PROCESS_STATE
152 inf_ptrace_target::post_startup_inferior (ptid_t pid)
156 /* Set the initial event mask. */
157 memset (&pe, 0, sizeof pe);
158 pe.pe_set_event |= PTRACE_FORK;
159 if (ptrace (PT_SET_EVENT_MASK, pid.pid (),
160 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
161 perror_with_name (("ptrace"));
166 /* Clean up a rotting corpse of an inferior after it died. */
169 inf_ptrace_target::mourn_inferior ()
173 /* Wait just one more time to collect the inferior's exit status.
174 Do not check whether this succeeds though, since we may be
175 dealing with a process that we attached to. Such a process will
176 only report its exit status to its original parent. */
177 waitpid (inferior_ptid.pid (), &status, 0);
179 inf_child_target::mourn_inferior ();
182 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
183 be chatty about it. */
186 inf_ptrace_target::attach (const char *args, int from_tty)
190 struct inferior *inf;
192 /* Do not change either targets above or the same target if already present.
193 The reason is the target stack is shared across multiple inferiors. */
194 int ops_already_pushed = target_is_pushed (this);
196 pid = parse_pid_to_attach (args);
198 if (pid == getpid ()) /* Trying to masturbate? */
199 error (_("I refuse to debug myself!"));
201 target_unpush_up unpusher;
202 if (! ops_already_pushed)
204 /* target_pid_to_str already uses the target. Also clear possible core
205 file with its process_stratum. */
207 unpusher.reset (this);
212 exec_file = get_exec_file (0);
215 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
216 target_pid_to_str (ptid_t (pid)));
218 printf_unfiltered (_("Attaching to %s\n"),
219 target_pid_to_str (ptid_t (pid)));
221 gdb_flush (gdb_stdout);
226 ptrace (PT_ATTACH, pid, (PTRACE_TYPE_ARG3)0, 0);
228 perror_with_name (("ptrace"));
230 error (_("This system does not support attaching to a process"));
233 inf = current_inferior ();
234 inferior_appeared (inf, pid);
235 inf->attach_flag = 1;
236 inferior_ptid = ptid_t (pid);
238 /* Always add a main thread. If some target extends the ptrace
239 target, it should decorate the ptid later with more info. */
240 thread_info *thr = add_thread_silent (inferior_ptid);
241 /* Don't consider the thread stopped until we've processed its
242 initial SIGSTOP stop. */
243 set_executing (thr->ptid, true);
248 #ifdef PT_GET_PROCESS_STATE
251 inf_ptrace_target::post_attach (int pid)
255 /* Set the initial event mask. */
256 memset (&pe, 0, sizeof pe);
257 pe.pe_set_event |= PTRACE_FORK;
258 if (ptrace (PT_SET_EVENT_MASK, pid,
259 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
260 perror_with_name (("ptrace"));
265 /* Detach from the inferior. If FROM_TTY is non-zero, be chatty about it. */
268 inf_ptrace_target::detach (inferior *inf, int from_tty)
270 pid_t pid = inferior_ptid.pid ();
272 target_announce_detach (from_tty);
275 /* We'd better not have left any breakpoints in the program or it'll
276 die when it hits one. Also note that this may only work if we
277 previously attached to the inferior. It *might* work if we
278 started the process ourselves. */
280 ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, 0);
282 perror_with_name (("ptrace"));
284 error (_("This system does not support detaching from a process"));
287 detach_success (inf);
290 /* See inf-ptrace.h. */
293 inf_ptrace_target::detach_success (inferior *inf)
295 inferior_ptid = null_ptid;
296 detach_inferior (inf);
298 maybe_unpush_target ();
301 /* Kill the inferior. */
304 inf_ptrace_target::kill ()
306 pid_t pid = inferior_ptid.pid ();
312 ptrace (PT_KILL, pid, (PTRACE_TYPE_ARG3)0, 0);
313 waitpid (pid, &status, 0);
315 target_mourn_inferior (inferior_ptid);
318 /* Return which PID to pass to ptrace in order to observe/control the
319 tracee identified by PTID. */
322 get_ptrace_pid (ptid_t ptid)
326 /* If we have an LWPID to work with, use it. Otherwise, we're
327 dealing with a non-threaded program/target. */
334 /* Resume execution of thread PTID, or all threads if PTID is -1. If
335 STEP is nonzero, single-step it. If SIGNAL is nonzero, give it
339 inf_ptrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
344 if (minus_one_ptid == ptid)
345 /* Resume all threads. Traditionally ptrace() only supports
346 single-threaded processes, so simply resume the inferior. */
347 pid = inferior_ptid.pid ();
349 pid = get_ptrace_pid (ptid);
351 if (catch_syscall_enabled () > 0)
352 request = PT_SYSCALL;
354 request = PT_CONTINUE;
358 /* If this system does not support PT_STEP, a higher level
359 function will have called single_step() to transmute the step
360 request into a continue request (by setting breakpoints on
361 all possible successor instructions), so we don't have to
362 worry about that here. */
366 /* An address of (PTRACE_TYPE_ARG3)1 tells ptrace to continue from
367 where it was. If GDB wanted it to start some other way, we have
368 already written a new program counter value to the child. */
370 ptrace (request, pid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal));
372 perror_with_name (("ptrace"));
375 /* Wait for the child specified by PTID to do something. Return the
376 process ID of the child, or MINUS_ONE_PTID in case of error; store
377 the status in *OURSTATUS. */
380 inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
384 int status, save_errno;
392 pid = waitpid (ptid.pid (), &status, 0);
395 while (pid == -1 && errno == EINTR);
397 clear_sigint_trap ();
401 fprintf_unfiltered (gdb_stderr,
402 _("Child process unexpectedly missing: %s.\n"),
403 safe_strerror (save_errno));
405 /* Claim it exited with unknown signal. */
406 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
407 ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
408 return inferior_ptid;
411 /* Ignore terminated detached child processes. */
412 if (!WIFSTOPPED (status) && pid != inferior_ptid.pid ())
417 #ifdef PT_GET_PROCESS_STATE
418 if (WIFSTOPPED (status))
423 if (ptrace (PT_GET_PROCESS_STATE, pid,
424 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
425 perror_with_name (("ptrace"));
427 switch (pe.pe_report_event)
430 ourstatus->kind = TARGET_WAITKIND_FORKED;
431 ourstatus->value.related_pid = ptid_t (pe.pe_other_pid);
433 /* Make sure the other end of the fork is stopped too. */
434 fpid = waitpid (pe.pe_other_pid, &status, 0);
436 perror_with_name (("waitpid"));
438 if (ptrace (PT_GET_PROCESS_STATE, fpid,
439 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
440 perror_with_name (("ptrace"));
442 gdb_assert (pe.pe_report_event == PTRACE_FORK);
443 gdb_assert (pe.pe_other_pid == pid);
444 if (fpid == inferior_ptid.pid ())
446 ourstatus->value.related_pid = ptid_t (pe.pe_other_pid);
447 return ptid_t (fpid);
455 store_waitstatus (ourstatus, status);
459 /* Transfer data via ptrace into process PID's memory from WRITEBUF, or
460 from process PID's memory into READBUF. Start at target address ADDR
461 and transfer up to LEN bytes. Exactly one of READBUF and WRITEBUF must
462 be non-null. Return the number of transferred bytes. */
465 inf_ptrace_peek_poke (pid_t pid, gdb_byte *readbuf,
466 const gdb_byte *writebuf,
467 ULONGEST addr, ULONGEST len)
472 /* We transfer aligned words. Thus align ADDR down to a word
473 boundary and determine how many bytes to skip at the
475 ULONGEST skip = addr & (sizeof (PTRACE_TYPE_RET) - 1);
480 n += chunk, addr += sizeof (PTRACE_TYPE_RET), skip = 0)
482 /* Restrict to a chunk that fits in the current word. */
483 chunk = std::min (sizeof (PTRACE_TYPE_RET) - skip, len - n);
485 /* Use a union for type punning. */
488 PTRACE_TYPE_RET word;
489 gdb_byte byte[sizeof (PTRACE_TYPE_RET)];
492 /* Read the word, also when doing a partial word write. */
493 if (readbuf != NULL || chunk < sizeof (PTRACE_TYPE_RET))
496 buf.word = ptrace (PT_READ_I, pid,
497 (PTRACE_TYPE_ARG3)(uintptr_t) addr, 0);
501 memcpy (readbuf + n, buf.byte + skip, chunk);
503 if (writebuf != NULL)
505 memcpy (buf.byte + skip, writebuf + n, chunk);
507 ptrace (PT_WRITE_D, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
511 /* Using the appropriate one (I or D) is necessary for
512 Gould NP1, at least. */
514 ptrace (PT_WRITE_I, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
525 /* Implement the to_xfer_partial target_ops method. */
527 enum target_xfer_status
528 inf_ptrace_target::xfer_partial (enum target_object object,
529 const char *annex, gdb_byte *readbuf,
530 const gdb_byte *writebuf,
531 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
533 pid_t pid = get_ptrace_pid (inferior_ptid);
537 case TARGET_OBJECT_MEMORY:
539 /* OpenBSD 3.1, NetBSD 1.6 and FreeBSD 5.0 have a new PT_IO
540 request that promises to be much more efficient in reading
541 and writing data in the traced process's address space. */
543 struct ptrace_io_desc piod;
545 /* NOTE: We assume that there are no distinct address spaces
546 for instruction and data. However, on OpenBSD 3.9 and
547 later, PIOD_WRITE_D doesn't allow changing memory that's
548 mapped read-only. Since most code segments will be
549 read-only, using PIOD_WRITE_D will prevent us from
550 inserting breakpoints, so we use PIOD_WRITE_I instead. */
551 piod.piod_op = writebuf ? PIOD_WRITE_I : PIOD_READ_D;
552 piod.piod_addr = writebuf ? (void *) writebuf : readbuf;
553 piod.piod_offs = (void *) (long) offset;
557 if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
559 /* Return the actual number of bytes read or written. */
560 *xfered_len = piod.piod_len;
561 return (piod.piod_len == 0) ? TARGET_XFER_EOF : TARGET_XFER_OK;
563 /* If the PT_IO request is somehow not supported, fallback on
564 using PT_WRITE_D/PT_READ_D. Otherwise we will return zero
565 to indicate failure. */
567 return TARGET_XFER_EOF;
570 *xfered_len = inf_ptrace_peek_poke (pid, readbuf, writebuf,
572 return *xfered_len != 0 ? TARGET_XFER_OK : TARGET_XFER_EOF;
574 case TARGET_OBJECT_UNWIND_TABLE:
575 return TARGET_XFER_E_IO;
577 case TARGET_OBJECT_AUXV:
578 #if defined (PT_IO) && defined (PIOD_READ_AUXV)
579 /* OpenBSD 4.5 has a new PIOD_READ_AUXV operation for the PT_IO
580 request that allows us to read the auxilliary vector. Other
581 BSD's may follow if they feel the need to support PIE. */
583 struct ptrace_io_desc piod;
586 return TARGET_XFER_E_IO;
587 piod.piod_op = PIOD_READ_AUXV;
588 piod.piod_addr = readbuf;
589 piod.piod_offs = (void *) (long) offset;
593 if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
595 /* Return the actual number of bytes read or written. */
596 *xfered_len = piod.piod_len;
597 return (piod.piod_len == 0) ? TARGET_XFER_EOF : TARGET_XFER_OK;
601 return TARGET_XFER_E_IO;
603 case TARGET_OBJECT_WCOOKIE:
604 return TARGET_XFER_E_IO;
607 return TARGET_XFER_E_IO;
611 /* Return non-zero if the thread specified by PTID is alive. */
614 inf_ptrace_target::thread_alive (ptid_t ptid)
616 /* ??? Is kill the right way to do this? */
617 return (::kill (ptid.pid (), 0) != -1);
620 /* Print status information about what we're accessing. */
623 inf_ptrace_target::files_info ()
625 struct inferior *inf = current_inferior ();
627 printf_filtered (_("\tUsing the running image of %s %s.\n"),
628 inf->attach_flag ? "attached" : "child",
629 target_pid_to_str (inferior_ptid));
633 inf_ptrace_target::pid_to_str (ptid_t ptid)
635 return normal_pid_to_str (ptid);
638 #if defined (PT_IO) && defined (PIOD_READ_AUXV)
640 /* Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
641 Return 0 if *READPTR is already at the end of the buffer.
642 Return -1 if there is insufficient buffer for a whole entry.
643 Return 1 if an entry was read into *TYPEP and *VALP. */
646 inf_ptrace_target::auxv_parse (gdb_byte **readptr, gdb_byte *endptr,
647 CORE_ADDR *typep, CORE_ADDR *valp)
649 struct type *int_type = builtin_type (target_gdbarch ())->builtin_int;
650 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
651 const int sizeof_auxv_type = TYPE_LENGTH (int_type);
652 const int sizeof_auxv_val = TYPE_LENGTH (ptr_type);
653 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
654 gdb_byte *ptr = *readptr;
659 if (endptr - ptr < 2 * sizeof_auxv_val)
662 *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order);
663 ptr += sizeof_auxv_val; /* Alignment. */
664 *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order);
665 ptr += sizeof_auxv_val;