1 /* Native-dependent code for FreeBSD.
3 Copyright (C) 2002-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/>. */
21 #include "byte-vector.h"
27 #include "gdbthread.h"
29 #include <sys/types.h>
30 #include <sys/procfs.h>
31 #include <sys/ptrace.h>
32 #include <sys/signal.h>
33 #include <sys/sysctl.h>
35 #ifdef HAVE_KINFO_GETVMMAP
38 #include "filestuff.h"
46 /* Return the name of a file that can be opened to get the symbols for
47 the child process identified by PID. */
50 fbsd_pid_to_exec_file (struct target_ops *self, int pid)
53 static char buf[PATH_MAX];
56 #ifdef KERN_PROC_PATHNAME
62 mib[2] = KERN_PROC_PATHNAME;
65 if (sysctl (mib, 4, buf, &buflen, NULL, 0) == 0)
66 /* The kern.proc.pathname.<pid> sysctl returns a length of zero
67 for processes without an associated executable such as kernel
69 return buflen == 0 ? NULL : buf;
72 xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
73 len = readlink (name, buf, PATH_MAX - 1);
83 #ifdef HAVE_KINFO_GETVMMAP
84 /* Iterate over all the memory regions in the current inferior,
85 calling FUNC for each memory region. OBFD is passed as the last
89 fbsd_find_memory_regions (struct target_ops *self,
90 find_memory_region_ftype func, void *obfd)
92 pid_t pid = ptid_get_pid (inferior_ptid);
93 struct kinfo_vmentry *kve;
97 gdb::unique_xmalloc_ptr<struct kinfo_vmentry>
98 vmentl (kinfo_getvmmap (pid, &nitems));
100 perror_with_name (_("Couldn't fetch VM map entries."));
102 for (i = 0, kve = vmentl.get (); i < nitems; i++, kve++)
104 /* Skip unreadable segments and those where MAP_NOCORE has been set. */
105 if (!(kve->kve_protection & KVME_PROT_READ)
106 || kve->kve_flags & KVME_FLAG_NOCOREDUMP)
109 /* Skip segments with an invalid type. */
110 if (kve->kve_type != KVME_TYPE_DEFAULT
111 && kve->kve_type != KVME_TYPE_VNODE
112 && kve->kve_type != KVME_TYPE_SWAP
113 && kve->kve_type != KVME_TYPE_PHYS)
116 size = kve->kve_end - kve->kve_start;
119 fprintf_filtered (gdb_stdout,
120 "Save segment, %ld bytes at %s (%c%c%c)\n",
122 paddress (target_gdbarch (), kve->kve_start),
123 kve->kve_protection & KVME_PROT_READ ? 'r' : '-',
124 kve->kve_protection & KVME_PROT_WRITE ? 'w' : '-',
125 kve->kve_protection & KVME_PROT_EXEC ? 'x' : '-');
128 /* Invoke the callback function to create the corefile segment.
129 Pass MODIFIED as true, we do not know the real modification state. */
130 func (kve->kve_start, size, kve->kve_protection & KVME_PROT_READ,
131 kve->kve_protection & KVME_PROT_WRITE,
132 kve->kve_protection & KVME_PROT_EXEC, 1, obfd);
138 fbsd_read_mapping (FILE *mapfile, unsigned long *start, unsigned long *end,
141 /* FreeBSD 5.1-RELEASE uses a 256-byte buffer. */
143 int resident, privateresident;
147 /* As of FreeBSD 5.0-RELEASE, the layout is described in
148 /usr/src/sys/fs/procfs/procfs_map.c. Somewhere in 5.1-CURRENT a
149 new column was added to the procfs map. Therefore we can't use
150 fscanf since we need to support older releases too. */
151 if (fgets (buf, sizeof buf, mapfile) != NULL)
152 ret = sscanf (buf, "%lx %lx %d %d %lx %s", start, end,
153 &resident, &privateresident, &obj, protection);
155 return (ret != 0 && ret != EOF);
158 /* Iterate over all the memory regions in the current inferior,
159 calling FUNC for each memory region. OBFD is passed as the last
163 fbsd_find_memory_regions (struct target_ops *self,
164 find_memory_region_ftype func, void *obfd)
166 pid_t pid = ptid_get_pid (inferior_ptid);
167 unsigned long start, end, size;
169 int read, write, exec;
171 std::string mapfilename = string_printf ("/proc/%ld/map", (long) pid);
172 gdb_file_up mapfile (fopen (mapfilename.c_str (), "r"));
174 error (_("Couldn't open %s."), mapfilename.c_str ());
177 fprintf_filtered (gdb_stdout,
178 "Reading memory regions from %s\n", mapfilename.c_str ());
180 /* Now iterate until end-of-file. */
181 while (fbsd_read_mapping (mapfile.get (), &start, &end, &protection[0]))
185 read = (strchr (protection, 'r') != 0);
186 write = (strchr (protection, 'w') != 0);
187 exec = (strchr (protection, 'x') != 0);
191 fprintf_filtered (gdb_stdout,
192 "Save segment, %ld bytes at %s (%c%c%c)\n",
193 size, paddress (target_gdbarch (), start),
199 /* Invoke the callback function to create the corefile segment.
200 Pass MODIFIED as true, we do not know the real modification state. */
201 func (start, size, read, write, exec, 1, obfd);
208 #ifdef KERN_PROC_AUXV
209 static enum target_xfer_status (*super_xfer_partial) (struct target_ops *ops,
210 enum target_object object,
213 const gdb_byte *writebuf,
216 ULONGEST *xfered_len);
219 /* Return the size of siginfo for the current inferior. */
227 /* This structure matches the naming and layout of `siginfo_t' in
228 <sys/signal.h>. In particular, the `si_foo' macros defined in that
229 header can be used with both types to copy fields in the `_reason'
241 union sigval32 si_value;
274 struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
276 /* Is the inferior 32-bit? If so, use the 32-bit siginfo size. */
277 if (gdbarch_long_bit (gdbarch) == 32)
278 return sizeof (struct siginfo32);
280 return sizeof (siginfo_t);
283 /* Convert a native 64-bit siginfo object to a 32-bit object. Note
284 that FreeBSD doesn't support writing to $_siginfo, so this only
285 needs to convert one way. */
288 fbsd_convert_siginfo (siginfo_t *si)
291 struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
293 /* Is the inferior 32-bit? If not, nothing to do. */
294 if (gdbarch_long_bit (gdbarch) != 32)
297 struct siginfo32 si32;
299 si32.si_signo = si->si_signo;
300 si32.si_errno = si->si_errno;
301 si32.si_code = si->si_code;
302 si32.si_pid = si->si_pid;
303 si32.si_uid = si->si_uid;
304 si32.si_status = si->si_status;
305 si32.si_addr = (uintptr_t) si->si_addr;
307 /* If sival_ptr is being used instead of sival_int on a big-endian
308 platform, then sival_int will be zero since it holds the upper
309 32-bits of the pointer value. */
310 #if _BYTE_ORDER == _BIG_ENDIAN
311 if (si->si_value.sival_int == 0)
312 si32.si_value.sival_ptr = (uintptr_t) si->si_value.sival_ptr;
314 si32.si_value.sival_int = si->si_value.sival_int;
316 si32.si_value.sival_int = si->si_value.sival_int;
319 /* Always copy the spare fields and then possibly overwrite them for
320 signal-specific or code-specific fields. */
321 si32._reason.__spare__.__spare1__ = si->_reason.__spare__.__spare1__;
322 for (int i = 0; i < 7; i++)
323 si32._reason.__spare__.__spare2__[i] = si->_reason.__spare__.__spare2__[i];
324 switch (si->si_signo) {
329 si32.si_trapno = si->si_trapno;
332 switch (si->si_code) {
334 si32.si_timerid = si->si_timerid;
335 si32.si_overrun = si->si_overrun;
338 si32.si_mqd = si->si_mqd;
342 memcpy(si, &si32, sizeof (si32));
347 /* Implement the "to_xfer_partial target_ops" method. */
349 static enum target_xfer_status
350 fbsd_xfer_partial (struct target_ops *ops, enum target_object object,
351 const char *annex, gdb_byte *readbuf,
352 const gdb_byte *writebuf,
353 ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
355 pid_t pid = ptid_get_pid (inferior_ptid);
360 case TARGET_OBJECT_SIGNAL_INFO:
362 struct ptrace_lwpinfo pl;
365 /* FreeBSD doesn't support writing to $_siginfo. */
366 if (writebuf != NULL)
367 return TARGET_XFER_E_IO;
369 if (inferior_ptid.lwp_p ())
370 pid = inferior_ptid.lwp ();
372 siginfo_size = fbsd_siginfo_size ();
373 if (offset > siginfo_size)
374 return TARGET_XFER_E_IO;
376 if (ptrace (PT_LWPINFO, pid, (PTRACE_TYPE_ARG3) &pl, sizeof (pl)) == -1)
377 return TARGET_XFER_E_IO;
379 if (!(pl.pl_flags & PL_FLAG_SI))
380 return TARGET_XFER_E_IO;
382 fbsd_convert_siginfo (&pl.pl_siginfo);
383 if (offset + len > siginfo_size)
384 len = siginfo_size - offset;
386 memcpy (readbuf, ((gdb_byte *) &pl.pl_siginfo) + offset, len);
388 return TARGET_XFER_OK;
391 case TARGET_OBJECT_AUXV:
393 gdb::byte_vector buf_storage;
398 if (writebuf != NULL)
399 return TARGET_XFER_E_IO;
402 mib[2] = KERN_PROC_AUXV;
411 buflen = offset + len;
412 buf_storage.resize (buflen);
413 buf = buf_storage.data ();
415 if (sysctl (mib, 4, buf, &buflen, NULL, 0) == 0)
422 memcpy (readbuf, buf + offset, buflen);
427 *xfered_len = buflen;
428 return (buflen == 0) ? TARGET_XFER_EOF : TARGET_XFER_OK;
430 return TARGET_XFER_E_IO;
433 return super_xfer_partial (ops, object, annex, readbuf, writebuf, offset,
440 static int debug_fbsd_lwp;
442 static void (*super_resume) (struct target_ops *,
446 static ptid_t (*super_wait) (struct target_ops *,
448 struct target_waitstatus *,
452 show_fbsd_lwp_debug (struct ui_file *file, int from_tty,
453 struct cmd_list_element *c, const char *value)
455 fprintf_filtered (file, _("Debugging of FreeBSD lwp module is %s.\n"), value);
458 #if defined(TDP_RFPPWAIT) || defined(HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME)
459 /* Fetch the external variant of the kernel's internal process
460 structure for the process PID into KP. */
463 fbsd_fetch_kinfo_proc (pid_t pid, struct kinfo_proc *kp)
471 mib[2] = KERN_PROC_PID;
473 if (sysctl (mib, 4, kp, &len, NULL, 0) == -1)
474 perror_with_name (("sysctl"));
479 FreeBSD's first thread support was via a "reentrant" version of libc
480 (libc_r) that first shipped in 2.2.7. This library multiplexed all
481 of the threads in a process onto a single kernel thread. This
482 library was supported via the bsd-uthread target.
484 FreeBSD 5.1 introduced two new threading libraries that made use of
485 multiple kernel threads. The first (libkse) scheduled M user
486 threads onto N (<= M) kernel threads (LWPs). The second (libthr)
487 bound each user thread to a dedicated kernel thread. libkse shipped
488 as the default threading library (libpthread).
490 FreeBSD 5.3 added a libthread_db to abstract the interface across
491 the various thread libraries (libc_r, libkse, and libthr).
493 FreeBSD 7.0 switched the default threading library from from libkse
494 to libpthread and removed libc_r.
496 FreeBSD 8.0 removed libkse and the in-kernel support for it. The
497 only threading library supported by 8.0 and later is libthr which
498 ties each user thread directly to an LWP. To simplify the
499 implementation, this target only supports LWP-backed threads using
500 ptrace directly rather than libthread_db.
502 FreeBSD 11.0 introduced LWP event reporting via PT_LWP_EVENTS.
505 /* Return true if PTID is still active in the inferior. */
508 fbsd_thread_alive (struct target_ops *ops, ptid_t ptid)
510 if (ptid_lwp_p (ptid))
512 struct ptrace_lwpinfo pl;
514 if (ptrace (PT_LWPINFO, ptid_get_lwp (ptid), (caddr_t) &pl, sizeof pl)
517 #ifdef PL_FLAG_EXITED
518 if (pl.pl_flags & PL_FLAG_EXITED)
526 /* Convert PTID to a string. Returns the string in a static
530 fbsd_pid_to_str (struct target_ops *ops, ptid_t ptid)
534 lwp = ptid_get_lwp (ptid);
538 int pid = ptid_get_pid (ptid);
540 xsnprintf (buf, sizeof buf, "LWP %d of process %d", lwp, pid);
544 return normal_pid_to_str (ptid);
547 #ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME
548 /* Return the name assigned to a thread by an application. Returns
549 the string in a static buffer. */
552 fbsd_thread_name (struct target_ops *self, struct thread_info *thr)
554 struct ptrace_lwpinfo pl;
555 struct kinfo_proc kp;
556 int pid = ptid_get_pid (thr->ptid);
557 long lwp = ptid_get_lwp (thr->ptid);
558 static char buf[sizeof pl.pl_tdname + 1];
560 /* Note that ptrace_lwpinfo returns the process command in pl_tdname
561 if a name has not been set explicitly. Return a NULL name in
563 fbsd_fetch_kinfo_proc (pid, &kp);
564 if (ptrace (PT_LWPINFO, lwp, (caddr_t) &pl, sizeof pl) == -1)
565 perror_with_name (("ptrace"));
566 if (strcmp (kp.ki_comm, pl.pl_tdname) == 0)
568 xsnprintf (buf, sizeof buf, "%s", pl.pl_tdname);
573 /* Enable additional event reporting on new processes.
575 To catch fork events, PTRACE_FORK is set on every traced process
576 to enable stops on returns from fork or vfork. Note that both the
577 parent and child will always stop, even if system call stops are
580 To catch LWP events, PTRACE_EVENTS is set on every traced process.
581 This enables stops on the birth for new LWPs (excluding the "main" LWP)
582 and the death of LWPs (excluding the last LWP in a process). Note
583 that unlike fork events, the LWP that creates a new LWP does not
587 fbsd_enable_proc_events (pid_t pid)
589 #ifdef PT_GET_EVENT_MASK
592 if (ptrace (PT_GET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
593 sizeof (events)) == -1)
594 perror_with_name (("ptrace"));
595 events |= PTRACE_FORK | PTRACE_LWP;
597 events |= PTRACE_VFORK;
599 if (ptrace (PT_SET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
600 sizeof (events)) == -1)
601 perror_with_name (("ptrace"));
604 if (ptrace (PT_FOLLOW_FORK, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
605 perror_with_name (("ptrace"));
608 if (ptrace (PT_LWP_EVENTS, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
609 perror_with_name (("ptrace"));
614 /* Add threads for any new LWPs in a process.
616 When LWP events are used, this function is only used to detect existing
617 threads when attaching to a process. On older systems, this function is
618 called to discover new threads each time the thread list is updated. */
621 fbsd_add_threads (pid_t pid)
625 gdb_assert (!in_thread_list (pid_to_ptid (pid)));
626 nlwps = ptrace (PT_GETNUMLWPS, pid, NULL, 0);
628 perror_with_name (("ptrace"));
630 gdb::unique_xmalloc_ptr<lwpid_t[]> lwps (XCNEWVEC (lwpid_t, nlwps));
632 nlwps = ptrace (PT_GETLWPLIST, pid, (caddr_t) lwps.get (), nlwps);
634 perror_with_name (("ptrace"));
636 for (i = 0; i < nlwps; i++)
638 ptid_t ptid = ptid_build (pid, lwps[i], 0);
640 if (!in_thread_list (ptid))
643 struct ptrace_lwpinfo pl;
645 /* Don't add exited threads. Note that this is only called
646 when attaching to a multi-threaded process. */
647 if (ptrace (PT_LWPINFO, lwps[i], (caddr_t) &pl, sizeof pl) == -1)
648 perror_with_name (("ptrace"));
649 if (pl.pl_flags & PL_FLAG_EXITED)
653 fprintf_unfiltered (gdb_stdlog,
654 "FLWP: adding thread for LWP %u\n",
661 /* Implement the "to_update_thread_list" target_ops method. */
664 fbsd_update_thread_list (struct target_ops *ops)
667 /* With support for thread events, threads are added/deleted from the
668 list as events are reported, so just try deleting exited threads. */
669 delete_exited_threads ();
673 fbsd_add_threads (ptid_get_pid (inferior_ptid));
679 To catch fork events, PT_FOLLOW_FORK is set on every traced process
680 to enable stops on returns from fork or vfork. Note that both the
681 parent and child will always stop, even if system call stops are not
684 After a fork, both the child and parent process will stop and report
685 an event. However, there is no guarantee of order. If the parent
686 reports its stop first, then fbsd_wait explicitly waits for the new
687 child before returning. If the child reports its stop first, then
688 the event is saved on a list and ignored until the parent's stop is
689 reported. fbsd_wait could have been changed to fetch the parent PID
690 of the new child and used that to wait for the parent explicitly.
691 However, if two threads in the parent fork at the same time, then
692 the wait on the parent might return the "wrong" fork event.
694 The initial version of PT_FOLLOW_FORK did not set PL_FLAG_CHILD for
695 the new child process. This flag could be inferred by treating any
696 events for an unknown pid as a new child.
698 In addition, the initial version of PT_FOLLOW_FORK did not report a
699 stop event for the parent process of a vfork until after the child
700 process executed a new program or exited. The kernel was changed to
701 defer the wait for exit or exec of the child until after posting the
702 stop event shortly after the change to introduce PL_FLAG_CHILD.
703 This could be worked around by reporting a vfork event when the
704 child event posted and ignoring the subsequent event from the
707 This implementation requires both of these fixes for simplicity's
708 sake. FreeBSD versions newer than 9.1 contain both fixes.
711 static std::list<ptid_t> fbsd_pending_children;
713 /* Record a new child process event that is reported before the
714 corresponding fork event in the parent. */
717 fbsd_remember_child (ptid_t pid)
719 fbsd_pending_children.push_front (pid);
722 /* Check for a previously-recorded new child process event for PID.
723 If one is found, remove it from the list and return the PTID. */
726 fbsd_is_child_pending (pid_t pid)
728 for (auto it = fbsd_pending_children.begin ();
729 it != fbsd_pending_children.end (); it++)
730 if (it->pid () == pid)
733 fbsd_pending_children.erase (it);
740 static std::forward_list<ptid_t> fbsd_pending_vfork_done;
742 /* Record a pending vfork done event. */
745 fbsd_add_vfork_done (ptid_t pid)
747 fbsd_pending_vfork_done.push_front (pid);
750 /* Check for a pending vfork done event for a specific PID. */
753 fbsd_is_vfork_done_pending (pid_t pid)
755 for (auto it = fbsd_pending_vfork_done.begin ();
756 it != fbsd_pending_vfork_done.end (); it++)
757 if (it->pid () == pid)
762 /* Check for a pending vfork done event. If one is found, remove it
763 from the list and return the PTID. */
766 fbsd_next_vfork_done (void)
768 if (!fbsd_pending_vfork_done.empty ())
770 ptid_t ptid = fbsd_pending_vfork_done.front ();
771 fbsd_pending_vfork_done.pop_front ();
779 /* Implement the "to_resume" target_ops method. */
782 fbsd_resume (struct target_ops *ops,
783 ptid_t ptid, int step, enum gdb_signal signo)
785 #if defined(TDP_RFPPWAIT) && !defined(PTRACE_VFORK)
788 /* Don't PT_CONTINUE a process which has a pending vfork done event. */
789 if (ptid_equal (minus_one_ptid, ptid))
790 pid = ptid_get_pid (inferior_ptid);
792 pid = ptid_get_pid (ptid);
793 if (fbsd_is_vfork_done_pending (pid))
798 fprintf_unfiltered (gdb_stdlog,
799 "FLWP: fbsd_resume for ptid (%d, %ld, %ld)\n",
800 ptid_get_pid (ptid), ptid_get_lwp (ptid),
801 ptid_get_tid (ptid));
802 if (ptid_lwp_p (ptid))
804 /* If ptid is a specific LWP, suspend all other LWPs in the process. */
805 struct thread_info *tp;
808 ALL_NON_EXITED_THREADS (tp)
810 if (ptid_get_pid (tp->ptid) != ptid_get_pid (ptid))
813 if (ptid_get_lwp (tp->ptid) == ptid_get_lwp (ptid))
816 request = PT_SUSPEND;
818 if (ptrace (request, ptid_get_lwp (tp->ptid), NULL, 0) == -1)
819 perror_with_name (("ptrace"));
824 /* If ptid is a wildcard, resume all matching threads (they won't run
825 until the process is continued however). */
826 struct thread_info *tp;
828 ALL_NON_EXITED_THREADS (tp)
830 if (!ptid_match (tp->ptid, ptid))
833 if (ptrace (PT_RESUME, ptid_get_lwp (tp->ptid), NULL, 0) == -1)
834 perror_with_name (("ptrace"));
836 ptid = inferior_ptid;
838 super_resume (ops, ptid, step, signo);
841 /* Wait for the child specified by PTID to do something. Return the
842 process ID of the child, or MINUS_ONE_PTID in case of error; store
843 the status in *OURSTATUS. */
846 fbsd_wait (struct target_ops *ops,
847 ptid_t ptid, struct target_waitstatus *ourstatus,
855 wptid = fbsd_next_vfork_done ();
856 if (!ptid_equal (wptid, null_ptid))
858 ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
862 wptid = super_wait (ops, ptid, ourstatus, target_options);
863 if (ourstatus->kind == TARGET_WAITKIND_STOPPED)
865 struct ptrace_lwpinfo pl;
869 pid = ptid_get_pid (wptid);
870 if (ptrace (PT_LWPINFO, pid, (caddr_t) &pl, sizeof pl) == -1)
871 perror_with_name (("ptrace"));
873 wptid = ptid_build (pid, pl.pl_lwpid, 0);
876 if (pl.pl_flags & PL_FLAG_EXITED)
878 /* If GDB attaches to a multi-threaded process, exiting
879 threads might be skipped during fbsd_post_attach that
880 have not yet reported their PL_FLAG_EXITED event.
881 Ignore EXITED events for an unknown LWP. */
882 if (in_thread_list (wptid))
885 fprintf_unfiltered (gdb_stdlog,
886 "FLWP: deleting thread for LWP %u\n",
888 if (print_thread_events)
889 printf_unfiltered (_("[%s exited]\n"), target_pid_to_str
891 delete_thread (wptid);
893 if (ptrace (PT_CONTINUE, pid, (caddr_t) 1, 0) == -1)
894 perror_with_name (("ptrace"));
899 /* Switch to an LWP PTID on the first stop in a new process.
900 This is done after handling PL_FLAG_EXITED to avoid
901 switching to an exited LWP. It is done before checking
902 PL_FLAG_BORN in case the first stop reported after
903 attaching to an existing process is a PL_FLAG_BORN
905 if (in_thread_list (pid_to_ptid (pid)))
908 fprintf_unfiltered (gdb_stdlog,
909 "FLWP: using LWP %u for first thread\n",
911 thread_change_ptid (pid_to_ptid (pid), wptid);
915 if (pl.pl_flags & PL_FLAG_BORN)
917 /* If GDB attaches to a multi-threaded process, newborn
918 threads might be added by fbsd_add_threads that have
919 not yet reported their PL_FLAG_BORN event. Ignore
920 BORN events for an already-known LWP. */
921 if (!in_thread_list (wptid))
924 fprintf_unfiltered (gdb_stdlog,
925 "FLWP: adding thread for LWP %u\n",
929 ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
935 if (pl.pl_flags & PL_FLAG_FORKED)
938 struct kinfo_proc kp;
943 child = pl.pl_child_pid;
944 ourstatus->kind = TARGET_WAITKIND_FORKED;
946 if (pl.pl_flags & PL_FLAG_VFORKED)
947 ourstatus->kind = TARGET_WAITKIND_VFORKED;
950 /* Make sure the other end of the fork is stopped too. */
951 child_ptid = fbsd_is_child_pending (child);
952 if (ptid_equal (child_ptid, null_ptid))
954 pid = waitpid (child, &status, 0);
956 perror_with_name (("waitpid"));
958 gdb_assert (pid == child);
960 if (ptrace (PT_LWPINFO, child, (caddr_t)&pl, sizeof pl) == -1)
961 perror_with_name (("ptrace"));
963 gdb_assert (pl.pl_flags & PL_FLAG_CHILD);
964 child_ptid = ptid_build (child, pl.pl_lwpid, 0);
967 /* Enable additional events on the child process. */
968 fbsd_enable_proc_events (ptid_get_pid (child_ptid));
971 /* For vfork, the child process will have the P_PPWAIT
973 fbsd_fetch_kinfo_proc (child, &kp);
974 if (kp.ki_flag & P_PPWAIT)
975 ourstatus->kind = TARGET_WAITKIND_VFORKED;
977 ourstatus->value.related_pid = child_ptid;
982 if (pl.pl_flags & PL_FLAG_CHILD)
984 /* Remember that this child forked, but do not report it
985 until the parent reports its corresponding fork
987 fbsd_remember_child (wptid);
992 if (pl.pl_flags & PL_FLAG_VFORK_DONE)
994 ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
1001 if (pl.pl_flags & PL_FLAG_EXEC)
1003 ourstatus->kind = TARGET_WAITKIND_EXECD;
1004 ourstatus->value.execd_pathname
1005 = xstrdup (fbsd_pid_to_exec_file (NULL, pid));
1010 /* Note that PL_FLAG_SCE is set for any event reported while
1011 a thread is executing a system call in the kernel. In
1012 particular, signals that interrupt a sleep in a system
1013 call will report this flag as part of their event. Stops
1014 explicitly for system call entry and exit always use
1015 SIGTRAP, so only treat SIGTRAP events as system call
1016 entry/exit events. */
1017 if (pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)
1018 && ourstatus->value.sig == SIGTRAP)
1020 #ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE
1021 if (catch_syscall_enabled ())
1023 if (catching_syscall_number (pl.pl_syscall_code))
1025 if (pl.pl_flags & PL_FLAG_SCE)
1026 ourstatus->kind = TARGET_WAITKIND_SYSCALL_ENTRY;
1028 ourstatus->kind = TARGET_WAITKIND_SYSCALL_RETURN;
1029 ourstatus->value.syscall_number = pl.pl_syscall_code;
1034 /* If the core isn't interested in this event, just
1035 continue the process explicitly and wait for another
1036 event. Note that PT_SYSCALL is "sticky" on FreeBSD
1037 and once system call stops are enabled on a process
1038 it stops for all system call entries and exits. */
1039 if (ptrace (PT_CONTINUE, pid, (caddr_t) 1, 0) == -1)
1040 perror_with_name (("ptrace"));
1049 /* Target hook for follow_fork. On entry and at return inferior_ptid is
1050 the ptid of the followed inferior. */
1053 fbsd_follow_fork (struct target_ops *ops, int follow_child,
1056 if (!follow_child && detach_fork)
1058 struct thread_info *tp = inferior_thread ();
1059 pid_t child_pid = ptid_get_pid (tp->pending_follow.value.related_pid);
1061 /* Breakpoints have already been detached from the child by
1064 if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
1065 perror_with_name (("ptrace"));
1067 #ifndef PTRACE_VFORK
1068 if (tp->pending_follow.kind == TARGET_WAITKIND_VFORKED)
1070 /* We can't insert breakpoints until the child process has
1071 finished with the shared memory region. The parent
1072 process doesn't wait for the child process to exit or
1073 exec until after it has been resumed from the ptrace stop
1074 to report the fork. Once it has been resumed it doesn't
1075 stop again before returning to userland, so there is no
1076 reliable way to wait on the parent.
1078 We can't stay attached to the child to wait for an exec
1079 or exit because it may invoke ptrace(PT_TRACE_ME)
1080 (e.g. if the parent process is a debugger forking a new
1083 In the end, the best we can do is to make sure it runs
1084 for a little while. Hopefully it will be out of range of
1085 any breakpoints we reinsert. Usually this is only the
1086 single-step breakpoint at vfork's return point. */
1090 /* Schedule a fake VFORK_DONE event to report on the next
1092 fbsd_add_vfork_done (inferior_ptid);
1101 fbsd_insert_fork_catchpoint (struct target_ops *self, int pid)
1107 fbsd_remove_fork_catchpoint (struct target_ops *self, int pid)
1113 fbsd_insert_vfork_catchpoint (struct target_ops *self, int pid)
1119 fbsd_remove_vfork_catchpoint (struct target_ops *self, int pid)
1125 /* Implement the "to_post_startup_inferior" target_ops method. */
1128 fbsd_post_startup_inferior (struct target_ops *self, ptid_t pid)
1130 fbsd_enable_proc_events (ptid_get_pid (pid));
1133 /* Implement the "to_post_attach" target_ops method. */
1136 fbsd_post_attach (struct target_ops *self, int pid)
1138 fbsd_enable_proc_events (pid);
1139 fbsd_add_threads (pid);
1143 /* If the FreeBSD kernel supports PL_FLAG_EXEC, then traced processes
1144 will always stop after exec. */
1147 fbsd_insert_exec_catchpoint (struct target_ops *self, int pid)
1153 fbsd_remove_exec_catchpoint (struct target_ops *self, int pid)
1159 #ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE
1161 fbsd_set_syscall_catchpoint (struct target_ops *self, int pid, bool needed,
1163 gdb::array_view<const int> syscall_counts)
1166 /* Ignore the arguments. inf-ptrace.c will use PT_SYSCALL which
1167 will catch all system call entries and exits. The system calls
1168 are filtered by GDB rather than the kernel. */
1175 fbsd_nat_add_target (struct target_ops *t)
1177 t->to_pid_to_exec_file = fbsd_pid_to_exec_file;
1178 t->to_find_memory_regions = fbsd_find_memory_regions;
1179 #ifdef KERN_PROC_AUXV
1180 super_xfer_partial = t->to_xfer_partial;
1181 t->to_xfer_partial = fbsd_xfer_partial;
1184 t->to_thread_alive = fbsd_thread_alive;
1185 t->to_pid_to_str = fbsd_pid_to_str;
1186 #ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME
1187 t->to_thread_name = fbsd_thread_name;
1189 t->to_update_thread_list = fbsd_update_thread_list;
1190 t->to_has_thread_control = tc_schedlock;
1191 super_resume = t->to_resume;
1192 t->to_resume = fbsd_resume;
1193 super_wait = t->to_wait;
1194 t->to_wait = fbsd_wait;
1195 t->to_post_startup_inferior = fbsd_post_startup_inferior;
1196 t->to_post_attach = fbsd_post_attach;
1198 t->to_follow_fork = fbsd_follow_fork;
1199 t->to_insert_fork_catchpoint = fbsd_insert_fork_catchpoint;
1200 t->to_remove_fork_catchpoint = fbsd_remove_fork_catchpoint;
1201 t->to_insert_vfork_catchpoint = fbsd_insert_vfork_catchpoint;
1202 t->to_remove_vfork_catchpoint = fbsd_remove_vfork_catchpoint;
1205 t->to_insert_exec_catchpoint = fbsd_insert_exec_catchpoint;
1206 t->to_remove_exec_catchpoint = fbsd_remove_exec_catchpoint;
1208 #ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE
1209 t->to_set_syscall_catchpoint = fbsd_set_syscall_catchpoint;
1216 _initialize_fbsd_nat (void)
1219 add_setshow_boolean_cmd ("fbsd-lwp", class_maintenance,
1220 &debug_fbsd_lwp, _("\
1221 Set debugging of FreeBSD lwp module."), _("\
1222 Show debugging of FreeBSD lwp module."), _("\
1223 Enables printf debugging output."),
1225 &show_fbsd_lwp_debug,
1226 &setdebuglist, &showdebuglist);