#include "regcache.h"
#include "regset.h"
#include "gdbthread.h"
+#include "gdb_wait.h"
#include <sys/types.h>
#include <sys/procfs.h>
#include <sys/ptrace.h>
#include <sys/sysctl.h>
-#include <sys/wait.h>
#ifdef HAVE_KINFO_GETVMMAP
#include <sys/user.h>
#include <libutil.h>
static void
fbsd_remember_child (pid_t pid)
{
- struct fbsd_fork_child_info *info;
-
- info = xcalloc (1, sizeof *info);
+ struct fbsd_fork_child_info *info = XCNEW (struct fbsd_fork_child_info);
info->child = pid;
info->next = fbsd_pending_children;
continue;
}
#endif
+
+#ifdef PL_FLAG_EXEC
+ if (pl.pl_flags & PL_FLAG_EXEC)
+ {
+ ourstatus->kind = TARGET_WAITKIND_EXECD;
+ ourstatus->value.execd_pathname
+ = xstrdup (fbsd_pid_to_exec_file (NULL, pid));
+ return wptid;
+ }
+#endif
}
return wptid;
}
fbsd_enable_follow_fork (pid);
}
#endif
+
+#ifdef PL_FLAG_EXEC
+/* If the FreeBSD kernel supports PL_FLAG_EXEC, then traced processes
+ will always stop after exec. */
+
+static int
+fbsd_insert_exec_catchpoint (struct target_ops *self, int pid)
+{
+ return 0;
+}
+
+static int
+fbsd_remove_exec_catchpoint (struct target_ops *self, int pid)
+{
+ return 0;
+}
+#endif
#endif
void
t->to_post_startup_inferior = fbsd_post_startup_inferior;
t->to_post_attach = fbsd_post_attach;
#endif
+#ifdef PL_FLAG_EXEC
+ t->to_insert_exec_catchpoint = fbsd_insert_exec_catchpoint;
+ t->to_remove_exec_catchpoint = fbsd_remove_exec_catchpoint;
+#endif
#endif
add_target (t);
}