Update copyright year in gdbarch.sh doc/gdb.texinfo and doc/refcard.tex
[binutils-gdb.git] / gdb / inf-ptrace.c
blob4ad1cd0622725c90a1414fb5471f032453d60e79
1 /* Low-level child interface to ptrace.
3 Copyright (C) 1988-2020 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/>. */
20 #include "defs.h"
21 #include "command.h"
22 #include "inferior.h"
23 #include "inflow.h"
24 #include "terminal.h"
25 #include "gdbcore.h"
26 #include "regcache.h"
27 #include "nat/gdb_ptrace.h"
28 #include "gdbsupport/gdb_wait.h"
29 #include <signal.h>
31 #include "inf-ptrace.h"
32 #include "inf-child.h"
33 #include "gdbthread.h"
34 #include "nat/fork-inferior.h"
35 #include "utils.h"
36 #include "gdbarch.h"
40 /* A unique_ptr helper to unpush a target. */
42 struct target_unpusher
44 void operator() (struct target_ops *ops) const
46 unpush_target (ops);
50 /* A unique_ptr that unpushes a target on destruction. */
52 typedef std::unique_ptr<struct target_ops, target_unpusher> target_unpush_up;
56 inf_ptrace_target::~inf_ptrace_target ()
59 #ifdef PT_GET_PROCESS_STATE
61 /* Target hook for follow_fork. On entry and at return inferior_ptid is
62 the ptid of the followed inferior. */
64 int
65 inf_ptrace_target::follow_fork (int follow_child, int detach_fork)
67 if (!follow_child)
69 struct thread_info *tp = inferior_thread ();
70 pid_t child_pid = tp->pending_follow.value.related_pid.pid ();
72 /* Breakpoints have already been detached from the child by
73 infrun.c. */
75 if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
76 perror_with_name (("ptrace"));
79 return 0;
82 int
83 inf_ptrace_target::insert_fork_catchpoint (int pid)
85 return 0;
88 int
89 inf_ptrace_target::remove_fork_catchpoint (int pid)
91 return 0;
94 #endif /* PT_GET_PROCESS_STATE */
97 /* Prepare to be traced. */
99 static void
100 inf_ptrace_me (void)
102 /* "Trace me, Dr. Memory!" */
103 if (ptrace (PT_TRACE_ME, 0, (PTRACE_TYPE_ARG3) 0, 0) < 0)
104 trace_start_error_with_name ("ptrace");
107 /* Start a new inferior Unix child process. EXEC_FILE is the file to
108 run, ALLARGS is a string containing the arguments to the program.
109 ENV is the environment vector to pass. If FROM_TTY is non-zero, be
110 chatty about it. */
112 void
113 inf_ptrace_target::create_inferior (const char *exec_file,
114 const std::string &allargs,
115 char **env, int from_tty)
117 pid_t pid;
118 ptid_t ptid;
120 /* Do not change either targets above or the same target if already present.
121 The reason is the target stack is shared across multiple inferiors. */
122 int ops_already_pushed = target_is_pushed (this);
124 target_unpush_up unpusher;
125 if (! ops_already_pushed)
127 /* Clear possible core file with its process_stratum. */
128 push_target (this);
129 unpusher.reset (this);
132 pid = fork_inferior (exec_file, allargs, env, inf_ptrace_me, NULL,
133 NULL, NULL, NULL);
135 ptid = ptid_t (pid);
136 /* We have something that executes now. We'll be running through
137 the shell at this point (if startup-with-shell is true), but the
138 pid shouldn't change. */
139 add_thread_silent (ptid);
141 unpusher.release ();
143 gdb_startup_inferior (pid, START_INFERIOR_TRAPS_EXPECTED);
145 /* On some targets, there must be some explicit actions taken after
146 the inferior has been started up. */
147 target_post_startup_inferior (ptid);
150 #ifdef PT_GET_PROCESS_STATE
152 void
153 inf_ptrace_target::post_startup_inferior (ptid_t pid)
155 ptrace_event_t pe;
157 /* Set the initial event mask. */
158 memset (&pe, 0, sizeof pe);
159 pe.pe_set_event |= PTRACE_FORK;
160 if (ptrace (PT_SET_EVENT_MASK, pid.pid (),
161 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
162 perror_with_name (("ptrace"));
165 #endif
167 /* Clean up a rotting corpse of an inferior after it died. */
169 void
170 inf_ptrace_target::mourn_inferior ()
172 int status;
174 /* Wait just one more time to collect the inferior's exit status.
175 Do not check whether this succeeds though, since we may be
176 dealing with a process that we attached to. Such a process will
177 only report its exit status to its original parent. */
178 waitpid (inferior_ptid.pid (), &status, 0);
180 inf_child_target::mourn_inferior ();
183 /* Attach to the process specified by ARGS. If FROM_TTY is non-zero,
184 be chatty about it. */
186 void
187 inf_ptrace_target::attach (const char *args, int from_tty)
189 pid_t pid;
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. */
206 push_target (this);
207 unpusher.reset (this);
210 if (from_tty)
212 const char *exec_file = get_exec_file (0);
214 if (exec_file)
215 printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
216 target_pid_to_str (ptid_t (pid)).c_str ());
217 else
218 printf_unfiltered (_("Attaching to %s\n"),
219 target_pid_to_str (ptid_t (pid)).c_str ());
222 #ifdef PT_ATTACH
223 errno = 0;
224 ptrace (PT_ATTACH, pid, (PTRACE_TYPE_ARG3)0, 0);
225 if (errno != 0)
226 perror_with_name (("ptrace"));
227 #else
228 error (_("This system does not support attaching to a process"));
229 #endif
231 inf = current_inferior ();
232 inferior_appeared (inf, pid);
233 inf->attach_flag = 1;
234 inferior_ptid = ptid_t (pid);
236 /* Always add a main thread. If some target extends the ptrace
237 target, it should decorate the ptid later with more info. */
238 thread_info *thr = add_thread_silent (inferior_ptid);
239 /* Don't consider the thread stopped until we've processed its
240 initial SIGSTOP stop. */
241 set_executing (thr->ptid, true);
243 unpusher.release ();
246 #ifdef PT_GET_PROCESS_STATE
248 void
249 inf_ptrace_target::post_attach (int pid)
251 ptrace_event_t pe;
253 /* Set the initial event mask. */
254 memset (&pe, 0, sizeof pe);
255 pe.pe_set_event |= PTRACE_FORK;
256 if (ptrace (PT_SET_EVENT_MASK, pid,
257 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
258 perror_with_name (("ptrace"));
261 #endif
263 /* Detach from the inferior. If FROM_TTY is non-zero, be chatty about it. */
265 void
266 inf_ptrace_target::detach (inferior *inf, int from_tty)
268 pid_t pid = inferior_ptid.pid ();
270 target_announce_detach (from_tty);
272 #ifdef PT_DETACH
273 /* We'd better not have left any breakpoints in the program or it'll
274 die when it hits one. Also note that this may only work if we
275 previously attached to the inferior. It *might* work if we
276 started the process ourselves. */
277 errno = 0;
278 ptrace (PT_DETACH, pid, (PTRACE_TYPE_ARG3)1, 0);
279 if (errno != 0)
280 perror_with_name (("ptrace"));
281 #else
282 error (_("This system does not support detaching from a process"));
283 #endif
285 detach_success (inf);
288 /* See inf-ptrace.h. */
290 void
291 inf_ptrace_target::detach_success (inferior *inf)
293 inferior_ptid = null_ptid;
294 detach_inferior (inf);
296 maybe_unpush_target ();
299 /* Kill the inferior. */
301 void
302 inf_ptrace_target::kill ()
304 pid_t pid = inferior_ptid.pid ();
305 int status;
307 if (pid == 0)
308 return;
310 ptrace (PT_KILL, pid, (PTRACE_TYPE_ARG3)0, 0);
311 waitpid (pid, &status, 0);
313 target_mourn_inferior (inferior_ptid);
316 /* Return which PID to pass to ptrace in order to observe/control the
317 tracee identified by PTID. */
319 pid_t
320 get_ptrace_pid (ptid_t ptid)
322 pid_t pid;
324 /* If we have an LWPID to work with, use it. Otherwise, we're
325 dealing with a non-threaded program/target. */
326 pid = ptid.lwp ();
327 if (pid == 0)
328 pid = ptid.pid ();
329 return pid;
332 /* Resume execution of thread PTID, or all threads if PTID is -1. If
333 STEP is nonzero, single-step it. If SIGNAL is nonzero, give it
334 that signal. */
336 void
337 inf_ptrace_target::resume (ptid_t ptid, int step, enum gdb_signal signal)
339 pid_t pid;
340 int request;
342 if (minus_one_ptid == ptid)
343 /* Resume all threads. Traditionally ptrace() only supports
344 single-threaded processes, so simply resume the inferior. */
345 pid = inferior_ptid.pid ();
346 else
347 pid = get_ptrace_pid (ptid);
349 if (catch_syscall_enabled () > 0)
350 request = PT_SYSCALL;
351 else
352 request = PT_CONTINUE;
354 if (step)
356 /* If this system does not support PT_STEP, a higher level
357 function will have called single_step() to transmute the step
358 request into a continue request (by setting breakpoints on
359 all possible successor instructions), so we don't have to
360 worry about that here. */
361 request = PT_STEP;
364 /* An address of (PTRACE_TYPE_ARG3)1 tells ptrace to continue from
365 where it was. If GDB wanted it to start some other way, we have
366 already written a new program counter value to the child. */
367 errno = 0;
368 ptrace (request, pid, (PTRACE_TYPE_ARG3)1, gdb_signal_to_host (signal));
369 if (errno != 0)
370 perror_with_name (("ptrace"));
373 /* Wait for the child specified by PTID to do something. Return the
374 process ID of the child, or MINUS_ONE_PTID in case of error; store
375 the status in *OURSTATUS. */
377 ptid_t
378 inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
379 int options)
381 pid_t pid;
382 int status, save_errno;
386 set_sigint_trap ();
390 pid = waitpid (ptid.pid (), &status, 0);
391 save_errno = errno;
393 while (pid == -1 && errno == EINTR);
395 clear_sigint_trap ();
397 if (pid == -1)
399 fprintf_unfiltered (gdb_stderr,
400 _("Child process unexpectedly missing: %s.\n"),
401 safe_strerror (save_errno));
403 /* Claim it exited with unknown signal. */
404 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
405 ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
406 return inferior_ptid;
409 /* Ignore terminated detached child processes. */
410 if (!WIFSTOPPED (status) && pid != inferior_ptid.pid ())
411 pid = -1;
413 while (pid == -1);
415 #ifdef PT_GET_PROCESS_STATE
416 if (WIFSTOPPED (status))
418 ptrace_state_t pe;
419 pid_t fpid;
421 if (ptrace (PT_GET_PROCESS_STATE, pid,
422 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
423 perror_with_name (("ptrace"));
425 switch (pe.pe_report_event)
427 case PTRACE_FORK:
428 ourstatus->kind = TARGET_WAITKIND_FORKED;
429 ourstatus->value.related_pid = ptid_t (pe.pe_other_pid);
431 /* Make sure the other end of the fork is stopped too. */
432 fpid = waitpid (pe.pe_other_pid, &status, 0);
433 if (fpid == -1)
434 perror_with_name (("waitpid"));
436 if (ptrace (PT_GET_PROCESS_STATE, fpid,
437 (PTRACE_TYPE_ARG3)&pe, sizeof pe) == -1)
438 perror_with_name (("ptrace"));
440 gdb_assert (pe.pe_report_event == PTRACE_FORK);
441 gdb_assert (pe.pe_other_pid == pid);
442 if (fpid == inferior_ptid.pid ())
444 ourstatus->value.related_pid = ptid_t (pe.pe_other_pid);
445 return ptid_t (fpid);
448 return ptid_t (pid);
451 #endif
453 store_waitstatus (ourstatus, status);
454 return ptid_t (pid);
457 /* Transfer data via ptrace into process PID's memory from WRITEBUF, or
458 from process PID's memory into READBUF. Start at target address ADDR
459 and transfer up to LEN bytes. Exactly one of READBUF and WRITEBUF must
460 be non-null. Return the number of transferred bytes. */
462 static ULONGEST
463 inf_ptrace_peek_poke (pid_t pid, gdb_byte *readbuf,
464 const gdb_byte *writebuf,
465 ULONGEST addr, ULONGEST len)
467 ULONGEST n;
468 unsigned int chunk;
470 /* We transfer aligned words. Thus align ADDR down to a word
471 boundary and determine how many bytes to skip at the
472 beginning. */
473 ULONGEST skip = addr & (sizeof (PTRACE_TYPE_RET) - 1);
474 addr -= skip;
476 for (n = 0;
477 n < len;
478 n += chunk, addr += sizeof (PTRACE_TYPE_RET), skip = 0)
480 /* Restrict to a chunk that fits in the current word. */
481 chunk = std::min (sizeof (PTRACE_TYPE_RET) - skip, len - n);
483 /* Use a union for type punning. */
484 union
486 PTRACE_TYPE_RET word;
487 gdb_byte byte[sizeof (PTRACE_TYPE_RET)];
488 } buf;
490 /* Read the word, also when doing a partial word write. */
491 if (readbuf != NULL || chunk < sizeof (PTRACE_TYPE_RET))
493 errno = 0;
494 buf.word = ptrace (PT_READ_I, pid,
495 (PTRACE_TYPE_ARG3)(uintptr_t) addr, 0);
496 if (errno != 0)
497 break;
498 if (readbuf != NULL)
499 memcpy (readbuf + n, buf.byte + skip, chunk);
501 if (writebuf != NULL)
503 memcpy (buf.byte + skip, writebuf + n, chunk);
504 errno = 0;
505 ptrace (PT_WRITE_D, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
506 buf.word);
507 if (errno != 0)
509 /* Using the appropriate one (I or D) is necessary for
510 Gould NP1, at least. */
511 errno = 0;
512 ptrace (PT_WRITE_I, pid, (PTRACE_TYPE_ARG3)(uintptr_t) addr,
513 buf.word);
514 if (errno != 0)
515 break;
520 return n;
523 /* Implement the to_xfer_partial target_ops method. */
525 enum target_xfer_status
526 inf_ptrace_target::xfer_partial (enum target_object object,
527 const char *annex, gdb_byte *readbuf,
528 const gdb_byte *writebuf,
529 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
531 pid_t pid = get_ptrace_pid (inferior_ptid);
533 switch (object)
535 case TARGET_OBJECT_MEMORY:
536 #ifdef PT_IO
537 /* OpenBSD 3.1, NetBSD 1.6 and FreeBSD 5.0 have a new PT_IO
538 request that promises to be much more efficient in reading
539 and writing data in the traced process's address space. */
541 struct ptrace_io_desc piod;
543 /* NOTE: We assume that there are no distinct address spaces
544 for instruction and data. However, on OpenBSD 3.9 and
545 later, PIOD_WRITE_D doesn't allow changing memory that's
546 mapped read-only. Since most code segments will be
547 read-only, using PIOD_WRITE_D will prevent us from
548 inserting breakpoints, so we use PIOD_WRITE_I instead. */
549 piod.piod_op = writebuf ? PIOD_WRITE_I : PIOD_READ_D;
550 piod.piod_addr = writebuf ? (void *) writebuf : readbuf;
551 piod.piod_offs = (void *) (long) offset;
552 piod.piod_len = len;
554 errno = 0;
555 if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
557 /* Return the actual number of bytes read or written. */
558 *xfered_len = piod.piod_len;
559 return (piod.piod_len == 0) ? TARGET_XFER_EOF : TARGET_XFER_OK;
561 /* If the PT_IO request is somehow not supported, fallback on
562 using PT_WRITE_D/PT_READ_D. Otherwise we will return zero
563 to indicate failure. */
564 if (errno != EINVAL)
565 return TARGET_XFER_EOF;
567 #endif
568 *xfered_len = inf_ptrace_peek_poke (pid, readbuf, writebuf,
569 offset, len);
570 return *xfered_len != 0 ? TARGET_XFER_OK : TARGET_XFER_EOF;
572 case TARGET_OBJECT_UNWIND_TABLE:
573 return TARGET_XFER_E_IO;
575 case TARGET_OBJECT_AUXV:
576 #if defined (PT_IO) && defined (PIOD_READ_AUXV)
577 /* OpenBSD 4.5 has a new PIOD_READ_AUXV operation for the PT_IO
578 request that allows us to read the auxilliary vector. Other
579 BSD's may follow if they feel the need to support PIE. */
581 struct ptrace_io_desc piod;
583 if (writebuf)
584 return TARGET_XFER_E_IO;
585 piod.piod_op = PIOD_READ_AUXV;
586 piod.piod_addr = readbuf;
587 piod.piod_offs = (void *) (long) offset;
588 piod.piod_len = len;
590 errno = 0;
591 if (ptrace (PT_IO, pid, (caddr_t)&piod, 0) == 0)
593 /* Return the actual number of bytes read or written. */
594 *xfered_len = piod.piod_len;
595 return (piod.piod_len == 0) ? TARGET_XFER_EOF : TARGET_XFER_OK;
598 #endif
599 return TARGET_XFER_E_IO;
601 case TARGET_OBJECT_WCOOKIE:
602 return TARGET_XFER_E_IO;
604 default:
605 return TARGET_XFER_E_IO;
609 /* Return non-zero if the thread specified by PTID is alive. */
611 bool
612 inf_ptrace_target::thread_alive (ptid_t ptid)
614 /* ??? Is kill the right way to do this? */
615 return (::kill (ptid.pid (), 0) != -1);
618 /* Print status information about what we're accessing. */
620 void
621 inf_ptrace_target::files_info ()
623 struct inferior *inf = current_inferior ();
625 printf_filtered (_("\tUsing the running image of %s %s.\n"),
626 inf->attach_flag ? "attached" : "child",
627 target_pid_to_str (inferior_ptid).c_str ());
630 std::string
631 inf_ptrace_target::pid_to_str (ptid_t ptid)
633 return normal_pid_to_str (ptid);
636 #if defined (PT_IO) && defined (PIOD_READ_AUXV)
638 /* Read one auxv entry from *READPTR, not reading locations >= ENDPTR.
639 Return 0 if *READPTR is already at the end of the buffer.
640 Return -1 if there is insufficient buffer for a whole entry.
641 Return 1 if an entry was read into *TYPEP and *VALP. */
644 inf_ptrace_target::auxv_parse (gdb_byte **readptr, gdb_byte *endptr,
645 CORE_ADDR *typep, CORE_ADDR *valp)
647 struct type *int_type = builtin_type (target_gdbarch ())->builtin_int;
648 struct type *ptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
649 const int sizeof_auxv_type = TYPE_LENGTH (int_type);
650 const int sizeof_auxv_val = TYPE_LENGTH (ptr_type);
651 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
652 gdb_byte *ptr = *readptr;
654 if (endptr == ptr)
655 return 0;
657 if (endptr - ptr < 2 * sizeof_auxv_val)
658 return -1;
660 *typep = extract_unsigned_integer (ptr, sizeof_auxv_type, byte_order);
661 ptr += sizeof_auxv_val; /* Alignment. */
662 *valp = extract_unsigned_integer (ptr, sizeof_auxv_val, byte_order);
663 ptr += sizeof_auxv_val;
665 *readptr = ptr;
666 return 1;
669 #endif