]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/fbsd-nat.c
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / fbsd-nat.c
CommitLineData
578c1c03
MK
1/* Native-dependent code for FreeBSD.
2
3666a048 3 Copyright (C) 2002-2021 Free Software Foundation, Inc.
578c1c03
MK
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
578c1c03
MK
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/>. */
578c1c03
MK
19
20#include "defs.h"
268a13a5 21#include "gdbsupport/byte-vector.h"
4de283e4
TT
22#include "gdbcore.h"
23#include "inferior.h"
24#include "regcache.h"
25#include "regset.h"
cbde90f2 26#include "gdbarch.h"
4de283e4
TT
27#include "gdbcmd.h"
28#include "gdbthread.h"
268a13a5 29#include "gdbsupport/gdb_wait.h"
4de283e4
TT
30#include "inf-ptrace.h"
31#include <sys/types.h>
68b9939a 32#include <sys/procfs.h>
e58e05d6 33#include <sys/ptrace.h>
929edea9 34#include <sys/signal.h>
68b9939a 35#include <sys/sysctl.h>
25268153 36#include <sys/user.h>
4de283e4 37#include <libutil.h>
4de283e4 38
578c1c03
MK
39#include "elf-bfd.h"
40#include "fbsd-nat.h"
92fce24d 41#include "fbsd-tdep.h"
4de283e4
TT
42
43#include <list>
e8c6b620 44
766062f6 45/* Return the name of a file that can be opened to get the symbols for
578c1c03
MK
46 the child process identified by PID. */
47
f6ac5f3d
PA
48char *
49fbsd_nat_target::pid_to_exec_file (int pid)
578c1c03 50{
b4ab256d 51 static char buf[PATH_MAX];
f2feec98 52 size_t buflen;
68b9939a 53 int mib[4];
578c1c03 54
68b9939a
MK
55 mib[0] = CTL_KERN;
56 mib[1] = KERN_PROC;
57 mib[2] = KERN_PROC_PATHNAME;
58 mib[3] = pid;
f2feec98
JB
59 buflen = sizeof buf;
60 if (sysctl (mib, 4, buf, &buflen, NULL, 0) == 0)
b999e203
JB
61 /* The kern.proc.pathname.<pid> sysctl returns a length of zero
62 for processes without an associated executable such as kernel
63 processes. */
64 return buflen == 0 ? NULL : buf;
68b9939a 65
b4ab256d 66 return NULL;
578c1c03
MK
67}
68
25268153 69/* Iterate over all the memory regions in the current inferior,
d1076c41 70 calling FUNC for each memory region. DATA is passed as the last
25268153
JB
71 argument to FUNC. */
72
f6ac5f3d
PA
73int
74fbsd_nat_target::find_memory_regions (find_memory_region_ftype func,
d1076c41 75 void *data)
25268153 76{
e99b03dc 77 pid_t pid = inferior_ptid.pid ();
e4a26669 78 struct kinfo_vmentry *kve;
25268153 79 uint64_t size;
25268153
JB
80 int i, nitems;
81
262f62f5 82 gdb::unique_xmalloc_ptr<struct kinfo_vmentry>
e4a26669 83 vmentl (kinfo_getvmmap (pid, &nitems));
25268153
JB
84 if (vmentl == NULL)
85 perror_with_name (_("Couldn't fetch VM map entries."));
25268153 86
e4a26669 87 for (i = 0, kve = vmentl.get (); i < nitems; i++, kve++)
25268153 88 {
25268153
JB
89 /* Skip unreadable segments and those where MAP_NOCORE has been set. */
90 if (!(kve->kve_protection & KVME_PROT_READ)
91 || kve->kve_flags & KVME_FLAG_NOCOREDUMP)
92 continue;
93
94 /* Skip segments with an invalid type. */
95 if (kve->kve_type != KVME_TYPE_DEFAULT
96 && kve->kve_type != KVME_TYPE_VNODE
97 && kve->kve_type != KVME_TYPE_SWAP
98 && kve->kve_type != KVME_TYPE_PHYS)
99 continue;
100
101 size = kve->kve_end - kve->kve_start;
102 if (info_verbose)
103 {
104 fprintf_filtered (gdb_stdout,
105 "Save segment, %ld bytes at %s (%c%c%c)\n",
106 (long) size,
107 paddress (target_gdbarch (), kve->kve_start),
108 kve->kve_protection & KVME_PROT_READ ? 'r' : '-',
109 kve->kve_protection & KVME_PROT_WRITE ? 'w' : '-',
110 kve->kve_protection & KVME_PROT_EXEC ? 'x' : '-');
111 }
112
113 /* Invoke the callback function to create the corefile segment.
114 Pass MODIFIED as true, we do not know the real modification state. */
115 func (kve->kve_start, size, kve->kve_protection & KVME_PROT_READ,
116 kve->kve_protection & KVME_PROT_WRITE,
d1076c41 117 kve->kve_protection & KVME_PROT_EXEC, 1, data);
25268153 118 }
25268153
JB
119 return 0;
120}
8f60fe01 121
92fce24d
JB
122/* Fetch the command line for a running process. */
123
124static gdb::unique_xmalloc_ptr<char>
125fbsd_fetch_cmdline (pid_t pid)
126{
127 size_t len;
128 int mib[4];
129
130 len = 0;
131 mib[0] = CTL_KERN;
132 mib[1] = KERN_PROC;
133 mib[2] = KERN_PROC_ARGS;
134 mib[3] = pid;
135 if (sysctl (mib, 4, NULL, &len, NULL, 0) == -1)
136 return nullptr;
137
138 if (len == 0)
139 return nullptr;
140
141 gdb::unique_xmalloc_ptr<char> cmdline ((char *) xmalloc (len));
142 if (sysctl (mib, 4, cmdline.get (), &len, NULL, 0) == -1)
143 return nullptr;
144
424eb552
JB
145 /* Join the arguments with spaces to form a single string. */
146 char *cp = cmdline.get ();
147 for (size_t i = 0; i < len - 1; i++)
148 if (cp[i] == '\0')
149 cp[i] = ' ';
150 cp[len - 1] = '\0';
151
92fce24d
JB
152 return cmdline;
153}
154
155/* Fetch the external variant of the kernel's internal process
156 structure for the process PID into KP. */
157
158static bool
159fbsd_fetch_kinfo_proc (pid_t pid, struct kinfo_proc *kp)
160{
161 size_t len;
162 int mib[4];
163
164 len = sizeof *kp;
165 mib[0] = CTL_KERN;
166 mib[1] = KERN_PROC;
167 mib[2] = KERN_PROC_PID;
168 mib[3] = pid;
169 return (sysctl (mib, 4, kp, &len, NULL, 0) == 0);
170}
171
f6ac5f3d 172/* Implement the "info_proc" target_ops method. */
92fce24d 173
f6ac5f3d
PA
174bool
175fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
92fce24d 176{
92fce24d
JB
177 gdb::unique_xmalloc_ptr<struct kinfo_file> fdtbl;
178 int nfd = 0;
92fce24d 179 struct kinfo_proc kp;
92fce24d
JB
180 pid_t pid;
181 bool do_cmdline = false;
182 bool do_cwd = false;
183 bool do_exe = false;
7e69672e 184 bool do_files = false;
92fce24d 185 bool do_mappings = false;
92fce24d
JB
186 bool do_status = false;
187
188 switch (what)
189 {
190 case IP_MINIMAL:
191 do_cmdline = true;
192 do_cwd = true;
193 do_exe = true;
194 break;
92fce24d
JB
195 case IP_MAPPINGS:
196 do_mappings = true;
197 break;
92fce24d
JB
198 case IP_STATUS:
199 case IP_STAT:
200 do_status = true;
201 break;
202 case IP_CMDLINE:
203 do_cmdline = true;
204 break;
205 case IP_EXE:
206 do_exe = true;
207 break;
208 case IP_CWD:
209 do_cwd = true;
210 break;
7e69672e
JB
211 case IP_FILES:
212 do_files = true;
213 break;
92fce24d
JB
214 case IP_ALL:
215 do_cmdline = true;
216 do_cwd = true;
217 do_exe = true;
7e69672e 218 do_files = true;
92fce24d 219 do_mappings = true;
92fce24d
JB
220 do_status = true;
221 break;
222 default:
223 error (_("Not supported on this target."));
224 }
225
226 gdb_argv built_argv (args);
227 if (built_argv.count () == 0)
228 {
e99b03dc 229 pid = inferior_ptid.pid ();
92fce24d
JB
230 if (pid == 0)
231 error (_("No current process: you must name one."));
232 }
233 else if (built_argv.count () == 1 && isdigit (built_argv[0][0]))
234 pid = strtol (built_argv[0], NULL, 10);
235 else
236 error (_("Invalid arguments."));
237
238 printf_filtered (_("process %d\n"), pid);
7e69672e 239 if (do_cwd || do_exe || do_files)
92fce24d 240 fdtbl.reset (kinfo_getfile (pid, &nfd));
92fce24d
JB
241
242 if (do_cmdline)
243 {
244 gdb::unique_xmalloc_ptr<char> cmdline = fbsd_fetch_cmdline (pid);
245 if (cmdline != nullptr)
246 printf_filtered ("cmdline = '%s'\n", cmdline.get ());
247 else
248 warning (_("unable to fetch command line"));
249 }
250 if (do_cwd)
251 {
252 const char *cwd = NULL;
92fce24d
JB
253 struct kinfo_file *kf = fdtbl.get ();
254 for (int i = 0; i < nfd; i++, kf++)
255 {
256 if (kf->kf_type == KF_TYPE_VNODE && kf->kf_fd == KF_FD_TYPE_CWD)
257 {
258 cwd = kf->kf_path;
259 break;
260 }
261 }
92fce24d
JB
262 if (cwd != NULL)
263 printf_filtered ("cwd = '%s'\n", cwd);
264 else
265 warning (_("unable to fetch current working directory"));
266 }
267 if (do_exe)
268 {
269 const char *exe = NULL;
92fce24d
JB
270 struct kinfo_file *kf = fdtbl.get ();
271 for (int i = 0; i < nfd; i++, kf++)
272 {
273 if (kf->kf_type == KF_TYPE_VNODE && kf->kf_fd == KF_FD_TYPE_TEXT)
274 {
275 exe = kf->kf_path;
276 break;
277 }
278 }
92fce24d 279 if (exe == NULL)
f6ac5f3d 280 exe = pid_to_exec_file (pid);
92fce24d
JB
281 if (exe != NULL)
282 printf_filtered ("exe = '%s'\n", exe);
283 else
284 warning (_("unable to fetch executable path name"));
285 }
7e69672e
JB
286 if (do_files)
287 {
288 struct kinfo_file *kf = fdtbl.get ();
289
290 if (nfd > 0)
291 {
292 fbsd_info_proc_files_header ();
293 for (int i = 0; i < nfd; i++, kf++)
294 fbsd_info_proc_files_entry (kf->kf_type, kf->kf_fd, kf->kf_flags,
295 kf->kf_offset, kf->kf_vnode_type,
296 kf->kf_sock_domain, kf->kf_sock_type,
297 kf->kf_sock_protocol, &kf->kf_sa_local,
298 &kf->kf_sa_peer, kf->kf_path);
299 }
300 else
301 warning (_("unable to fetch list of open files"));
302 }
92fce24d
JB
303 if (do_mappings)
304 {
305 int nvment;
306 gdb::unique_xmalloc_ptr<struct kinfo_vmentry>
307 vmentl (kinfo_getvmmap (pid, &nvment));
308
309 if (vmentl != nullptr)
310 {
6f3b1098
JB
311 int addr_bit = TARGET_CHAR_BIT * sizeof (void *);
312 fbsd_info_proc_mappings_header (addr_bit);
92fce24d
JB
313
314 struct kinfo_vmentry *kve = vmentl.get ();
315 for (int i = 0; i < nvment; i++, kve++)
6f3b1098
JB
316 fbsd_info_proc_mappings_entry (addr_bit, kve->kve_start,
317 kve->kve_end, kve->kve_offset,
318 kve->kve_flags, kve->kve_protection,
319 kve->kve_path);
92fce24d
JB
320 }
321 else
322 warning (_("unable to fetch virtual memory map"));
323 }
92fce24d
JB
324 if (do_status)
325 {
326 if (!fbsd_fetch_kinfo_proc (pid, &kp))
327 warning (_("Failed to fetch process information"));
328 else
329 {
330 const char *state;
331 int pgtok;
332
333 printf_filtered ("Name: %s\n", kp.ki_comm);
334 switch (kp.ki_stat)
335 {
336 case SIDL:
337 state = "I (idle)";
338 break;
339 case SRUN:
340 state = "R (running)";
341 break;
342 case SSTOP:
343 state = "T (stopped)";
344 break;
345 case SZOMB:
346 state = "Z (zombie)";
347 break;
348 case SSLEEP:
349 state = "S (sleeping)";
350 break;
351 case SWAIT:
352 state = "W (interrupt wait)";
353 break;
354 case SLOCK:
355 state = "L (blocked on lock)";
356 break;
357 default:
358 state = "? (unknown)";
359 break;
360 }
361 printf_filtered ("State: %s\n", state);
362 printf_filtered ("Parent process: %d\n", kp.ki_ppid);
363 printf_filtered ("Process group: %d\n", kp.ki_pgid);
364 printf_filtered ("Session id: %d\n", kp.ki_sid);
365 printf_filtered ("TTY: %ju\n", (uintmax_t) kp.ki_tdev);
366 printf_filtered ("TTY owner process group: %d\n", kp.ki_tpgid);
367 printf_filtered ("User IDs (real, effective, saved): %d %d %d\n",
368 kp.ki_ruid, kp.ki_uid, kp.ki_svuid);
369 printf_filtered ("Group IDs (real, effective, saved): %d %d %d\n",
370 kp.ki_rgid, kp.ki_groups[0], kp.ki_svgid);
371 printf_filtered ("Groups: ");
372 for (int i = 0; i < kp.ki_ngroups; i++)
373 printf_filtered ("%d ", kp.ki_groups[i]);
374 printf_filtered ("\n");
375 printf_filtered ("Minor faults (no memory page): %ld\n",
376 kp.ki_rusage.ru_minflt);
377 printf_filtered ("Minor faults, children: %ld\n",
378 kp.ki_rusage_ch.ru_minflt);
379 printf_filtered ("Major faults (memory page faults): %ld\n",
380 kp.ki_rusage.ru_majflt);
381 printf_filtered ("Major faults, children: %ld\n",
382 kp.ki_rusage_ch.ru_majflt);
383 printf_filtered ("utime: %jd.%06ld\n",
384 (intmax_t) kp.ki_rusage.ru_utime.tv_sec,
385 kp.ki_rusage.ru_utime.tv_usec);
386 printf_filtered ("stime: %jd.%06ld\n",
387 (intmax_t) kp.ki_rusage.ru_stime.tv_sec,
388 kp.ki_rusage.ru_stime.tv_usec);
389 printf_filtered ("utime, children: %jd.%06ld\n",
390 (intmax_t) kp.ki_rusage_ch.ru_utime.tv_sec,
391 kp.ki_rusage_ch.ru_utime.tv_usec);
392 printf_filtered ("stime, children: %jd.%06ld\n",
393 (intmax_t) kp.ki_rusage_ch.ru_stime.tv_sec,
394 kp.ki_rusage_ch.ru_stime.tv_usec);
395 printf_filtered ("'nice' value: %d\n", kp.ki_nice);
396 printf_filtered ("Start time: %jd.%06ld\n", kp.ki_start.tv_sec,
397 kp.ki_start.tv_usec);
398 pgtok = getpagesize () / 1024;
399 printf_filtered ("Virtual memory size: %ju kB\n",
400 (uintmax_t) kp.ki_size / 1024);
401 printf_filtered ("Data size: %ju kB\n",
402 (uintmax_t) kp.ki_dsize * pgtok);
403 printf_filtered ("Stack size: %ju kB\n",
404 (uintmax_t) kp.ki_ssize * pgtok);
405 printf_filtered ("Text size: %ju kB\n",
406 (uintmax_t) kp.ki_tsize * pgtok);
407 printf_filtered ("Resident set size: %ju kB\n",
408 (uintmax_t) kp.ki_rssize * pgtok);
409 printf_filtered ("Maximum RSS: %ju kB\n",
410 (uintmax_t) kp.ki_rusage.ru_maxrss);
411 printf_filtered ("Pending Signals: ");
412 for (int i = 0; i < _SIG_WORDS; i++)
413 printf_filtered ("%08x ", kp.ki_siglist.__bits[i]);
414 printf_filtered ("\n");
415 printf_filtered ("Ignored Signals: ");
416 for (int i = 0; i < _SIG_WORDS; i++)
417 printf_filtered ("%08x ", kp.ki_sigignore.__bits[i]);
418 printf_filtered ("\n");
419 printf_filtered ("Caught Signals: ");
420 for (int i = 0; i < _SIG_WORDS; i++)
421 printf_filtered ("%08x ", kp.ki_sigcatch.__bits[i]);
422 printf_filtered ("\n");
423 }
424 }
f6ac5f3d
PA
425
426 return true;
92fce24d
JB
427}
428
929edea9
JB
429/* Return the size of siginfo for the current inferior. */
430
431#ifdef __LP64__
432union sigval32 {
433 int sival_int;
434 uint32_t sival_ptr;
435};
436
437/* This structure matches the naming and layout of `siginfo_t' in
438 <sys/signal.h>. In particular, the `si_foo' macros defined in that
439 header can be used with both types to copy fields in the `_reason'
440 union. */
441
442struct siginfo32
443{
444 int si_signo;
445 int si_errno;
446 int si_code;
447 __pid_t si_pid;
448 __uid_t si_uid;
449 int si_status;
450 uint32_t si_addr;
451 union sigval32 si_value;
452 union
453 {
454 struct
455 {
456 int _trapno;
457 } _fault;
458 struct
459 {
460 int _timerid;
461 int _overrun;
462 } _timer;
463 struct
464 {
465 int _mqd;
466 } _mesgq;
467 struct
468 {
469 int32_t _band;
470 } _poll;
471 struct
472 {
473 int32_t __spare1__;
474 int __spare2__[7];
475 } __spare__;
476 } _reason;
477};
478#endif
479
480static size_t
481fbsd_siginfo_size ()
482{
483#ifdef __LP64__
484 struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
485
486 /* Is the inferior 32-bit? If so, use the 32-bit siginfo size. */
a181c0bf 487 if (gdbarch_long_bit (gdbarch) == 32)
929edea9
JB
488 return sizeof (struct siginfo32);
489#endif
490 return sizeof (siginfo_t);
491}
492
493/* Convert a native 64-bit siginfo object to a 32-bit object. Note
494 that FreeBSD doesn't support writing to $_siginfo, so this only
495 needs to convert one way. */
496
497static void
498fbsd_convert_siginfo (siginfo_t *si)
499{
500#ifdef __LP64__
501 struct gdbarch *gdbarch = get_frame_arch (get_current_frame ());
502
503 /* Is the inferior 32-bit? If not, nothing to do. */
a181c0bf 504 if (gdbarch_long_bit (gdbarch) != 32)
929edea9
JB
505 return;
506
507 struct siginfo32 si32;
508
509 si32.si_signo = si->si_signo;
510 si32.si_errno = si->si_errno;
511 si32.si_code = si->si_code;
512 si32.si_pid = si->si_pid;
513 si32.si_uid = si->si_uid;
514 si32.si_status = si->si_status;
515 si32.si_addr = (uintptr_t) si->si_addr;
516
517 /* If sival_ptr is being used instead of sival_int on a big-endian
518 platform, then sival_int will be zero since it holds the upper
519 32-bits of the pointer value. */
520#if _BYTE_ORDER == _BIG_ENDIAN
521 if (si->si_value.sival_int == 0)
0335ac6d 522 si32.si_value.sival_ptr = (uintptr_t) si->si_value.sival_ptr;
929edea9
JB
523 else
524 si32.si_value.sival_int = si->si_value.sival_int;
525#else
526 si32.si_value.sival_int = si->si_value.sival_int;
527#endif
528
529 /* Always copy the spare fields and then possibly overwrite them for
530 signal-specific or code-specific fields. */
531 si32._reason.__spare__.__spare1__ = si->_reason.__spare__.__spare1__;
532 for (int i = 0; i < 7; i++)
533 si32._reason.__spare__.__spare2__[i] = si->_reason.__spare__.__spare2__[i];
534 switch (si->si_signo) {
535 case SIGILL:
536 case SIGFPE:
537 case SIGSEGV:
538 case SIGBUS:
539 si32.si_trapno = si->si_trapno;
540 break;
541 }
542 switch (si->si_code) {
543 case SI_TIMER:
544 si32.si_timerid = si->si_timerid;
545 si32.si_overrun = si->si_overrun;
546 break;
547 case SI_MESGQ:
548 si32.si_mqd = si->si_mqd;
549 break;
550 }
551
552 memcpy(si, &si32, sizeof (si32));
553#endif
554}
929edea9 555
f6ac5f3d 556/* Implement the "xfer_partial" target_ops method. */
7697fc9e 557
f6ac5f3d
PA
558enum target_xfer_status
559fbsd_nat_target::xfer_partial (enum target_object object,
560 const char *annex, gdb_byte *readbuf,
561 const gdb_byte *writebuf,
562 ULONGEST offset, ULONGEST len,
563 ULONGEST *xfered_len)
7697fc9e 564{
e99b03dc 565 pid_t pid = inferior_ptid.pid ();
7697fc9e
JB
566
567 switch (object)
568 {
929edea9
JB
569 case TARGET_OBJECT_SIGNAL_INFO:
570 {
571 struct ptrace_lwpinfo pl;
572 size_t siginfo_size;
573
574 /* FreeBSD doesn't support writing to $_siginfo. */
575 if (writebuf != NULL)
576 return TARGET_XFER_E_IO;
577
578 if (inferior_ptid.lwp_p ())
579 pid = inferior_ptid.lwp ();
580
581 siginfo_size = fbsd_siginfo_size ();
582 if (offset > siginfo_size)
583 return TARGET_XFER_E_IO;
584
585 if (ptrace (PT_LWPINFO, pid, (PTRACE_TYPE_ARG3) &pl, sizeof (pl)) == -1)
586 return TARGET_XFER_E_IO;
587
588 if (!(pl.pl_flags & PL_FLAG_SI))
589 return TARGET_XFER_E_IO;
590
591 fbsd_convert_siginfo (&pl.pl_siginfo);
592 if (offset + len > siginfo_size)
593 len = siginfo_size - offset;
594
595 memcpy (readbuf, ((gdb_byte *) &pl.pl_siginfo) + offset, len);
596 *xfered_len = len;
597 return TARGET_XFER_OK;
598 }
f8eb6a9e 599#ifdef KERN_PROC_AUXV
7697fc9e
JB
600 case TARGET_OBJECT_AUXV:
601 {
e4a26669
JB
602 gdb::byte_vector buf_storage;
603 gdb_byte *buf;
7697fc9e
JB
604 size_t buflen;
605 int mib[4];
606
607 if (writebuf != NULL)
608 return TARGET_XFER_E_IO;
609 mib[0] = CTL_KERN;
610 mib[1] = KERN_PROC;
611 mib[2] = KERN_PROC_AUXV;
612 mib[3] = pid;
613 if (offset == 0)
614 {
615 buf = readbuf;
616 buflen = len;
617 }
618 else
619 {
620 buflen = offset + len;
e4a26669
JB
621 buf_storage.resize (buflen);
622 buf = buf_storage.data ();
7697fc9e
JB
623 }
624 if (sysctl (mib, 4, buf, &buflen, NULL, 0) == 0)
625 {
626 if (offset != 0)
627 {
628 if (buflen > offset)
629 {
630 buflen -= offset;
631 memcpy (readbuf, buf + offset, buflen);
632 }
633 else
634 buflen = 0;
635 }
7697fc9e
JB
636 *xfered_len = buflen;
637 return (buflen == 0) ? TARGET_XFER_EOF : TARGET_XFER_OK;
638 }
7697fc9e
JB
639 return TARGET_XFER_E_IO;
640 }
f8eb6a9e
JB
641#endif
642#if defined(KERN_PROC_VMMAP) && defined(KERN_PROC_PS_STRINGS)
739ab2e9
SS
643 case TARGET_OBJECT_FREEBSD_VMMAP:
644 case TARGET_OBJECT_FREEBSD_PS_STRINGS:
645 {
646 gdb::byte_vector buf_storage;
647 gdb_byte *buf;
648 size_t buflen;
649 int mib[4];
650
651 int proc_target;
652 uint32_t struct_size;
653 switch (object)
654 {
655 case TARGET_OBJECT_FREEBSD_VMMAP:
656 proc_target = KERN_PROC_VMMAP;
657 struct_size = sizeof (struct kinfo_vmentry);
658 break;
659 case TARGET_OBJECT_FREEBSD_PS_STRINGS:
660 proc_target = KERN_PROC_PS_STRINGS;
661 struct_size = sizeof (void *);
662 break;
663 }
664
665 if (writebuf != NULL)
666 return TARGET_XFER_E_IO;
667
668 mib[0] = CTL_KERN;
669 mib[1] = KERN_PROC;
670 mib[2] = proc_target;
671 mib[3] = pid;
672
673 if (sysctl (mib, 4, NULL, &buflen, NULL, 0) != 0)
674 return TARGET_XFER_E_IO;
675 buflen += sizeof (struct_size);
676
677 if (offset >= buflen)
678 {
679 *xfered_len = 0;
680 return TARGET_XFER_EOF;
681 }
682
683 buf_storage.resize (buflen);
684 buf = buf_storage.data ();
685
686 memcpy (buf, &struct_size, sizeof (struct_size));
687 buflen -= sizeof (struct_size);
688 if (sysctl (mib, 4, buf + sizeof (struct_size), &buflen, NULL, 0) != 0)
689 return TARGET_XFER_E_IO;
690 buflen += sizeof (struct_size);
691
692 if (buflen - offset < len)
693 len = buflen - offset;
694 memcpy (readbuf, buf + offset, len);
695 *xfered_len = len;
696 return TARGET_XFER_OK;
697 }
f8eb6a9e 698#endif
7697fc9e 699 default:
f6ac5f3d
PA
700 return inf_ptrace_target::xfer_partial (object, annex,
701 readbuf, writebuf, offset,
702 len, xfered_len);
7697fc9e
JB
703 }
704}
7697fc9e 705
491144b5
CB
706static bool debug_fbsd_lwp;
707static bool debug_fbsd_nat;
6e9567fe 708
6e9567fe
JB
709static void
710show_fbsd_lwp_debug (struct ui_file *file, int from_tty,
711 struct cmd_list_element *c, const char *value)
712{
713 fprintf_filtered (file, _("Debugging of FreeBSD lwp module is %s.\n"), value);
714}
715
386a8676
JB
716static void
717show_fbsd_nat_debug (struct ui_file *file, int from_tty,
718 struct cmd_list_element *c, const char *value)
719{
720 fprintf_filtered (file, _("Debugging of FreeBSD native target is %s.\n"),
721 value);
722}
723
6e9567fe
JB
724/*
725 FreeBSD's first thread support was via a "reentrant" version of libc
726 (libc_r) that first shipped in 2.2.7. This library multiplexed all
727 of the threads in a process onto a single kernel thread. This
4c7bf4f9 728 library was supported via the bsd-uthread target.
6e9567fe
JB
729
730 FreeBSD 5.1 introduced two new threading libraries that made use of
731 multiple kernel threads. The first (libkse) scheduled M user
732 threads onto N (<= M) kernel threads (LWPs). The second (libthr)
733 bound each user thread to a dedicated kernel thread. libkse shipped
734 as the default threading library (libpthread).
735
736 FreeBSD 5.3 added a libthread_db to abstract the interface across
737 the various thread libraries (libc_r, libkse, and libthr).
738
739 FreeBSD 7.0 switched the default threading library from from libkse
740 to libpthread and removed libc_r.
741
742 FreeBSD 8.0 removed libkse and the in-kernel support for it. The
743 only threading library supported by 8.0 and later is libthr which
744 ties each user thread directly to an LWP. To simplify the
745 implementation, this target only supports LWP-backed threads using
746 ptrace directly rather than libthread_db.
747
748 FreeBSD 11.0 introduced LWP event reporting via PT_LWP_EVENTS.
749*/
750
751/* Return true if PTID is still active in the inferior. */
752
57810aa7 753bool
f6ac5f3d 754fbsd_nat_target::thread_alive (ptid_t ptid)
6e9567fe 755{
15a9e13e 756 if (ptid.lwp_p ())
6e9567fe
JB
757 {
758 struct ptrace_lwpinfo pl;
759
e38504b3 760 if (ptrace (PT_LWPINFO, ptid.lwp (), (caddr_t) &pl, sizeof pl)
6e9567fe 761 == -1)
57810aa7 762 return false;
6e9567fe
JB
763#ifdef PL_FLAG_EXITED
764 if (pl.pl_flags & PL_FLAG_EXITED)
57810aa7 765 return false;
6e9567fe
JB
766#endif
767 }
768
57810aa7 769 return true;
6e9567fe
JB
770}
771
a068643d 772/* Convert PTID to a string. */
6e9567fe 773
a068643d 774std::string
f6ac5f3d 775fbsd_nat_target::pid_to_str (ptid_t ptid)
6e9567fe
JB
776{
777 lwpid_t lwp;
778
e38504b3 779 lwp = ptid.lwp ();
6e9567fe
JB
780 if (lwp != 0)
781 {
e99b03dc 782 int pid = ptid.pid ();
6e9567fe 783
a068643d 784 return string_printf ("LWP %d of process %d", lwp, pid);
6e9567fe
JB
785 }
786
787 return normal_pid_to_str (ptid);
788}
789
790#ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_TDNAME
791/* Return the name assigned to a thread by an application. Returns
792 the string in a static buffer. */
793
f6ac5f3d
PA
794const char *
795fbsd_nat_target::thread_name (struct thread_info *thr)
6e9567fe
JB
796{
797 struct ptrace_lwpinfo pl;
798 struct kinfo_proc kp;
e99b03dc 799 int pid = thr->ptid.pid ();
e38504b3 800 long lwp = thr->ptid.lwp ();
6e9567fe
JB
801 static char buf[sizeof pl.pl_tdname + 1];
802
803 /* Note that ptrace_lwpinfo returns the process command in pl_tdname
804 if a name has not been set explicitly. Return a NULL name in
805 that case. */
92fce24d
JB
806 if (!fbsd_fetch_kinfo_proc (pid, &kp))
807 perror_with_name (_("Failed to fetch process information"));
6e9567fe
JB
808 if (ptrace (PT_LWPINFO, lwp, (caddr_t) &pl, sizeof pl) == -1)
809 perror_with_name (("ptrace"));
810 if (strcmp (kp.ki_comm, pl.pl_tdname) == 0)
811 return NULL;
812 xsnprintf (buf, sizeof buf, "%s", pl.pl_tdname);
813 return buf;
814}
815#endif
816
da95a26c 817/* Enable additional event reporting on new processes.
6e9567fe 818
da95a26c
JB
819 To catch fork events, PTRACE_FORK is set on every traced process
820 to enable stops on returns from fork or vfork. Note that both the
821 parent and child will always stop, even if system call stops are
822 not enabled.
823
824 To catch LWP events, PTRACE_EVENTS is set on every traced process.
6e9567fe
JB
825 This enables stops on the birth for new LWPs (excluding the "main" LWP)
826 and the death of LWPs (excluding the last LWP in a process). Note
827 that unlike fork events, the LWP that creates a new LWP does not
828 report an event. */
829
830static void
da95a26c 831fbsd_enable_proc_events (pid_t pid)
6e9567fe 832{
da95a26c
JB
833#ifdef PT_GET_EVENT_MASK
834 int events;
835
836 if (ptrace (PT_GET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
837 sizeof (events)) == -1)
838 perror_with_name (("ptrace"));
839 events |= PTRACE_FORK | PTRACE_LWP;
dbaed385
JB
840#ifdef PTRACE_VFORK
841 events |= PTRACE_VFORK;
842#endif
da95a26c
JB
843 if (ptrace (PT_SET_EVENT_MASK, pid, (PTRACE_TYPE_ARG3)&events,
844 sizeof (events)) == -1)
845 perror_with_name (("ptrace"));
846#else
847#ifdef TDP_RFPPWAIT
848 if (ptrace (PT_FOLLOW_FORK, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
849 perror_with_name (("ptrace"));
850#endif
851#ifdef PT_LWP_EVENTS
6e9567fe
JB
852 if (ptrace (PT_LWP_EVENTS, pid, (PTRACE_TYPE_ARG3)0, 1) == -1)
853 perror_with_name (("ptrace"));
6e9567fe 854#endif
da95a26c
JB
855#endif
856}
6e9567fe
JB
857
858/* Add threads for any new LWPs in a process.
859
860 When LWP events are used, this function is only used to detect existing
861 threads when attaching to a process. On older systems, this function is
862 called to discover new threads each time the thread list is updated. */
863
864static void
5b6d1e4f 865fbsd_add_threads (fbsd_nat_target *target, pid_t pid)
6e9567fe 866{
6e9567fe
JB
867 int i, nlwps;
868
5b6d1e4f 869 gdb_assert (!in_thread_list (target, ptid_t (pid)));
6e9567fe
JB
870 nlwps = ptrace (PT_GETNUMLWPS, pid, NULL, 0);
871 if (nlwps == -1)
872 perror_with_name (("ptrace"));
873
329d5e7e 874 gdb::unique_xmalloc_ptr<lwpid_t[]> lwps (XCNEWVEC (lwpid_t, nlwps));
6e9567fe 875
e4a26669 876 nlwps = ptrace (PT_GETLWPLIST, pid, (caddr_t) lwps.get (), nlwps);
6e9567fe
JB
877 if (nlwps == -1)
878 perror_with_name (("ptrace"));
879
880 for (i = 0; i < nlwps; i++)
881 {
fd79271b 882 ptid_t ptid = ptid_t (pid, lwps[i], 0);
6e9567fe 883
5b6d1e4f 884 if (!in_thread_list (target, ptid))
6e9567fe
JB
885 {
886#ifdef PT_LWP_EVENTS
887 struct ptrace_lwpinfo pl;
888
889 /* Don't add exited threads. Note that this is only called
890 when attaching to a multi-threaded process. */
329d5e7e 891 if (ptrace (PT_LWPINFO, lwps[i], (caddr_t) &pl, sizeof pl) == -1)
6e9567fe
JB
892 perror_with_name (("ptrace"));
893 if (pl.pl_flags & PL_FLAG_EXITED)
894 continue;
895#endif
896 if (debug_fbsd_lwp)
897 fprintf_unfiltered (gdb_stdlog,
898 "FLWP: adding thread for LWP %u\n",
329d5e7e 899 lwps[i]);
5b6d1e4f 900 add_thread (target, ptid);
6e9567fe
JB
901 }
902 }
6e9567fe
JB
903}
904
f6ac5f3d 905/* Implement the "update_thread_list" target_ops method. */
6e9567fe 906
f6ac5f3d
PA
907void
908fbsd_nat_target::update_thread_list ()
6e9567fe
JB
909{
910#ifdef PT_LWP_EVENTS
911 /* With support for thread events, threads are added/deleted from the
912 list as events are reported, so just try deleting exited threads. */
913 delete_exited_threads ();
914#else
915 prune_threads ();
916
5b6d1e4f 917 fbsd_add_threads (this, inferior_ptid.pid ());
6e9567fe
JB
918#endif
919}
920
e58e05d6
JB
921#ifdef TDP_RFPPWAIT
922/*
923 To catch fork events, PT_FOLLOW_FORK is set on every traced process
924 to enable stops on returns from fork or vfork. Note that both the
925 parent and child will always stop, even if system call stops are not
926 enabled.
927
928 After a fork, both the child and parent process will stop and report
929 an event. However, there is no guarantee of order. If the parent
930 reports its stop first, then fbsd_wait explicitly waits for the new
931 child before returning. If the child reports its stop first, then
932 the event is saved on a list and ignored until the parent's stop is
933 reported. fbsd_wait could have been changed to fetch the parent PID
934 of the new child and used that to wait for the parent explicitly.
935 However, if two threads in the parent fork at the same time, then
936 the wait on the parent might return the "wrong" fork event.
937
938 The initial version of PT_FOLLOW_FORK did not set PL_FLAG_CHILD for
939 the new child process. This flag could be inferred by treating any
940 events for an unknown pid as a new child.
941
942 In addition, the initial version of PT_FOLLOW_FORK did not report a
943 stop event for the parent process of a vfork until after the child
944 process executed a new program or exited. The kernel was changed to
945 defer the wait for exit or exec of the child until after posting the
946 stop event shortly after the change to introduce PL_FLAG_CHILD.
947 This could be worked around by reporting a vfork event when the
948 child event posted and ignoring the subsequent event from the
949 parent.
950
951 This implementation requires both of these fixes for simplicity's
952 sake. FreeBSD versions newer than 9.1 contain both fixes.
953*/
954
e8c6b620 955static std::list<ptid_t> fbsd_pending_children;
e58e05d6
JB
956
957/* Record a new child process event that is reported before the
958 corresponding fork event in the parent. */
959
960static void
6e9567fe 961fbsd_remember_child (ptid_t pid)
e58e05d6 962{
e8c6b620 963 fbsd_pending_children.push_front (pid);
e58e05d6
JB
964}
965
966/* Check for a previously-recorded new child process event for PID.
6e9567fe 967 If one is found, remove it from the list and return the PTID. */
e58e05d6 968
6e9567fe 969static ptid_t
e58e05d6
JB
970fbsd_is_child_pending (pid_t pid)
971{
e8c6b620
JB
972 for (auto it = fbsd_pending_children.begin ();
973 it != fbsd_pending_children.end (); it++)
974 if (it->pid () == pid)
975 {
976 ptid_t ptid = *it;
977 fbsd_pending_children.erase (it);
978 return ptid;
979 }
6e9567fe 980 return null_ptid;
e58e05d6 981}
2c5c2a33 982
dbaed385 983#ifndef PTRACE_VFORK
e8c6b620 984static std::forward_list<ptid_t> fbsd_pending_vfork_done;
2c5c2a33
JB
985
986/* Record a pending vfork done event. */
987
988static void
989fbsd_add_vfork_done (ptid_t pid)
990{
e8c6b620 991 fbsd_pending_vfork_done.push_front (pid);
2c5c2a33
JB
992}
993
994/* Check for a pending vfork done event for a specific PID. */
995
996static int
997fbsd_is_vfork_done_pending (pid_t pid)
998{
e8c6b620
JB
999 for (auto it = fbsd_pending_vfork_done.begin ();
1000 it != fbsd_pending_vfork_done.end (); it++)
1001 if (it->pid () == pid)
1002 return 1;
2c5c2a33
JB
1003 return 0;
1004}
1005
1006/* Check for a pending vfork done event. If one is found, remove it
1007 from the list and return the PTID. */
1008
ee950322 1009static ptid_t
2c5c2a33
JB
1010fbsd_next_vfork_done (void)
1011{
e8c6b620 1012 if (!fbsd_pending_vfork_done.empty ())
2c5c2a33 1013 {
e8c6b620
JB
1014 ptid_t ptid = fbsd_pending_vfork_done.front ();
1015 fbsd_pending_vfork_done.pop_front ();
2c5c2a33
JB
1016 return ptid;
1017 }
1018 return null_ptid;
1019}
e58e05d6 1020#endif
dbaed385 1021#endif
e58e05d6 1022
f6ac5f3d 1023/* Implement the "resume" target_ops method. */
8607ea63 1024
f6ac5f3d
PA
1025void
1026fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
8607ea63 1027{
dbaed385 1028#if defined(TDP_RFPPWAIT) && !defined(PTRACE_VFORK)
2c5c2a33
JB
1029 pid_t pid;
1030
1031 /* Don't PT_CONTINUE a process which has a pending vfork done event. */
d7e15655 1032 if (minus_one_ptid == ptid)
e99b03dc 1033 pid = inferior_ptid.pid ();
2c5c2a33 1034 else
e99b03dc 1035 pid = ptid.pid ();
2c5c2a33
JB
1036 if (fbsd_is_vfork_done_pending (pid))
1037 return;
1038#endif
8607ea63
JB
1039
1040 if (debug_fbsd_lwp)
1041 fprintf_unfiltered (gdb_stdlog,
1042 "FLWP: fbsd_resume for ptid (%d, %ld, %ld)\n",
e38504b3 1043 ptid.pid (), ptid.lwp (),
cc6bcb54 1044 ptid.tid ());
15a9e13e 1045 if (ptid.lwp_p ())
8607ea63
JB
1046 {
1047 /* If ptid is a specific LWP, suspend all other LWPs in the process. */
5b6d1e4f 1048 inferior *inf = find_inferior_ptid (this, ptid);
d56060f0 1049
08036331 1050 for (thread_info *tp : inf->non_exited_threads ())
dda83cd7 1051 {
08036331 1052 int request;
d56060f0 1053
e38504b3 1054 if (tp->ptid.lwp () == ptid.lwp ())
d56060f0
JB
1055 request = PT_RESUME;
1056 else
1057 request = PT_SUSPEND;
1058
e38504b3 1059 if (ptrace (request, tp->ptid.lwp (), NULL, 0) == -1)
d56060f0
JB
1060 perror_with_name (("ptrace"));
1061 }
8607ea63
JB
1062 }
1063 else
1064 {
1065 /* If ptid is a wildcard, resume all matching threads (they won't run
1066 until the process is continued however). */
5b6d1e4f 1067 for (thread_info *tp : all_non_exited_threads (this, ptid))
08036331
PA
1068 if (ptrace (PT_RESUME, tp->ptid.lwp (), NULL, 0) == -1)
1069 perror_with_name (("ptrace"));
8607ea63
JB
1070 ptid = inferior_ptid;
1071 }
f169cfdc
JB
1072
1073#if __FreeBSD_version < 1200052
1074 /* When multiple threads within a process wish to report STOPPED
1075 events from wait(), the kernel picks one thread event as the
1076 thread event to report. The chosen thread event is retrieved via
1077 PT_LWPINFO by passing the process ID as the request pid. If
1078 multiple events are pending, then the subsequent wait() after
1079 resuming a process will report another STOPPED event after
1080 resuming the process to handle the next thread event and so on.
1081
1082 A single thread event is cleared as a side effect of resuming the
1083 process with PT_CONTINUE, PT_STEP, etc. In older kernels,
1084 however, the request pid was used to select which thread's event
1085 was cleared rather than always clearing the event that was just
1086 reported. To avoid clearing the event of the wrong LWP, always
1087 pass the process ID instead of an LWP ID to PT_CONTINUE or
1088 PT_SYSCALL.
1089
1090 In the case of stepping, the process ID cannot be used with
1091 PT_STEP since it would step the thread that reported an event
1092 which may not be the thread indicated by PTID. For stepping, use
1093 PT_SETSTEP to enable stepping on the desired thread before
1094 resuming the process via PT_CONTINUE instead of using
1095 PT_STEP. */
1096 if (step)
1097 {
1098 if (ptrace (PT_SETSTEP, get_ptrace_pid (ptid), NULL, 0) == -1)
1099 perror_with_name (("ptrace"));
1100 step = 0;
1101 }
1102 ptid = ptid_t (ptid.pid ());
1103#endif
f6ac5f3d 1104 inf_ptrace_target::resume (ptid, step, signo);
8607ea63
JB
1105}
1106
7efba073
JB
1107#ifdef USE_SIGTRAP_SIGINFO
1108/* Handle breakpoint and trace traps reported via SIGTRAP. If the
1109 trap was a breakpoint or trace trap that should be reported to the
1110 core, return true. */
1111
1112static bool
5b6d1e4f
PA
1113fbsd_handle_debug_trap (fbsd_nat_target *target, ptid_t ptid,
1114 const struct ptrace_lwpinfo &pl)
7efba073
JB
1115{
1116
1117 /* Ignore traps without valid siginfo or for signals other than
6d78332e
JB
1118 SIGTRAP.
1119
1120 FreeBSD kernels prior to r341800 can return stale siginfo for at
1121 least some events, but those events can be identified by
1122 additional flags set in pl_flags. True breakpoint and
1123 single-step traps should not have other flags set in
1124 pl_flags. */
1125 if (pl.pl_flags != PL_FLAG_SI || pl.pl_siginfo.si_signo != SIGTRAP)
7efba073
JB
1126 return false;
1127
1128 /* Trace traps are either a single step or a hardware watchpoint or
1129 breakpoint. */
1130 if (pl.pl_siginfo.si_code == TRAP_TRACE)
1131 {
1132 if (debug_fbsd_nat)
1133 fprintf_unfiltered (gdb_stdlog,
1134 "FNAT: trace trap for LWP %ld\n", ptid.lwp ());
1135 return true;
1136 }
1137
1138 if (pl.pl_siginfo.si_code == TRAP_BRKPT)
1139 {
1140 /* Fixup PC for the software breakpoint. */
5b6d1e4f 1141 struct regcache *regcache = get_thread_regcache (target, ptid);
7efba073
JB
1142 struct gdbarch *gdbarch = regcache->arch ();
1143 int decr_pc = gdbarch_decr_pc_after_break (gdbarch);
1144
1145 if (debug_fbsd_nat)
1146 fprintf_unfiltered (gdb_stdlog,
1147 "FNAT: sw breakpoint trap for LWP %ld\n",
1148 ptid.lwp ());
1149 if (decr_pc != 0)
1150 {
1151 CORE_ADDR pc;
1152
1153 pc = regcache_read_pc (regcache);
1154 regcache_write_pc (regcache, pc - decr_pc);
1155 }
1156 return true;
1157 }
1158
1159 return false;
1160}
1161#endif
1162
e58e05d6
JB
1163/* Wait for the child specified by PTID to do something. Return the
1164 process ID of the child, or MINUS_ONE_PTID in case of error; store
1165 the status in *OURSTATUS. */
1166
f6ac5f3d
PA
1167ptid_t
1168fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
b60cea74 1169 target_wait_flags target_options)
e58e05d6
JB
1170{
1171 ptid_t wptid;
1172
1173 while (1)
1174 {
dbaed385 1175#ifndef PTRACE_VFORK
2c5c2a33 1176 wptid = fbsd_next_vfork_done ();
d7e15655 1177 if (wptid != null_ptid)
2c5c2a33
JB
1178 {
1179 ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
1180 return wptid;
1181 }
dbaed385 1182#endif
f6ac5f3d 1183 wptid = inf_ptrace_target::wait (ptid, ourstatus, target_options);
e58e05d6
JB
1184 if (ourstatus->kind == TARGET_WAITKIND_STOPPED)
1185 {
1186 struct ptrace_lwpinfo pl;
1187 pid_t pid;
1188 int status;
1189
e99b03dc 1190 pid = wptid.pid ();
6e9567fe 1191 if (ptrace (PT_LWPINFO, pid, (caddr_t) &pl, sizeof pl) == -1)
e58e05d6
JB
1192 perror_with_name (("ptrace"));
1193
fd79271b 1194 wptid = ptid_t (pid, pl.pl_lwpid, 0);
6e9567fe 1195
386a8676
JB
1196 if (debug_fbsd_nat)
1197 {
1198 fprintf_unfiltered (gdb_stdlog,
1199 "FNAT: stop for LWP %u event %d flags %#x\n",
1200 pl.pl_lwpid, pl.pl_event, pl.pl_flags);
1201 if (pl.pl_flags & PL_FLAG_SI)
1202 fprintf_unfiltered (gdb_stdlog,
1203 "FNAT: si_signo %u si_code %u\n",
1204 pl.pl_siginfo.si_signo,
1205 pl.pl_siginfo.si_code);
1206 }
1207
6e9567fe
JB
1208#ifdef PT_LWP_EVENTS
1209 if (pl.pl_flags & PL_FLAG_EXITED)
1210 {
1211 /* If GDB attaches to a multi-threaded process, exiting
f6ac5f3d 1212 threads might be skipped during post_attach that
6e9567fe
JB
1213 have not yet reported their PL_FLAG_EXITED event.
1214 Ignore EXITED events for an unknown LWP. */
5b6d1e4f 1215 thread_info *thr = find_thread_ptid (this, wptid);
b7a08269 1216 if (thr != nullptr)
6e9567fe
JB
1217 {
1218 if (debug_fbsd_lwp)
1219 fprintf_unfiltered (gdb_stdlog,
1220 "FLWP: deleting thread for LWP %u\n",
1221 pl.pl_lwpid);
1222 if (print_thread_events)
a068643d
TT
1223 printf_unfiltered (_("[%s exited]\n"),
1224 target_pid_to_str (wptid).c_str ());
b7a08269 1225 delete_thread (thr);
6e9567fe
JB
1226 }
1227 if (ptrace (PT_CONTINUE, pid, (caddr_t) 1, 0) == -1)
1228 perror_with_name (("ptrace"));
1229 continue;
1230 }
1231#endif
1232
1233 /* Switch to an LWP PTID on the first stop in a new process.
1234 This is done after handling PL_FLAG_EXITED to avoid
1235 switching to an exited LWP. It is done before checking
1236 PL_FLAG_BORN in case the first stop reported after
1237 attaching to an existing process is a PL_FLAG_BORN
1238 event. */
5b6d1e4f 1239 if (in_thread_list (this, ptid_t (pid)))
6e9567fe
JB
1240 {
1241 if (debug_fbsd_lwp)
1242 fprintf_unfiltered (gdb_stdlog,
1243 "FLWP: using LWP %u for first thread\n",
1244 pl.pl_lwpid);
5b6d1e4f 1245 thread_change_ptid (this, ptid_t (pid), wptid);
6e9567fe
JB
1246 }
1247
1248#ifdef PT_LWP_EVENTS
1249 if (pl.pl_flags & PL_FLAG_BORN)
1250 {
1251 /* If GDB attaches to a multi-threaded process, newborn
1252 threads might be added by fbsd_add_threads that have
1253 not yet reported their PL_FLAG_BORN event. Ignore
1254 BORN events for an already-known LWP. */
5b6d1e4f 1255 if (!in_thread_list (this, wptid))
6e9567fe
JB
1256 {
1257 if (debug_fbsd_lwp)
1258 fprintf_unfiltered (gdb_stdlog,
1259 "FLWP: adding thread for LWP %u\n",
1260 pl.pl_lwpid);
5b6d1e4f 1261 add_thread (this, wptid);
6e9567fe
JB
1262 }
1263 ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
1264 return wptid;
1265 }
1266#endif
1267
e58e05d6
JB
1268#ifdef TDP_RFPPWAIT
1269 if (pl.pl_flags & PL_FLAG_FORKED)
1270 {
dbaed385 1271#ifndef PTRACE_VFORK
e58e05d6 1272 struct kinfo_proc kp;
dbaed385 1273#endif
6e9567fe 1274 ptid_t child_ptid;
e58e05d6
JB
1275 pid_t child;
1276
1277 child = pl.pl_child_pid;
1278 ourstatus->kind = TARGET_WAITKIND_FORKED;
dbaed385
JB
1279#ifdef PTRACE_VFORK
1280 if (pl.pl_flags & PL_FLAG_VFORKED)
1281 ourstatus->kind = TARGET_WAITKIND_VFORKED;
1282#endif
e58e05d6
JB
1283
1284 /* Make sure the other end of the fork is stopped too. */
6e9567fe 1285 child_ptid = fbsd_is_child_pending (child);
d7e15655 1286 if (child_ptid == null_ptid)
e58e05d6
JB
1287 {
1288 pid = waitpid (child, &status, 0);
1289 if (pid == -1)
1290 perror_with_name (("waitpid"));
1291
1292 gdb_assert (pid == child);
1293
1294 if (ptrace (PT_LWPINFO, child, (caddr_t)&pl, sizeof pl) == -1)
1295 perror_with_name (("ptrace"));
1296
1297 gdb_assert (pl.pl_flags & PL_FLAG_CHILD);
fd79271b 1298 child_ptid = ptid_t (child, pl.pl_lwpid, 0);
e58e05d6
JB
1299 }
1300
5fa14c6b 1301 /* Enable additional events on the child process. */
e99b03dc 1302 fbsd_enable_proc_events (child_ptid.pid ());
5fa14c6b 1303
dbaed385 1304#ifndef PTRACE_VFORK
e58e05d6
JB
1305 /* For vfork, the child process will have the P_PPWAIT
1306 flag set. */
92fce24d
JB
1307 if (fbsd_fetch_kinfo_proc (child, &kp))
1308 {
1309 if (kp.ki_flag & P_PPWAIT)
1310 ourstatus->kind = TARGET_WAITKIND_VFORKED;
1311 }
1312 else
1313 warning (_("Failed to fetch process information"));
dbaed385 1314#endif
6e9567fe 1315 ourstatus->value.related_pid = child_ptid;
e58e05d6
JB
1316
1317 return wptid;
1318 }
1319
1320 if (pl.pl_flags & PL_FLAG_CHILD)
1321 {
1322 /* Remember that this child forked, but do not report it
1323 until the parent reports its corresponding fork
1324 event. */
6e9567fe 1325 fbsd_remember_child (wptid);
e58e05d6
JB
1326 continue;
1327 }
dbaed385
JB
1328
1329#ifdef PTRACE_VFORK
1330 if (pl.pl_flags & PL_FLAG_VFORK_DONE)
1331 {
1332 ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
1333 return wptid;
1334 }
1335#endif
e58e05d6 1336#endif
d2b41ca0 1337
d2b41ca0
JB
1338 if (pl.pl_flags & PL_FLAG_EXEC)
1339 {
1340 ourstatus->kind = TARGET_WAITKIND_EXECD;
1341 ourstatus->value.execd_pathname
f6ac5f3d 1342 = xstrdup (pid_to_exec_file (pid));
d2b41ca0
JB
1343 return wptid;
1344 }
e6cdd38e 1345
7efba073 1346#ifdef USE_SIGTRAP_SIGINFO
5b6d1e4f 1347 if (fbsd_handle_debug_trap (this, wptid, pl))
7efba073
JB
1348 return wptid;
1349#endif
1350
e6cdd38e
JB
1351 /* Note that PL_FLAG_SCE is set for any event reported while
1352 a thread is executing a system call in the kernel. In
1353 particular, signals that interrupt a sleep in a system
1354 call will report this flag as part of their event. Stops
1355 explicitly for system call entry and exit always use
1356 SIGTRAP, so only treat SIGTRAP events as system call
1357 entry/exit events. */
1358 if (pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)
1359 && ourstatus->value.sig == SIGTRAP)
1360 {
1361#ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE
1362 if (catch_syscall_enabled ())
1363 {
1364 if (catching_syscall_number (pl.pl_syscall_code))
1365 {
1366 if (pl.pl_flags & PL_FLAG_SCE)
1367 ourstatus->kind = TARGET_WAITKIND_SYSCALL_ENTRY;
1368 else
1369 ourstatus->kind = TARGET_WAITKIND_SYSCALL_RETURN;
1370 ourstatus->value.syscall_number = pl.pl_syscall_code;
1371 return wptid;
1372 }
1373 }
1374#endif
1375 /* If the core isn't interested in this event, just
1376 continue the process explicitly and wait for another
1377 event. Note that PT_SYSCALL is "sticky" on FreeBSD
1378 and once system call stops are enabled on a process
1379 it stops for all system call entries and exits. */
1380 if (ptrace (PT_CONTINUE, pid, (caddr_t) 1, 0) == -1)
1381 perror_with_name (("ptrace"));
1382 continue;
1383 }
e58e05d6
JB
1384 }
1385 return wptid;
1386 }
1387}
1388
7efba073 1389#ifdef USE_SIGTRAP_SIGINFO
f6ac5f3d 1390/* Implement the "stopped_by_sw_breakpoint" target_ops method. */
7efba073 1391
57810aa7 1392bool
f6ac5f3d 1393fbsd_nat_target::stopped_by_sw_breakpoint ()
7efba073
JB
1394{
1395 struct ptrace_lwpinfo pl;
1396
1397 if (ptrace (PT_LWPINFO, get_ptrace_pid (inferior_ptid), (caddr_t) &pl,
1398 sizeof pl) == -1)
57810aa7 1399 return false;
7efba073 1400
6d78332e 1401 return (pl.pl_flags == PL_FLAG_SI
7efba073
JB
1402 && pl.pl_siginfo.si_signo == SIGTRAP
1403 && pl.pl_siginfo.si_code == TRAP_BRKPT);
1404}
1405
f6ac5f3d 1406/* Implement the "supports_stopped_by_sw_breakpoint" target_ops
7efba073
JB
1407 method. */
1408
57810aa7 1409bool
f6ac5f3d 1410fbsd_nat_target::supports_stopped_by_sw_breakpoint ()
7efba073 1411{
57810aa7 1412 return true;
7efba073 1413}
7efba073
JB
1414#endif
1415
e58e05d6
JB
1416#ifdef TDP_RFPPWAIT
1417/* Target hook for follow_fork. On entry and at return inferior_ptid is
1418 the ptid of the followed inferior. */
1419
5ab2fbf1
SM
1420bool
1421fbsd_nat_target::follow_fork (bool follow_child, bool detach_fork)
e58e05d6 1422{
bb2a62e6 1423 if (!follow_child && detach_fork)
e58e05d6
JB
1424 {
1425 struct thread_info *tp = inferior_thread ();
e99b03dc 1426 pid_t child_pid = tp->pending_follow.value.related_pid.pid ();
e58e05d6
JB
1427
1428 /* Breakpoints have already been detached from the child by
1429 infrun.c. */
1430
1431 if (ptrace (PT_DETACH, child_pid, (PTRACE_TYPE_ARG3)1, 0) == -1)
1432 perror_with_name (("ptrace"));
2c5c2a33 1433
dbaed385
JB
1434#ifndef PTRACE_VFORK
1435 if (tp->pending_follow.kind == TARGET_WAITKIND_VFORKED)
2c5c2a33
JB
1436 {
1437 /* We can't insert breakpoints until the child process has
1438 finished with the shared memory region. The parent
1439 process doesn't wait for the child process to exit or
1440 exec until after it has been resumed from the ptrace stop
1441 to report the fork. Once it has been resumed it doesn't
1442 stop again before returning to userland, so there is no
1443 reliable way to wait on the parent.
1444
1445 We can't stay attached to the child to wait for an exec
1446 or exit because it may invoke ptrace(PT_TRACE_ME)
1447 (e.g. if the parent process is a debugger forking a new
1448 child process).
1449
1450 In the end, the best we can do is to make sure it runs
1451 for a little while. Hopefully it will be out of range of
1452 any breakpoints we reinsert. Usually this is only the
1453 single-step breakpoint at vfork's return point. */
1454
1455 usleep (10000);
1456
1457 /* Schedule a fake VFORK_DONE event to report on the next
1458 wait. */
1459 fbsd_add_vfork_done (inferior_ptid);
1460 }
dbaed385 1461#endif
e58e05d6
JB
1462 }
1463
5ab2fbf1 1464 return false;
e58e05d6
JB
1465}
1466
f6ac5f3d
PA
1467int
1468fbsd_nat_target::insert_fork_catchpoint (int pid)
e58e05d6
JB
1469{
1470 return 0;
1471}
1472
f6ac5f3d
PA
1473int
1474fbsd_nat_target::remove_fork_catchpoint (int pid)
e58e05d6
JB
1475{
1476 return 0;
1477}
1478
f6ac5f3d
PA
1479int
1480fbsd_nat_target::insert_vfork_catchpoint (int pid)
e58e05d6
JB
1481{
1482 return 0;
1483}
1484
f6ac5f3d
PA
1485int
1486fbsd_nat_target::remove_vfork_catchpoint (int pid)
e58e05d6
JB
1487{
1488 return 0;
1489}
6e9567fe 1490#endif
e58e05d6 1491
f6ac5f3d 1492/* Implement the "post_startup_inferior" target_ops method. */
e58e05d6 1493
f6ac5f3d
PA
1494void
1495fbsd_nat_target::post_startup_inferior (ptid_t pid)
e58e05d6 1496{
e99b03dc 1497 fbsd_enable_proc_events (pid.pid ());
e58e05d6
JB
1498}
1499
f6ac5f3d 1500/* Implement the "post_attach" target_ops method. */
e58e05d6 1501
f6ac5f3d
PA
1502void
1503fbsd_nat_target::post_attach (int pid)
e58e05d6 1504{
da95a26c 1505 fbsd_enable_proc_events (pid);
5b6d1e4f 1506 fbsd_add_threads (this, pid);
6e9567fe 1507}
d2b41ca0 1508
fe5ddfc3 1509/* Traced processes always stop after exec. */
d2b41ca0 1510
f6ac5f3d
PA
1511int
1512fbsd_nat_target::insert_exec_catchpoint (int pid)
d2b41ca0
JB
1513{
1514 return 0;
1515}
1516
f6ac5f3d
PA
1517int
1518fbsd_nat_target::remove_exec_catchpoint (int pid)
d2b41ca0
JB
1519{
1520 return 0;
1521}
e6cdd38e
JB
1522
1523#ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE
f6ac5f3d
PA
1524int
1525fbsd_nat_target::set_syscall_catchpoint (int pid, bool needed,
1526 int any_count,
1527 gdb::array_view<const int> syscall_counts)
e6cdd38e
JB
1528{
1529
1530 /* Ignore the arguments. inf-ptrace.c will use PT_SYSCALL which
1531 will catch all system call entries and exits. The system calls
1532 are filtered by GDB rather than the kernel. */
1533 return 0;
1534}
1535#endif
e58e05d6 1536
54904d81
JB
1537bool
1538fbsd_nat_target::supports_multi_process ()
1539{
1540 return true;
1541}
1542
6c265988 1543void _initialize_fbsd_nat ();
6e9567fe 1544void
6c265988 1545_initialize_fbsd_nat ()
6e9567fe 1546{
6e9567fe
JB
1547 add_setshow_boolean_cmd ("fbsd-lwp", class_maintenance,
1548 &debug_fbsd_lwp, _("\
1549Set debugging of FreeBSD lwp module."), _("\
1550Show debugging of FreeBSD lwp module."), _("\
1551Enables printf debugging output."),
1552 NULL,
1553 &show_fbsd_lwp_debug,
1554 &setdebuglist, &showdebuglist);
386a8676
JB
1555 add_setshow_boolean_cmd ("fbsd-nat", class_maintenance,
1556 &debug_fbsd_nat, _("\
1557Set debugging of FreeBSD native target."), _("\
1558Show debugging of FreeBSD native target."), _("\
1559Enables printf debugging output."),
1560 NULL,
1561 &show_fbsd_nat_debug,
1562 &setdebuglist, &showdebuglist);
6e9567fe 1563}